Glossary

Definition

Safari share sheet install

Short definition

On iOS, installing a PWA requires the user to manually tap the Share icon in Safari's toolbar, then choose "Add to Home Screen" from the resulting menu — there is no beforeinstallprompt equivalent, no browser-generated install banner, and no way for a site to trigger this flow programmatically.

Reviewed August 9, 2026

Because the flow is entirely manual and hidden a level deep in the share sheet, discoverability is the main practical challenge — sites commonly show an in-page instructional overlay (with an icon pointing at the share button) the first time an iOS Safari visitor arrives, rather than relying on the user finding it unprompted.

Safari reads name, short_name and icon information from the manifest for the resulting home-screen entry, but historically also honours legacy apple-touch-icon and apple-mobile-web-app-* meta tags, so a page targeting iOS well should include both the manifest and those tags for consistent results across older and newer iOS versions.

The flow is only available from Safari itself; other iOS browsers (Chrome, Firefox, Edge for iOS) are required by Apple's platform policy to use Apple's WebKit engine but historically have not all exposed the same "Add to Home Screen" share-sheet action, so PWA install messaging on iOS typically has to specifically target Safari.

There is no appinstalled event or any other JavaScript signal fired when this flow completes, so the only way to detect a resulting installed launch is checking navigator.standalone at the start of a later session.

Related terms
Standalone mode detection
Standalone mode detection means checking, at runtime, whether the current page is running as an installed app rather than a regular tab. On Chromium and most browsers this is window.matchMedia("(display-mode: standalone)").matches; on iOS Safari the historical equivalent is the non-standard navigator.standalone boolean, since iOS predates the display-mode media feature's adoption there.
appinstalled event
appinstalled is a window event, listened for with window.addEventListener("appinstalled", () => { ... }), that fires after the browser has finished installing the PWA — regardless of whether the install was triggered via the native beforeinstallprompt flow or a browser menu item. It fires exactly once per successful install and carries no event detail beyond the fact that installation completed.
PWA install criteria
Chromium's PWA install criteria require: the site served over HTTPS; a linked Web App Manifest with at least a name (or short_name), a 192x192 and 512x512 icon, a start_url, and a display value of standalone, fullscreen, minimal-ui or a display_override entry; and a registered service worker with a fetch event handler, even a minimal pass-through one.
Lighthouse PWA audit
The Lighthouse PWA audit, run from Chrome DevTools' Lighthouse panel or the lighthouse CLI, checks a page against Chromium's installability criteria — valid manifest fields, icon sizes, registered service worker, HTTPS — and flags exactly which checks pass or fail, rather than giving a single opaque score for the category.
display-mode media query
display-mode is a CSS media feature, usable both in stylesheets (@media (display-mode: standalone) { ... }) and in JavaScript via window.matchMedia("(display-mode: standalone)").matches, that reports which of browser, minimal-ui, standalone or fullscreen is currently applied to the page — regardless of what the manifest requested, since the OS can downgrade the requested mode.
beforeinstallprompt userChoice
userChoice is a property on the deferred beforeinstallprompt event, resolving to an object like { outcome: "accepted" | "dismissed", platform: "web" }, available after calling deferredEvent.prompt(). It is the only reliable, synchronous-feeling signal for whether a user actually accepted or dismissed your custom install prompt in that specific interaction.