# What iPhone Duo and iOS 27.1 mean for web apps

> iPhone Duo goes on sale on 2026-10-23 with iOS 27.1. What Safari 27 gave web apps, what no source records for 27.1, and what is still untested.

iPhone Duo, Apple's first foldable iPhone, goes on sale on 2026-10-23 in the first group of
countries, and Apple's announcement states that "iPhone Duo will be available with iOS 27.1"
([Apple unveils iPhone Duo](https://www.apple.com/newsroom/2026/09/apple-unveils-iphone-duo/),
apple.com). Browser-compat-data lists Safari on iOS 27, released 2026-09-14, as the current
Safari on iOS release, and Apple's notes for Safari 27.0 record support for the service worker
static routing API and two fixes to service worker registration
([BCD browsers/safari_ios.json](https://github.com/mdn/browser-compat-data/blob/main/browsers/safari_ios.json),
github.com;
[Safari 27 Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27-release-notes),
developer.apple.com). Neither Apple's Safari release notes index nor browser-compat-data lists a
Safari 27.1 release, and web app behavior across the device's two displays has not been tested.

<span id="what-apple-announced-on-2026-09-09"></span>

## Two displays and the launch schedule

The press release that introduced the device on 2026-09-09 describes two displays. Opened,
iPhone Duo has a 7.6-inch inner display; closed, it has a 5.4-inch outer display. Apple writes
that "both displays share the same aspect ratio, so content scales proportionally"
([Apple unveils iPhone Duo](https://www.apple.com/newsroom/2026/09/apple-unveils-iphone-duo/),
apple.com).

The same release describes new multitasking on the inner display. Split View lets a user open
two apps side by side, and Apple names Safari as an example of an app a user can open in two
windows, "for comparison shopping". Pre-orders open on 2026-10-16, availability begins on
2026-10-23 in the first group of countries, and the release lists 28 other countries and
regions from 2026-10-30
([Apple unveils iPhone Duo](https://www.apple.com/newsroom/2026/09/apple-unveils-iphone-duo/),
apple.com).

## What Apple asks of App Store developers

On 2026-10-05 Apple Developer News published "Prepare and submit your apps for iPhone Duo". The
notice says to recompile existing apps with Xcode 27.1, "which adds development support for
iPhone Duo", and to use Device Hub "to visualize how your apps behave on iPhone Duo across all
poses and orientations"
([Prepare and submit your apps for iPhone Duo](https://developer.apple.com/news/?id=kkphp5qo),
developer.apple.com).

The notice also sets a date for App Store product pages. Updated screenshot and app preview
specifications cover iPhone Duo, an app that submits iPhone Duo screenshots gets a badge on its
product page, and "starting April 2027, any apps or games submitted will need to include
screenshots for iPhone Duo"
([Prepare and submit your apps for iPhone Duo](https://developer.apple.com/news/?id=kkphp5qo),
developer.apple.com).

## What iOS 27 already gave web apps

Apple's Safari 27 Release Notes date the release September 14, 2026, give its version as 27.0
(20625.1.29), and state that Safari 27 is available for iOS 27, iPadOS 27, visionOS 27, and
macOS. The notes list "Added support for the service worker static routing API." They also fix two registration failures. Service worker registrations are unregistered when the main script is
missing, and when retrieving stored imported scripts fails
([Safari 27 Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27-release-notes),
developer.apple.com).

WebKit's feature post for the release describes the static routing API as letting "a service
worker declare routing rules that the browser can use to bypass the service worker entirely for
certain requests, reducing overhead for high-performance PWAs"
([WebKit Features for Safari 27.0](https://webkit.org/blog/18325/webkit-features-for-safari-27-0/),
webkit.org).

## How `addRoutes()` works

MDN documents the method that registers those rules, `InstallEvent.addRoutes()`, as specifying
static routes "which define rules for fetching specified resources that will be used even before
service worker startup". Its stated purpose is bypassing a service worker when a resource should
always come from the network or from a browser `Cache`, which "avoids the performance overhead of
unnecessary service worker cycles"
([InstallEvent: addRoutes() method](https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes),
developer.mozilla.org).

Each rule pairs a `condition` with a `source`. MDN lists `urlPattern`, `requestMethod`,
`requestMode`, `requestDestination`, and `runningStatus` as condition properties, plus `not` and
`or` for combining conditions. A `source` can be `"network"`, `"cache"`, `"fetch-event"`, or
`"race-network-and-fetch-handler"`, or an object naming one Cache with `cacheName`. The
`urlPattern` condition takes a `URLPattern` instance or constructor input, and MDN says
regular expression capturing groups are not allowed in it
([InstallEvent: addRoutes() method](https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes),
developer.mozilla.org).

MDN explains what each source does. `"cache"` loads matching resources from a browser Cache,
`"fetch-event"` hands them to the service worker's `fetch` handler, and `"network"` loads them
from the network. `"race-network-and-fetch-handler"` sends the request to the network and to the
`fetch` handler at the same time and uses whichever completes first. MDN adds that
`"fetch-event"` can be combined with the `runningStatus` condition, so resources come from the
service worker when it is running and from a network route when it is not
([InstallEvent: addRoutes() method](https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes),
developer.mozilla.org).

MDN also documents when `addRoutes()` throws a `TypeError` when a rule is invalid,
when a rule uses `"fetch-event"` as its source and the service worker has no `fetch` handler, or
when `or` is combined with another condition type. Its first example routes URLs that start with
`/articles` to the network when the service worker is not running
([InstallEvent: addRoutes() method](https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes),
developer.mozilla.org).

Browser-compat-data records `api.InstallEvent.addRoutes` from Safari 27 and Safari on iOS 27, and
from Chrome 123 and Chrome Android 123. It records no support in Firefox or Firefox for Android
and links Bugzilla bug 1855580 as the implementation tracker
([BCD api/InstallEvent.json](https://github.com/mdn/browser-compat-data/blob/main/api/InstallEvent.json),
github.com).

The Safari 27 notes also fix service worker routes that
were not matched when no `fetch` event handler was set. A second routing fix addresses rules that did not
"enforce limitation checks as required by the specification"
([Safari 27 Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27-release-notes),
developer.apple.com).

## What the record shows for iOS 27.1

Apple's Safari release notes index, read on 2026-10-20, lists "Safari 27 Release Notes" and
"Safari 27.2 Beta Release Notes" in the version 27 group, and no Safari 27.1 notes
([Safari release notes](https://developer.apple.com/documentation/safari-release-notes),
developer.apple.com).

Browser-compat-data lists two Safari on iOS releases in the 27 series. These are 27, with status `current`
and release date 2026-09-14, and 27.2, with status `beta`. It lists no 27.1 release
([BCD browsers/safari_ios.json](https://github.com/mdn/browser-compat-data/blob/main/browsers/safari_ios.json),
github.com).

### The foldable APIs Safari does not list

The web platform has an API for screens like this one. MDN says the Viewport Segments API "allows
developers to access the position and dimensions of logically separate viewport segments using
CSS and JavaScript", and that segments are created "when the viewport is split by one or more
hardware features such as a fold or a hinge between separate displays"
([Viewport Segments API](https://developer.mozilla.org/en-US/docs/Web/API/Viewport_segments_API),
developer.mozilla.org).

Among the API's CSS features are the `horizontal-viewport-segments` and
`vertical-viewport-segments` media features. MDN describes `horizontal-viewport-segments` as
detecting "whether the device has a specified number of viewport segments laid out horizontally
(side by side)". It lists a value of 1 for a foldable device that is either unfolded or closed in
the continuous device posture, and a value of 2 for a foldable device that is folded and
oriented so its segments are side by side
([horizontal-viewport-segments](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/horizontal-viewport-segments),
developer.mozilla.org).

Browser-compat-data records `api.Viewport.segments` from Chrome 138 and Chrome Android 138, and
records no support in Safari, Safari on iOS, Firefox, or Firefox for Android
([BCD api/Viewport.json](https://github.com/mdn/browser-compat-data/blob/main/api/Viewport.json),
github.com). For the two media features, browser-compat-data records support from Chrome 138 and
no support in Safari or Firefox, with the Safari on iOS and Firefox for Android entries mirroring
those records
([BCD css/at-rules/media.json](https://github.com/mdn/browser-compat-data/blob/main/css/at-rules/media.json),
github.com). MDN labels the API experimental and not Baseline
([Viewport Segments API](https://developer.mozilla.org/en-US/docs/Web/API/Viewport_segments_API),
developer.mozilla.org).

### What comes after 27.1

Apple's developer releases page lists iOS 27.2 RC (24B115) on 2026-10-19
([Releases](https://developer.apple.com/news/releases/), developer.apple.com). The Safari 27.2
Beta Release Notes give their date as October 13, 2026 and their version as 27.2 beta
(20625.2.8)
([Safari 27.2 Beta Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27_2-release-notes),
developer.apple.com).

<span id="why-it-matters-for-pwa-developers"></span>

## Significance for web apps on two displays

The service worker change is the part a team can act on before touching the device.
Browser-compat-data's support range for `addRoutes()` on Safari on iOS starts at 27, next to
Chrome 123, and Firefox has no recorded support
([BCD api/InstallEvent.json](https://github.com/mdn/browser-compat-data/blob/main/api/InstallEvent.json),
github.com). A rule that names `"fetch-event"` as its source throws a `TypeError` in a worker
without a `fetch` handler, and Safari 27.0 also fixed routes that were not matched in that same
no-handler case
([InstallEvent: addRoutes() method](https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes),
developer.mozilla.org;
[Safari 27 Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27-release-notes),
developer.apple.com).

The two registration fixes concern failure states of a deployed worker. Apple lists a
registration whose main script is missing, or whose stored imported scripts cannot be retrieved,
as one that is unregistered
([Safari 27 Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27-release-notes),
developer.apple.com).

On layout, Apple says the two displays share an aspect ratio and that Safari can run in two
windows in Split View
([Apple unveils iPhone Duo](https://www.apple.com/newsroom/2026/09/apple-unveils-iphone-duo/),
apple.com). Browser-compat-data records no Safari on iOS support for `viewport.segments`
or for the two segment media features, so a fold layout written against them has no recorded
Safari support
([BCD api/Viewport.json](https://github.com/mdn/browser-compat-data/blob/main/api/Viewport.json),
github.com;
[BCD css/at-rules/media.json](https://github.com/mdn/browser-compat-data/blob/main/css/at-rules/media.json),
github.com).

For teams that also ship through the App Store, the April 2027 screenshot rule applies to "any
apps or games submitted", in Apple's words
([Prepare and submit your apps for iPhone Duo](https://developer.apple.com/news/?id=kkphp5qo),
developer.apple.com).

## Related entries

- [PWAs on iOS by version, iOS 27](/reference/platforms/ios-by-version/#ios-27): see the dated iOS 27 record and its sources.
- [PWAs on iOS by version, iOS 27.1 on iPhone Duo](/reference/platforms/ios-by-version/#ios-27-1): see the iOS 27.1 record and the Viewport Segments data.
- [Service Worker Static Routing API](/reference/service-worker/static-routing/): see the rule syntax of `addRoutes()`.
- [PWAs on iOS and Safari](/reference/platforms/ios-safari/): see installing and running web apps on iOS.
- [Service worker browser support](/compatibility/service-worker/): see service worker support by browser and version.

## Open and unverified

- An iPhone Duo device test has not been run. How Safari and Home Screen web apps lay out on the inner and outer displays, and across a fold or unfold while a page is open, is not confirmed.
- Whether a Home Screen web app can take part in Split View on iPhone Duo is not confirmed.
- The viewport widths a page receives in each Split View arrangement are not confirmed.
- Whether WebKit in iOS 27.1 differs from WebKit in iOS 27.0 is not confirmed.
- Whether Safari will ship the Viewport Segments API, and in which release, is not confirmed.
- What the final Safari 27.2 release contains is not confirmed; when read on 2026-10-20, the notes Apple had published for it were beta release notes.
- Whether the April 2027 screenshot rule changes before it takes effect is not confirmed.

## Sources

- [Apple unveils iPhone Duo](https://www.apple.com/newsroom/2026/09/apple-unveils-iphone-duo/) (apple.com)
- [Prepare and submit your apps for iPhone Duo](https://developer.apple.com/news/?id=kkphp5qo) (developer.apple.com)
- [Safari 27 Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27-release-notes) (developer.apple.com)
- [Safari release notes](https://developer.apple.com/documentation/safari-release-notes) (developer.apple.com)
- [Safari 27.2 Beta Release Notes](https://developer.apple.com/documentation/safari-release-notes/safari-27_2-release-notes) (developer.apple.com)
- [Releases](https://developer.apple.com/news/releases/) (developer.apple.com)
- [WebKit Features for Safari 27.0](https://webkit.org/blog/18325/webkit-features-for-safari-27-0/) (webkit.org)
- [InstallEvent: addRoutes() method](https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes) (developer.mozilla.org)
- [Viewport Segments API](https://developer.mozilla.org/en-US/docs/Web/API/Viewport_segments_API) (developer.mozilla.org)
- [horizontal-viewport-segments](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/horizontal-viewport-segments) (developer.mozilla.org)
- [browser-compat-data: api/InstallEvent.json](https://github.com/mdn/browser-compat-data/blob/main/api/InstallEvent.json) (github.com)
- [browser-compat-data: api/Viewport.json](https://github.com/mdn/browser-compat-data/blob/main/api/Viewport.json) (github.com)
- [browser-compat-data: browsers/safari_ios.json](https://github.com/mdn/browser-compat-data/blob/main/browsers/safari_ios.json) (github.com)
- [browser-compat-data: css/at-rules/media.json](https://github.com/mdn/browser-compat-data/blob/main/css/at-rules/media.json) (github.com)