Favicons and PWA
Favicons are the small icons browsers show in tabs, bookmarks, and address bars. Combined with a PWA manifest, they let visitors install your site to their home screen as a standalone app on mobile and desktop.
The flexweg-favicon plugin generates everything from one uploaded square image. This page covers the visitor experience; for configuration see the flexweg-favicon plugin reference.
What visitors get
Browser tabs
Every browser shows the 96×96 PNG favicon next to the tab title:
┌─[ 🟦 Example Site - Welcome ]──[ 🟧 Other tab ]─
Browser bookmarks
Same icon appears in the bookmarks bar.
iOS home screen
When a user adds the site to their iOS home screen, iOS uses the 180×180 Apple touch icon with a white background (Safari clips dark icons against dark wallpaper otherwise — the plugin always emits a white background to avoid this).
Android home screen / launcher
Android uses the 192×192 + 512×512 maskable PNGs declared in site.webmanifest. Maskable icons let Android adapt the shape (circle, square, rounded square) to match the launcher's design system.
Splash screen (PWA install)
When installed via "Add to home screen" → opening the app, Android and iOS show a splash screen with:
- The 512×512 icon centred
- The PWA's
background_color(configurable in plugin settings) - The PWA's
name(configurable in plugin settings)
Address bar / browser chrome tint
When PWA is installed and theme_color is set, browsers tint their UI to match — Safari iOS pulls this from <meta name="theme-color">; Chrome Android uses manifest.theme_color.
What "install to home screen" looks like
Modern browsers detect a valid PWA manifest and prompt the user to install:
- Chrome desktop — install icon (⊕) appears in the address bar after a few visits
- Safari iOS — Share button → "Add to Home Screen"
- Chrome Android — auto-prompts after engagement, or via menu → "Add to Home screen"
- Edge desktop — install icon in the address bar
The installed app:
- Launches without browser chrome — no address bar, no tabs (when
display: standalone) - Has its own icon on the home screen / desktop
- Survives browser closure (Chromium variants implement this as a Chrome window with chrome hidden)
When does this make sense?
PWA installation is most valuable for sites visitors return to often:
- News sites — frequent visits, social-feed feel
- Web apps disguised as content sites (dashboards, calculators, tools)
- Documentation — useful as a sidebar reference
- Personal blogs with regular readers
For brochure sites visitors hit once, PWA install adds little value but costs nothing — leaving the favicon plugin enabled is still fine.
What gets injected into your pages
Every published page's <head> includes:
<link rel="icon" type="image/png" href="/favicon/favicon-96x96.png?v=1735689600000" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/favicon/favicon.svg?v=1735689600000" />
<link rel="shortcut icon" href="/favicon/favicon.ico?v=1735689600000" />
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png?v=1735689600000" />
<link rel="manifest" href="/favicon/site.webmanifest?v=1735689600000" />
<meta name="theme-color" content="#3b82f6" />
The ?v=… query strings cache-bust whenever the favicon is re-uploaded.
What site.webmanifest looks like
{
"name": "Example Site",
"short_name": "Example",
"icons": [
{ "src": "/favicon/web-app-manifest-192x192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable" },
{ "src": "/favicon/web-app-manifest-512x512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
],
"theme_color": "#3b82f6",
"background_color": "#ffffff",
"display": "standalone",
"start_url": "/"
}
start_url is hardcoded to /. Override the manifest manually via the PWA tab → Re-upload manifest flow if you want a different start URL.
When changes apply
- Newly published pages include the new
<link>URLs (with the new?v=query string). - Already-published pages keep their old
<link>tags. Browsers honour the cache-bust query string but only on the next regeneration of those pages.
To roll out a favicon change site-wide: Themes → Regenerate site → All HTML pages.
For a PWA settings change (theme colour, display mode, name) where you don't want to re-render every page, use the Re-upload manifest button in the favicon settings — it pushes only site.webmanifest, and browsers fetch it fresh on next visit.
Continue
- flexweg-favicon plugin reference
- Settings → General — site title used as PWA name