Observed behaviour
On a self-hosted instance, a custom favicon configured through Admin Settings → Public App Identity → Favicon URL is correctly stored and exposed through
However,
window.__FLUXER_BOOTSTRAP__, but the initial server-rendered HTML still points rel="icon" to the built-in /web/favicon-32x32.png.
For example, the bootstrap data correctly contains the configured custom favicon:
"branding" : {
"favicon_url" : "https://example.com/assets/branding/favicon.png"
}view-source: for the instance still contains:
< link rel ="icon " type ="image/png " sizes ="32x32 " href ="https://chat.example.com/web/favicon-32x32.png "> /web/favicon-32x32.png serves the built-in Fluxer favicon rather than the configured custom favicon.
The custom favicon does appear in the browser tab after the web app has loaded, so the client appears to apply the configured branding dynamically. However, browser bookmarks/favorites can still use the Fluxer favicon, which is consistent with the initial HTML continuing to advertise /web/favicon-32x32.png.
Expected behaviour
When favicon_url is configured in Public App Identity, the initial HTML should use that configured URL for rel="icon" instead of the built-in Fluxer favicon.
The configured branding value is already present in window.__FLUXER_BOOTSTRAP__, so the setting itself appears to be stored and returned correctly.Reproduction steps
- On a self-hosted Fluxer instance, open Admin Settings → Public App Identity.
- Set Favicon URL to a valid custom PNG favicon URL and save the setting.
- Confirm that the custom favicon is accessible and that the configured URL appears as
branding.favicon_urlinwindow.__FLUXER_BOOTSTRAP__. - Open
view-source:https://<instance-domain>/. - Search the initial HTML for
rel="icon". - Observe that it still points to
/web/favicon-32x32.pngrather than the configuredfavicon_url. - Open
/web/favicon-32x32.pngdirectly and observe that it is the built-in Fluxer favicon. - In a browser such as Firefox, bookmark the instance. The tab can display the custom favicon after the app loads, while the bookmark/favorite can still display the built-in Fluxer favicon.
Build information
Stable Web 2026.1003.2520, Linux (x64), Firefox 157.0, Locale en-US
Platform
Web, Self-hosting
Evidence
The following screenshots demonstrate the issue:
while the initial HTML independently contains:
The custom branding asset itself is reachable successfully. The previous cross-origin/CSP problem is not reproduced here.
For privacy, the instance and branding domains have been redacted from the screenshots/report. The exact hostname does not appear relevant to reproducing the issue.
- Public App Identity configuration showing that a custom Favicon URL is configured.
view-source:/ Inspector showing that the initial HTML still contains:< link rel ="icon "type ="image/png "sizes ="32x32 "href ="https://<instance-domain>/web/favicon-32x32.png "> /web/favicon-32x32.pngopened directly, showing that this URL serves the built-in Fluxer favicon.- Optionally, a screenshot showing the custom favicon in the browser tab while the saved bookmark/favorite still uses the Fluxer favicon.
"branding" : {
"favicon_url" : "https://<branding-domain>/assets/branding/favicon.png"
}< link rel ="icon " type ="image/png " sizes ="32x32 " href ="https://<instance-domain>/web/favicon-32x32.png "> Details
Relation to the previous branding CSP issue
This appears to be separate from the previous self-hosted branding CSP issue (#710 / PR #1651). That issue concerned configured branding asset origins being blocked by the Content Security Policy. The CSP issue is no longer occurring in this case: the custom favicon URL can be requested successfully and the custom favicon is applied to the browser tab. The remaining issue is specifically that the initial HTML itself still references the built-in Fluxer favicon instead of the configuredfavicon_url.
I am reporting this separately to avoid conflating it with the previous CSP problem or other CSP-related issues.
1 comment
Comment by @playaz44