Skip to content

Platform in Platforms

PWAs on iOS by version (iOS 11.3 to iOS 26)

Published Updated

What a web app can do on an iPhone depends on both the iOS release and the manifest it ships. Releases added capabilities such as service workers, push, badging, and revised storage quotas, while manifest members affect its display mode, icon, and identity. This entry is the dated list, so a support floor can be chosen deliberately instead of guessed at.

Each release below changed something a site can observe at runtime, with one exception: the iOS 17.4 entry records a removal in the European Union that was announced and then withdrawn before the release shipped. The practical consequence is that a support floor is a statement about capabilities, and the capability tests in the examples are the way to hold to it without reading the user agent string.

Before service workers: iPhone OS 1.1.3 and 2.1

Section titled “Before service workers: iPhone OS 1.1.3 and 2.1”

Home Screen icons predate everything else here. WebKit’s Safari 26.0 feature post records that iPhone OS 1.1.3 (January 2008) let users add website icons to the Home Screen, where tapping one opened the site in Safari, and that iPhone OS 2.1 (August 2008) let a developer ask for an app-like standalone mode with the apple-mobile-web-app-capable meta tag. Those two facts set the pattern every later release adjusted: the user performs the add, and the page’s markup only influences the result.

iOS 11.3: service workers and the Cache API

Section titled “iOS 11.3: service workers and the Cache API”

Service workers reached iOS in the 11.3 beta, announced in Workers at Your Service (February 2018). The post is specific about where they run: Safari, applications using SFSafariViewController, and web applications saved to the Home Screen. It is also specific about the limits. WebKit partitions service workers and their clients by the top-level document origin in addition to the origin required by the specification, so an example.com frame inside a webkit.org page gets its own partition. The Cache API quota in that release was a fixed 50 MiB per partition, and once reached, a storage operation needing space fails until the page evicts entries itself. WebKit also removes service worker registrations that go unused for a few weeks, and caches that are not opened for a few weeks, so an offline-first app has to tolerate losing either at any time.

The W3C began standardizing Web Application Manifests in 2013, browser support started in November 2014, and Safari adopted the format in March 2018 with iOS 11.4, as the Safari 26.0 post records. From that release the manifest joined the apple-mobile-web-app-capable meta tag as a way to decide whether an added icon produced a web app or a bookmark: the post’s wording is that for the last 17 years a site needed either the meta tag or a manifest display value to open as a web app. That rule held until iOS 26 moved the decision to the user.

iOS 15.4: manifest timing and manifest icons

Section titled “iOS 15.4: manifest timing and manifest icons”

Two changes in Safari 15.4 affect how the manifest is read. The browser now fetches the manifest during page load rather than at the moment the user chooses Add to Home Screen, which lets the file describe a page viewed in Safari as well. And icons declared in the manifest became usable: Safari and iOS use them when no apple-touch-icon is defined in the HTML head and the manifest’s icon entry either omits purpose or sets "purpose": "any". An apple-touch-icon link still takes precedence, deliberately, so a site can keep an iOS-specific icon distinct from the one other mobile platforms get.

iOS 16.4: push, badging, and manifest identity

Section titled “iOS 16.4: push, badging, and manifest identity”

Safari 16.4 is the release that made an installed web app comparable to an app. It added Web Push for web apps added to the Home Screen, built on the Push API, the Notifications API, and service workers, with notifications appearing on the Lock Screen, in Notification Center, and on a paired Apple Watch, and configurable through Focus. It added the Badging API for Home Screen web apps, with permission granted automatically once the user allows notifications. It added support for the manifest id member so that several installs of one web app stay distinguishable. And it let third-party browsers offer Add to Home Screen from the Share menu.

The quota numbers changed in Safari 17.0 and in WebKit apps on iOS 17, documented in Updates to Storage Policy. A browser app, meaning one that can be set as the default browser, gets an origin quota of up to 60 % of total disk space and an overall quota of up to 80 %; other apps get up to 15 % and 20 %. A cross-origin frame sits in its own partition at 10 % of the main frame’s origin quota. The release also stopped prompting users about a site wanting more space, and brought full support for the Storage API, with navigator.storage.persist() granted on heuristics that include whether the site is open as a Home Screen web app. A web app running standalone gets the same origin and overall quota it would have inside the browser app, so installing does not buy extra room.

iOS 17.4 in the EU: a removal announced and withdrawn

Section titled “iOS 17.4 in the EU: a removal announced and withdrawn”

In February 2024 Apple said Home Screen web apps would be removed for users in the European Union as part of its Digital Markets Act compliance. Its developer support page gave the decision in these words: “to comply with the DMA’s requirements, we had to remove the Home Screen web apps feature in the EU”, adding that EU users would reach websites “through a bookmark with minimal impact to their functionality”. The stated reason was that handling the security and privacy concerns of web apps using alternative browser engines would require building “an entirely new integration architecture”, one that iOS did not have. Open Web Advocacy, which first noticed the change in the first iOS 17.4 beta, recorded Apple’s confirmation on 2024-02-16 (It’s Official, Apple Kills Web Apps in the EU, open-web-advocacy.org).

The removal did not reach a release. An update placed above the original text on the same page states that Apple “will continue to offer the existing Home Screen web apps capability in the EU”, that this support “means Home Screen web apps continue to be built directly on WebKit and its security architecture”, and that developers and users affected by the removal in the beta “can expect the return of the existing functionality for Home Screen web apps with the availability of iOS 17.4 in early March” (Changes for apps in the European Union, archived 2024-03-04, web.archive.org). Open Web Advocacy dated the reversal 2024-03-01 (Apple backs off killing web apps, open-web-advocacy.org), and iOS 17.4 was released on 2024-03-05 (About the security content of iOS 17.4 and iPadOS 17.4, support.apple.com). For a support floor the episode adds no new row: the EU kept the existing capability, and by Apple’s statement it stayed built on WebKit.

iOS 18.4 and iOS 26: declarative push, then installability without rules

Section titled “iOS 18.4 and iOS 26: declarative push, then installability without rules”

Safari 18.4 made Declarative Web Push available on iOS and iPadOS 18.4 for web apps added to the Home Screen, which is the first notification path on the platform that does not need a service worker at all. Safari 26.0 then changed what adding to the Home Screen means: by default every website added opens as a web app, a user who wants a browser bookmark turns off Open as Web App while adding, and the post states plainly that there are now zero requirements for installability in Safari. A manifest keeps its value, since icons declared in it are still used, and Safari 26.0 additionally accepts SVG files and data URLs for icons.

Both snippets are written against capabilities rather than versions, which is what keeps them correct on the next release as well.

The storage ceiling moved in iOS 17, and a site that hard-codes an assumption about it will be wrong on at least one supported release. Ask instead, and keep a path for the engines that cannot answer.

async function roomFor(bytes) {
if (!('storage' in navigator) || typeof navigator.storage.estimate !== 'function') {
return true; // No Storage API here: attempt the write and handle the quota error.
}
const { quota = 0, usage = 0 } = await navigator.storage.estimate();
return quota - usage > bytes;
}

Returning true from the fallback is the honest choice: the write may still succeed, and the caller has to handle QuotaExceededError in either branch. Treating an unanswerable question as a refusal would disable offline support on engines that would have coped.

Declaring an icon every supported release can use

Section titled “Declaring an icon every supported release can use”

Icon resolution differs across the range this entry covers, so declare both forms and let each release pick. The apple-touch-icon link wins where both are present, which makes it the predictable floor.

<link rel="apple-touch-icon" href="/icons/apple-touch-180.png" />
<link rel="manifest" href="/manifest.webmanifest" />

The manifest still earns its place: its icons are used from iOS 15.4 when no apple-touch-icon exists, its id keeps multiple installs apart from iOS 16.4, and from iOS 26 its icon entries may be SVG. On iOS 15.4 and later, the manifest icon is used when no apple-touch-icon is present if its purpose is omitted or includes any.

Debugging a Home Screen web app’s service worker used to be a race against the event you wanted to inspect. Safari 26.0 removed the race, and the menu path is worth writing down.

The pause option is the one that matters for push work, because it stops execution early enough to set a breakpoint inside the handler rather than after it has returned.

Specifications

SpecificationStatus
None.