The question “should we build a native app or a PWA?” comes up in almost every mobile product conversation. The answer depends on specifics — and the specifics have shifted significantly as browsers have expanded their capabilities.
Here’s a clear framework for making this decision.
What PWAs Can Do Now
Progressive Web Apps have gained capabilities that used to require native development:
- Push notifications — supported on Android (Chrome) and iOS (Safari 16.4+, March 2023)
- Offline functionality — via Service Workers, PWAs can cache content and function without network
- Camera and microphone access — via browser APIs
- Geolocation — standard web API
- Bluetooth and NFC — Web Bluetooth and Web NFC (Chrome only, limited OS support)
- File system access — File System Access API (limited, security-scoped)
- Background sync — deferred operations when connectivity is restored
- Installable — users can add PWAs to their home screen; installed PWAs run in their own window
The gap between PWAs and native apps has narrowed substantially. For most content and productivity applications, a PWA is now a credible choice.
What Native Apps Still Do Better
Despite the progress, native apps maintain advantages in:
Performance for complex UI. Native rendering is still faster than browser rendering for complex animations, large lists, and real-time graphics. The difference matters for games, video editing, and high-frequency data dashboards.
Device integration depth. Native apps have deeper access to device APIs — particularly on iOS, where Apple restricts web API access more aggressively than Chrome on Android. Continuous background location, NFC payments, ARKit/ARCore, Face ID/fingerprint payments, and advanced camera controls all work more reliably (or exclusively) in native.
App Store distribution. App stores provide discoverability, one-tap installation, and a trusted distribution channel. PWA installation requires users to navigate browser menus — a significantly higher friction path for consumer apps where discoverability matters.
iOS performance and API access. Apple’s WebKit engine (which all iOS browsers must use) implements fewer web APIs and with more restrictions than Chrome. If your primary audience is iOS users, native iOS often delivers better experience.
The Decision Framework
Work through these questions:
1. Does the app need to be findable in app stores? If discoverability through App Store/Play Store search matters for your growth strategy, native or React Native. PWAs are not distributed through app stores (with minor exceptions for PWAs wrapped in Bubblewrap for Play Store).
2. What device features does the app need? List every hardware/OS capability you need: camera, NFC, Bluetooth, biometric auth, background processes. Check whether each is available in PWA via web APIs. If your list includes features that require native APIs, native.
3. What’s the primary OS? Android users get a better PWA experience than iOS users due to Chrome’s API surface. If your audience is primarily iOS, the PWA capability restrictions push toward native.
4. What’s the required performance profile? Games, real-time data, complex animations: native. Content, productivity, forms, CRUD: PWA is competitive.
5. What’s the development budget? PWA is one codebase that runs everywhere. Native means separate iOS (Swift/Swift UI) and Android (Kotlin/Compose) codebases — or React Native/Flutter as a cross-platform middle ground. For similar functionality, PWA development costs are significantly lower.
The Middle Ground: React Native and Flutter
When native performance and API access matter but a single codebase is desirable, React Native and Flutter are the options:
React Native — JavaScript/TypeScript codebase that renders native UI components. Large ecosystem, familiar for web developers. Meta and Microsoft use it at scale. Performance has improved significantly with the new architecture (Fabric renderer).
Flutter — Dart codebase with its own rendering engine (Skia/Impeller). Consistent cross-platform appearance. Strong performance. Google maintains it. Growing ecosystem but smaller than React Native’s.
Both options deliver near-native performance with one codebase, at the cost of JavaScript/Dart expertise rather than native iOS/Android expertise.
A Practical Guide by App Category
| App Type | Recommended Approach | Reason |
|---|---|---|
| Marketing site / brochure | PWA | No native APIs needed |
| Internal business tool | PWA | Controlled distribution, no app store needed |
| B2B SaaS dashboard | PWA or React Native | Depends on mobile requirements |
| Consumer social app | React Native | App store discovery, notifications |
| E-commerce | PWA or React Native | PWA if iOS restrictions are acceptable |
| Real-time game | Native | Performance requirements |
| IoT control app | Native | Bluetooth/device integration |
| Health and fitness | React Native or Native | Background location, HealthKit integration |
| Media player | React Native | Balance of performance and cost |
Cost Comparison
For equivalent functionality:
| Platform | Relative Cost | Notes |
|---|---|---|
| PWA | 1x | Single codebase, web technologies |
| React Native | 1.5–2x | Cross-platform, some platform-specific work |
| Flutter | 1.5–2x | Similar to React Native |
| Native iOS + Android | 2.5–3x | Separate codebases |
The best choice depends on your specific requirements. If you’re not sure which direction is right for your project, talk to us — we’ll work through the requirements with you and give you a direct recommendation.