# Install APIs in iOS Safari and Home Screen apps

> On iOS 18.6.2, navigator.install, BeforeInstallPromptEvent and getInstalledRelatedApps were absent in a Safari tab and in Home Screen web apps.

import LabEvidenceLine from '@components/lab/LabEvidenceLine.astro';
import LabHarnessLinks from '@components/lab/LabHarnessLinks.astro';
import LabResults from '@components/lab/LabResults.astro';
import LabBacks from '@components/lab/LabBacks.astro';
import LabProvenance from '@components/lab/LabProvenance.astro';

<LabEvidenceLine behaviour="install-apis-on-ios" locale="en" />

Chromium browsers let a page trigger or defer installation through `beforeinstallprompt`, and a
newer proposal adds `navigator.install()`. On 2026-10-20, none of the install-related APIs tested was present in a Safari tab or either Home Screen
web app on an iPhone 16 Pro running iOS 18.6.2 (22G100).

<span id="question"></span>

Does Safari on iOS expose a programmatic install API (such as `navigator.install` or `BeforeInstallPromptEvent`,
including the `onbeforeinstallprompt` handler) or `navigator.getInstalledRelatedApps()`, in a Safari tab or
in a Home Screen web app?

<span id="what-we-measured"></span>

## Feature detection in tabs and apps

We read feature-detection values in three contexts:

- A Safari tab in a WebDriver automation window on four pages (`/lab/device-tests/`, `/demo/`,
  `/reference/installation/ios-add-to-home-screen/` and `/lab/device-tests/t1/no-manifest/`),
  notebook N03 and N06;
- The OpenPWA demo launched from its Home Screen icon (N13);
- PWA Lab, the Device Lab harness, launched from its Home Screen icon (N18).

Expressions read in each context:

- `'install' in navigator` and `typeof navigator.install`;
- `'BeforeInstallPromptEvent' in window` and `'onbeforeinstallprompt' in window`;
- `'onappinstalled' in window`;
- `'getInstalledRelatedApps' in navigator`.

The demo page also listens for `beforeinstallprompt` and prints whether it has fired. No page attempted an install; the reads checked whether the APIs were present.

## How to run

Web Inspector is not needed; the harness prints the values.

1. In Safari on the iPhone, open `https://openpwa.net/lab/device-tests/` and scroll to the Results
   panel (T5, T9, T10). Read the install rows, or tap **Copy results as JSON**.
2. Tap Share, then **Add to Home Screen**, then **Add**. Launch **PWA Lab** from its icon and read
   the same rows.
3. Optional: open `https://openpwa.net/demo/` in Safari and in the installed demo, and read
   "Browser offered an install prompt (beforeinstallprompt)" in the installability status.
4. Optional, with Web Inspector: evaluate `'onappinstalled' in window` in both contexts.

<LabHarnessLinks behaviour="install-apis-on-ios" locale="en" />

## Results

On iOS 18.6.2 (22G100) every install API in the list was absent, in the tab and in both Home Screen
apps (Instrumented read, A; notebook N03, N13, N18): `'install' in navigator` false,
`typeof navigator.install` "undefined", `'BeforeInstallPromptEvent' in window` false,
`'onbeforeinstallprompt' in window` false and `'getInstalledRelatedApps' in navigator` false.
`'onappinstalled' in window` was false in the tab (N03) and in the raw reads of both apps. The demo's
status read "Not fired yet" for `beforeinstallprompt` in the tab and in the app.

In Safari on this build, installation goes through the user's own Share → **Add to Home Screen**.
A page can detect that it is running as an installed app (`display-mode: standalone`,
`navigator.standalone`), but it has no API to start or defer an install, and none to ask whether a
related app is installed.

<LabResults behaviour="install-apis-on-ios" locale="en" />

<span id="what-the-documentation-says"></span>

## Install support in BCD and WebKit

BCD records no Safari for iOS support for `BeforeInstallPromptEvent`
([BeforeInstallPromptEvent.json](https://raw.githubusercontent.com/mdn/browser-compat-data/main/api/BeforeInstallPromptEvent.json),
github.com), and its `api.Navigator` file records `install` and `getInstalledRelatedApps` without
Safari support ([Navigator.json](https://github.com/mdn/browser-compat-data/blob/main/api/Navigator.json),
github.com). The Web Install proposal that defines `navigator.install()` is a WICG draft
([Web Install](https://wicg.github.io/install-element/), wicg.github.io). WebKit's iOS 16.4 post
describes adding a web app through the Share menu's Add to Home Screen item
([Web Push for Web Apps on iOS and iPadOS](https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/),
webkit.org).

The measurement agrees with these sources. BCD's Safari for iOS cells do not distinguish a tab
from a Home Screen app; this run shows the APIs are absent in both, so the context makes no
difference for them on 18.6.2. It confirms the documented absence and is not a new finding.

## Data

The values are in the study's
[data package](/research/2026-10-ios18-home-screen-web-apps/data/) (CC BY 4.0): the tab side in
`raw/2026-10-20-ios18.6.2-tab-lab.json`, `raw/2026-10-20-ios18.6.2-tab-demo.json`,
`raw/2026-10-20-ios18.6.2-tab-ios-a2hs.json` (N03) and `raw/2026-10-20-ios18.6.2-tab-t1-no-manifest.json`
(N06); the demo app in `raw/2026-10-20-ios18.6.2-step09-app-demo.json` (N13); PWA Lab in
`raw/2026-10-20-ios18.6.2-step12-app-lab.json` (N18). The machine-readable run is in
[/lab/results.json](/lab/results.json) under the id
`install-apis-on-ios/2026-10-20-ios-18.6.2-22g100`.

<span id="what-it-backs"></span>

## Related reference entries

The result backs the iOS statements of the [install prompt](/reference/installation/install-prompt/) and
[navigator.install](/reference/installation/navigator-install/) entries. It also backs
[getInstalledRelatedApps()](/reference/installation/get-installed-related-apps/) and the
Safari for iOS row of the install prompt compatibility data.

<LabBacks behaviour="install-apis-on-ios" locale="en" />

## Limits

- One device, one build, one operator, one run day: an iPhone 16 Pro on iOS 18.6.2 (22G100).
- Presence was tested, not behaviour. A browser could in principle dispatch an event with no
  matching handler property; no listener-only check for `beforeinstallprompt` was run outside the
  demo page.
- The tab-side reads came from WebDriver automation windows; feature detection does not depend on
  their empty data store.
- Third-party iOS browsers were not tested (T5b was not run). Safari 26.0 changed how added sites
  open; this run on 18.6.2 says nothing about iOS 26 or later.
- iPadOS and other iOS builds were not tested. The same device is due to be rerun after its upgrade
  to iOS 27.

<LabProvenance locale="en" />