Installability criteria and the web app manifest, member by member
What makes a site installable on Chromium (HTTPS, a linked manifest with name/short_name, 192 and 512 px icons, start_url, display) versus Safari (no requirements since 26), why a service worker is no longer an install gate but still mandatory in practice, and a minimal correct manifest with id, scope, display_override, colours and icons.
Overview
What: The concrete bar a web app must clear to be offered for installation, and the manifest members that control identity, launch, appearance and integration once installed.
Why: Agents routinely ship a manifest missing id or scope, forget the 512 px icon, or assume Lighthouse will grade "PWA-ness" (that category was removed). Getting the manifest right is cheap and it decides the launcher icon, the first-paint background, whether the URL bar leaks in, and whether a later change of start URL is treated as a different app.
Use when: creating or auditing any installable web app.
Do not confuse "installable" with "app-like": offline, native feel and performance are separate work (pwa-app-shell-and-offline-fallback, pwa-standalone-display-and-safe-areas).
Implementation
- Chromium installability (Chrome, Edge, Samsung Internet): served over HTTPS (or
localhost/loopback —file://never qualifies); a manifest linked from every page that can be a launch target (<link rel="manifest" href="/manifest.webmanifest">); manifest containsnameorshort_name,iconswith at least 192×192 and 512×512,start_url,displayand/ordisplay_override, andprefer_related_applicationsabsent orfalse. A service worker is not required for menu install (dropped in Chrome 108 mobile / 112 desktop) — but it is required for offline, caching and push, so treat it as mandatory in practice. Chrome also lets users install any site as an app without a manifest; the manifest is what earns promotion. - Safari: macOS 14+ "Add to Dock" and iOS/iPadOS 16.4+ Share → Add to Home Screen work with or without a manifest; from Safari/iOS 26 every added site opens as a web app by default ("Open as Web App" toggle) and there are zero installability requirements. No
beforeinstallpromptexists on iOS (pwa-ios-safari-limits). - Firefox: desktop does not install web apps; Firefox for Android offers add-to-home-screen — verify current behaviour.
- Manifest members that matter:
- identity/launch:
id(set it explicitly sostart_urlcan change later),name,short_name,description,start_url,scope(out-of-scope navigations reveal the URL bar). - appearance:
display(standalone|fullscreen|minimal-ui|browser),display_override(ordered list tried first — how you opt intowindow-controls-overlayortabbedwith a fallback),orientation,theme_color,background_color(painted before CSS loads — match your app background to avoid a flash). - icons:
icons[]withsizes,type,purpose(any,maskable,monochrome) — seepwa-icons-maskable-and-screenshots. - store-like:
screenshots(enables the richer install sheet),categories,shortcuts(long-press icon menu). - deeper integration (Chromium-leaning):
launch_handler,file_handlers,protocol_handlers,share_target.
- identity/launch:
- Minimal correct manifest:
{
"id": "/?source=pwa",
"name": "Field Notes", "short_name": "Field Notes",
"description": "Capture and review notes, online or offline.",
"start_url": "/?source=pwa", "scope": "/",
"display": "standalone",
"display_override": ["standalone", "minimal-ui", "browser"],
"background_color": "#0b0f14", "theme_color": "#0b0f14",
"icons": [
{ "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" },
{ "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" },
{ "src": "/icons/icon-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
]
}
- Do not rely on a Lighthouse PWA score — the category was removed; audit against the checklist below instead.
Verification
- Page served over HTTPS; manifest linked from every launchable page.
id,name/short_name,start_url,scope,displayset explicitly.- 192 and 512
anyicons plus a 512maskableicon resolve (no 404). background_colormatches the app background — no first-paint flash on launch.- Service worker registered (for offline, not for the install gate).
- Install is offered as an enhancement, never a gate (impossible to prompt on iOS).
- Chrome DevTools → Application → Manifest shows no warnings; installed app opens without the URL bar.
Sources:
- https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable
- https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Manifest/Reference
- https://developer.chrome.com/blog/update-install-criteria
- https://webkit.org/blog/17333/webkit-features-in-safari-26-0/
- https://w3c.github.io/manifest/
Limitations
- Exactly which signal triggers Chrome's automatic install prompt is fast-moving; the menu-install criteria above are stable.
display_override,launch_handler,file_handlers,protocol_handlersandshare_targetare Chromium-leaning and marked experimental on MDN; feature-detect and never make them load-bearing.- Safari ignores most manifest members beyond icons, colours and display; iOS splash screens come from
background_colorand the icon. - A manifest cannot make a site feel like an app; it only makes it installable.
- Values verified 2026-09-26: all 1 numeric values in this item were checked (1 against platform documentation) and confirmed; no corrections were needed.