Hi! I am working on a hobby project (B2C). I am running Streamlit via Starlette middleware and hosting on Render. Everything works well, but I just can’t manage to set a custom favicon (PNG, ICO or SVG) in Safari. Tried 5-10 different solutions, nothing works. Read all the docs, community posts and Github discussions. Chrome works fine. I know Safari is known for its challenges with favicons, but I feel like this should be possible with Streamlit in an easy way. It always defaults to the Streamlit branded favicon. In local development I can access the Streamlit static folder directly and replace the favicon with my own, and it works, but when hosting on Render this does not work of course. I can’t access the static folder and index.html. There has to be way to do this, it feels like basic functionality. It’s keeping me from going live and makes me consider other frameworks. Anyone that managed to make this work?
Hey there, thanks for reaching out and welcome to the Streamlit community!
This is a super common pain point, especially for folks deploying B2C apps who want that polished, branded look. You’re not alone—Safari is notoriously stubborn with favicons, and Streamlit’s default behavior can be tricky to override, especially on managed hosts like Render.
Summary:
Setting a custom favicon in Streamlit works reliably in Chrome and Firefox using st.set_page_config(page_icon=...), but Safari often ignores this and defaults to the Streamlit icon, especially when you can’t directly modify the static folder or index.html (as is the case on Render or Streamlit Community Cloud). This is a known limitation and has been discussed extensively in the community and on GitHub. There is currently no officially supported, cross-browser way to guarantee a custom favicon in Safari when deploying Streamlit apps on managed platforms. Workarounds like static file serving or injecting custom HTML/JS have not proven reliable for Safari, and direct file replacement is not possible on most hosts. See Streamlit Docs, GitHub Issue #10911, and community discussions.
If you want to see a minimum reproducible example or want to debug further, please share your code and deployment setup! The community might have new tricks, and sometimes browser caching or icon format quirks can be the culprit. If anyone in the community has a Safari-specific fix that works on Render, please jump in and share your insights! ![]()
Sources: