Favicon
The site favicon is generated once, from a single uploaded source image, and deployed automatically with every build. Upload it under Settings (the favicon upload control); the app generates every size browsers and installable web apps expect.
Uploading
Settings’ favicon control accepts PNG, JPEG, SVG, or ICO files up to 5 MB. On save:
- The source is size-checked (“roughly square” — an aspect ratio no wider than ~1.25:1, because scaling a wide wordmark into an icon produces an unusable sliver). Non-square uploads are rejected with a clear message rather than mangled.
- A generated icon set is produced:
favicon-96x96.png,apple-touch-icon.png(180×180),web-app-manifest-192x192.png,web-app-manifest-512x512.png, an SVG wrapper embedding the 96×96 rendering (favicon.svg), and afavicon.ico(taken verbatim when you uploaded an ICO, otherwise derived from the 96×96 PNG). - Files land in two places: the
assets/directory (the source of truth for the next static build) andpublic/(so the CMS can serve them immediately). - The save triggers a rebuild, and the action is audited (“Favicon updated by
”).
Fresh installs ship a default set (the Chinaski mark), which the upload replaces.
Where the favicons appear
At build time, the full favicon set is copied to the site root of the output — not under any language prefix — and included in the signed build manifest. The standard _head.tt partial then emits the favicon <link> tags for enabled sites: favicon PNG, apple-touch-icon, and the .ico shortcut.
Removing it
The Settings favicon delete control removes the uploaded source and all derivatives from both directories, clears the setting, and triggers a rebuild — the restored state is the shipped defaults (or no favicon <head> links if the shipped defaults are absent).
Failure modes to know about
- Where is the favicon not working? The generated set lives in
assets/; if the static build happens elsewhere, a build-log entry tells you.favicon.svggeneration failure is logged as a warning (non-fatal), while the PNG/ICO set is what the<head>references. - Root-owned leftovers: generated and copied files replace rather than modify — a stray root-owned favicon left behind by a deploy tooling action can’t wedge the save; the write path requires directory-level writability instead of file-level ownership.
- If the process can’t write the assets directory at all, the flash error names the directory and points at ownership/permissions — that’s your fix, not retrying.