iOS PWA Compatibility
What's supported on Safari on iOS and iPadOS for Progressive Web Apps
This is a Note: a sometimes short, sometimes incomplete, living document.
Sponsored by you: PayPal donation, or buying me a coffee.
This is a compatibility list of supported features on Safari on iOS and iPadOS vs. what's available in the most used PWA browser in current market share for similar mobile devices: Google Chrome on Android.
This list is based and maintained on private tests I frequently do. WebKit is getting better documenting these things, but there is still a huge gap.
High-level PWA support #
Ability | Supported | Since version |
---|---|---|
Offline Support with Service Workers | ✅ | 11.3 |
App Installation from Browser | ✅ | 11.3 (from 2.0 with meta tags) |
App Installation from Store | ✅ | 14.0 with WebView and App-Bound domains (no official announcement) |
App Installation for Enterprise | ✅ | 10.0 (MobileConfig file) |
Installation Prompt or Banner | ❌ | |
Singleton Installation | ❌ | |
App Installation Recovery with Backup | ✅ | 11.3 |
Link Capturing | ❌ | Only a push message can open an installed PWA |
In-App Browser for out-of-scope links | ✅ | 12.0 |
Storage shared with Browser | ❌ | |
App appears in Search | ✅ | 11.3 (from 4.0 with meta tags) |
App appears in Multitasking list | ✅ | 11.3 (from 2.0 with meta tags) |
App appears in Homescreen | ✅ | 11.3 (from 2.0 with meta tags) |
App appears in App Gallery Folders | ❌ | |
App can share screen with other apps | ✅ | 14.0 (iPadOS-only) |
App can be installed from non-Safari browsers | ✅ | 16.4, if opted-in by the browser |
Web App Manifest Support #
W3C Spec Fields #
Field | Supported | Since version |
---|---|---|
dir |
❌ | |
lang |
❌ | |
name |
✅ | 11.3 |
short_name |
✅ | 11.3 |
scope |
✅ | 11.3 |
icons |
✅ | 15.4 |
display |
✅ | 11.3 |
orientation |
❌ | |
start_url |
✅ | 11.3 |
id |
✅ | 16.4 (it's concatenated with icon's name) |
theme_color |
✅ | 15.0 |
related_applications |
❌ | |
prefer_related_applications |
❌ | |
background_color |
❌ | |
shortcuts |
❌ |
Before iOS 15.4, icons for PWAs can only be set by the non-standard
<link>
element withrel=apple-touch-icon
. If you still have that element, it overrides your manifesticons
declaration.
Display options #
Value | Supported | Fallbacks To |
---|---|---|
browser |
✅ | |
standalone |
✅ | |
minimal-ui ¹ |
❌ | browser |
fullscreen ¹ |
❌ | standalone |
Icon Options #
Option | Supported |
---|---|
PNG Image | ✅ |
SVG Image | ❌ |
Maskable Icon¹ | ❌ |
Monochrome Icon¹ | ❌ |
¹ WebKit recognizes these options, but it ignores them. The apple-touch-icon
link element in the HTML overrides the manifest icon declaration.
The list of fields comes from the latest W3C Working Draft. What's supported on WebKit can be seen by testing or by checking the WebKit Source code (ApplicationManifest.h).
Apple non-standard PWA-related abilities #
Option | Supported since | Should you use it? | Replaced by |
---|---|---|---|
apple-mobile-web-app-capable meta |
2.0 | 🫱 since 11.3 it's optional² | display: standalone in manifest |
apple-mobile-web-app-title meta |
8.0 | 👎 since 11.3 | name in manifest |
apple-mobile-web-app-status-bar-style meta |
2.0 | 👎 since 15.0 | theme-color meta tag |
black-translucent status bar meta |
2.0 | 👍 Still the only way to get a fullscreen app | |
apple-touch-icon link |
2.0 | 🫱 (optional since 15.4 but still useful) | icons in manifest |
apple-touch-startup-image link |
8.0 | 👍 Still the only way to define splash screens² | |
navigator.standalone flag |
2.0 | 👎 since 11.3 | display-mode media query |
² Startup images only work if the apple-mobile-web-app-capable
meta tag is present despite the presence of the manifest standalone replacement.
Manifest Incubations #
Field | Supported | Since version |
---|---|---|
display_override |
❌ | |
share_target |
❌ | |
note_taking |
❌ | |
protocol_handlers |
❌ | |
appinstalled event |
❌ | |
beforeinstallprompt event (installation prompt) |
❌ |
The list of fields comes from the latest Web Application Manifest Incubators supported in Google Chrome for Android (stable or experimental).
Other PWA-related desktop abilities #
These abilities may only be suitable for iPadOS devices.
Ability | Supported | Since version |
---|---|---|
Window Controls Overlay | ❌ | |
Tabbed Display | ❌ |
Service Workers Support #
Ability | Supported | Since version |
---|---|---|
Fetch API | ✅ | 10.1 |
Service Worker Support | ✅ | 11.3 |
Cache Storage interface | ✅ | 11.3 |
UpdateViaCache at Registration | ✅ | 15.0 |
Streams | ✅ (partial) | 11.3 |
Navigation Preload | ✅ | 15.4 |
Abilities on Top of Service Workers #
Ability | Supported | Since version |
---|---|---|
Web Push | ✅ | 16.4 only for installed PWAs |
Background Sync | ❌ | |
Periodic Background Sync | ❌ | |
Background Fetch | ❌ |
³ Web Push only works if the web app is installed in the home screen; not available in Safari or other browsers
High-level overview of Web abilities for PWAs #
Ability | Supported | Since version |
---|---|---|
Geolocation | ✅ | 2.0 |
Web Storage | ✅ | 2.0 |
IndexedDB | ✅ | 8.0 |
Web Workers | ✅ | 5.0 |
Shared Web Workers | ✅ | 5.0 to 6.1, back in 16.0 |
2D Canvas | ✅ | 2.0 |
3D Canvas: WebGL | ✅ | 8.0 |
3D Canvas: WebGL 2.0 | ✅ | 15.0 |
Web XR (VR & AR) | ❌⏳ | 17 (only for visionOS) |
Web Assembly | ✅ | 11.0 |
Clipboard | ✅ | 12.0 |
Credential Management | ✅ | 14.0 |
Payment Request | ✅ | 12.2 |
Payment Handler | ❌ | |
Motion Sensors | ✅ | 4.2 to 12.1, back in 13.0 |
Touch Events | ✅ | 2.0 |
Pointer Events | ✅ | 13.2 |
Camera and Microphone Access (getUserMedia) | ✅ | 13.0 |
Advanced Camera Controls | ❌ | |
Media Recorder | ✅ | 14.5 |
Media Session | ✅ | 15.0 |
Web Speech Synthesis | ✅ | 7.0 |
Web Speech Recognition | ✅ | 14.5 |
Web Bluetooth | ❌ | |
WebAudio | ✅ | 6.0 |
WebSerial | ❌ | |
WebNFC | ❌ | |
WebHID | ❌ | |
Battery Status | ❌ | |
Ambient Light | ❌ | |
Vibration | ❌ | |
Battery Status | ❌ | |
GamePad | ✅ | 10.3 |
Screen Wake Lock | ✅ | 16.4 |
User Activation | ✅ | 16.4 |
Device Memory | ❌ | |
Idle Detection | ❌ | |
Screen Orientation | ✅ | 16.4 (partial support) |
Presentation | ❌ | |
Pointer Lock | ❌ | |
Network Information | ❌ | |
Screen Capture | ❌ | |
Shape Detection | ❌⏳ | 17 (experimental) |
SMS OTP input attribute |
✅ | 14.0 |
SMS WebOTP API | ❌ | |
Virtual Keyboard | ❌ | |
File through input |
✅ | 6.0 |
FileSystem Access (public fs) | ❌ | |
FileSystem Access (origin private fs) | ✅ | 15.2 |
Storage Management: Persistent | ✅ | 15.2 |
Storage Management: Quota | ✅ | 17 |
Contact Picker | ⏳ | 14.5 (experimental) |
Web Sockets | ✅ | 4.2 |
WebRTC | ✅ | 11.0 |
Web Codecs | ✅ | 16.4 |
Web Notifications | ✅ | 16.4 |
Fullscreen | ✅ | 8.0 (iPad only) |
Page Visibility | ✅ | 7.0 |
Web Authentication | ✅ | 14.5 |
Web Share | ✅ | 12.1 |
Web Share 2.0 | ✅ | 15.0 |
Get Installed Related Apps | ❌ |
Safari-only abilities for PWAs #
Ability | Since version | Standard replacement? |
---|---|---|
Apple Pay JS | 10.0 | Payment Request (compatible) |
Quick Look for Augmented Reality | 12.0 | |
<model> Element for Augmented Reality |
17.0 | |
WebMetal | 12.2 (experimental) | WebGL 2.0 (compatible) |
Safari Push Notifications (mac-only) | not on iOS | Web Push (Safari 16) |
Gesture touch events | 4.0 | |
Smart App Banners | 6.0 | |
Sign In with Apple | 13.0 |
This is a quick and dirty list of abilities in the Web Platform and its compatibility in Safari and installed PWAs. Each ability has many properties or sub-abilities that may or may not be available on every browser, so check Can I Use to see how it works on iOS and iPadOS. Use always Feature Detection.
Contact me if you want to suggest a feature or report a bug in these tables.
If you liked this newsletter and the content in this website, you can support me by a PayPal donation, or buying me a coffee. Thanks!