What every One native API does on iOS, Android, and web, at a glance
Every One native API is importable on all three platforms, so one component tree builds everywhere. What differs is what a call does when it runs. This page sums that up per API; each name links to its page, whose Platform differences section has the details.
catch
covers it.During server rendering there is no device or browser, so services read as unavailable there.
| API | iOS | Android | Web |
|---|---|---|---|
| Text input | SwiftUI | Material 3 | input element |
| Image | Yes | Yes | img element |
| Icons | SF Symbols | Material | Your element |
| Effects | Yes | Android 12 blur | CSS |
| Gradients | Yes | Yes | CSS strings |
| Safe area | Yes | Yes | CSS insets |
| Adaptive layout | Yes | Yes | Always regular |
| Portal | Yes | Yes | Yes |
| Pager | Yes | Yes | Scroll snap |
| Map | MapKit | Google Maps | Nothing |
| Picture in picture | Yes | Yes | Inline only |
| Camera preview | Yes | Yes | Throws |
| Gestures | Native | Native | JS fallback |
| Fonts | Yes | Yes | CSS fonts |
| API | iOS | Android | Web |
|---|---|---|---|
| SwiftUI views | Yes | Throws | Throws |
| Compose views | Throws | Yes | Throws |
| Toolbar | Yes | Nothing | Nothing |
| Zoom transitions | iOS 18 and later | Nothing | Nothing |
| Split view | iPad | One column | One column |
| iOS colors | Yes | Null | Null |
| Android colors | Null | Yes | Null |
| API | iOS | Android | Web |
|---|---|---|---|
| Device | Yes | Yes | Browser data |
| App info | Yes | Yes | Version only |
| Battery | Yes | Yes | Status API |
| Brightness | Yes | Yes | Always 1 |
| Network | Yes | Yes | Online flag |
| Motion | Yes | Yes | No magnet |
| Barometer | Yes | Yes | Never fires |
| Light sensor | Never | With a sensor | Some browsers |
| Pedometer | Yes | Live only | Never fires |
| Haptics | Yes | Yes | No effect |
| Keep awake | Yes | Yes | Wake lock |
| Screen orientation | Yes | Yes | Screen API |
| Screen capture | Yes | Yes | No effect |
| API | iOS | Android | Web |
|---|---|---|---|
| Storage | Yes | Yes | Local storage |
| Secure store | Keychain | Keystore | Rejects |
| Protected store | Yes | Android 11 and later | Rejects |
| Database | Yes | Yes | Key-value only |
| File system | Yes | Yes | Browser storage |
| Document picker | Yes | Yes | File dialog |
| Clipboard | Yes | Yes | Where allowed |
| Crypto | Yes | Yes | Yes |
| API | iOS | Android | Web |
|---|---|---|---|
| Image picker | Yes | Yes | File dialog |
| Photo library | Yes | No album edits | Empty |
| Image manipulator | Yes | Yes | Canvas |
| Audio | Yes | Yes | Audio element |
| Speech | Yes | Yes | Browser API |
| Speech synthesis | Yes | Yes | Browser API |
| Document camera | Yes | Throws | Throws |
| Data scanner | Yes | Throws | Throws |
| WebGPU | Yes | Yes | Browser |
| API | iOS | Android | Web |
|---|---|---|---|
| Location | Yes | Yes | No geocoding |
| Geofencing | Yes | While running | Empty |
| Map search | Yes | Search only | Empty |
| API | iOS | Android | Web |
|---|---|---|---|
| Contacts | Yes | Yes | Picker only |
| Contact UI | Yes | Throws | Throws |
| Calendar | Yes | Yes | Empty |
| Notifications | Yes | Yes | Rejects |
| Message UI | Yes | Throws | Throws |
| Share | Yes | Yes | Web share |
| Opening URLs | Yes | Yes | New tab |
| Browser | Yes | Yes | New tab |
| Yes | Yes | Rejects |
| API | iOS | Android | Web |
|---|---|---|---|
| Sign in with Apple | Yes | Rejects | Rejects |
| Biometrics | Yes | Yes | Rejects |
| Device attestation | Yes | Rejects | Rejects |
| App tracking | Yes | Denied | Denied |
| Purchases | Yes | Rejects | Rejects |
| Store review | Yes | Yes | No effect |
| Updates | Yes | Yes | Rejects |
| Background tasks | Yes | Yes | No effect |
| Background work | Yes | Yes | Web worker |
| App icon | Yes | Yes | No effect |
| Launch screen | Yes | Yes | No effect |
| Quick actions | Yes | Yes | Nothing |
| App intents | Yes | Nothing | Nothing |
| Widgets | Yes | Rejects | Starts reject |
Edit this page on GitHub.