What Is a PWA and Should You Build One Instead of a Native App?
A Progressive Web App (PWA) is a website that behaves like a native app. It installs on your home screen, works offline, sends push notifications, and loads fast. The question isn't whether PWAs are good - they are. The question is whether one is right for your use case.
What PWAs Can Do in 2026
The capabilities gap between PWA and native has closed significantly:
✅ Install to home screen (no app store required)
✅ Offline mode (via Service Workers caching)
✅ Push notifications (Chrome/Edge/Firefox/Safari 16.4+)
✅ Camera access
✅ Geolocation
✅ Background sync
✅ File system access (limited)
✅ Bluetooth (Chrome only)
✅ Payment Request API
✅ Biometric authentication (WebAuthn)
What PWAs Still Can't Do
❌ App Store / Play Store distribution - no organic store discovery
❌ Deep system integration (contacts, calendar, health data)
❌ Complex background tasks (GPS tracking in background is unreliable)
❌ Advanced Bluetooth/NFC (limited, platform-dependent)
❌ Face ID / Touch ID for payments (WebAuthn available but limited)
❌ Full iOS push notification history - Apple's PWA support is still behind Chrome
❌ In-App Purchases (App Store / Play Store monetization)
PWA Performance in 2026
Modern PWAs built with Next.js, Vite, or SvelteKit can achieve:
- LCP < 2.5s on 3G connections with proper caching
- TTI < 3.5s on mid-range Android
- App-shell architecture makes repeat visits instant
The performance argument against PWA is mostly gone if the team knows what they're doing.
When to Choose PWA
PWA wins if:
- Your main channel is organic web search (Google indexes PWAs perfectly)
- Users access your product occasionally (don't need constant background activity)
- You have one dev team that knows JavaScript/TypeScript
- Budget is limited - one codebase for web + installable app
- Your target audience is desktop + mobile (PWA scales both)
- B2B tool: enterprise users often can't install apps on work devices but can use a web app
Examples where PWA is the right call:
- News / content platform
- E-commerce store
- CRM / internal business tool
- Booking system
- Dashboard / analytics tool
When You Need a Native App
Native wins if:
- You need App Store / Play Store distribution (key for consumer apps)
- Complex background tasks: real-time GPS tracking, music playback
- Deep hardware access: AR features, advanced camera processing
- Offline-first with complex sync logic
- Gaming with high-performance graphics
- Heavy use of platform-specific APIs (HealthKit, ARKit, etc.)
- Push notifications are core to your engagement model (iOS PWA push is unreliable)
The Hybrid Answer: PWA + Capacitor or TWA
Capacitor (Ionic): Wrap your PWA in a native shell. Access native APIs, distribute via App Store. You write web code, get a real native app.
TWA (Trusted Web Activity): Wrap your PWA in an Android APK for Play Store. Your PWA literally runs in Chrome. Full PWA capabilities, Play Store distribution.
This is the best of both worlds for many projects: one web codebase, published on both stores.
Cost Comparison
| Approach | Build Cost | Reach |
|---|---|---|
| PWA only | $8,000–30,000 | Web + installable |
| Native iOS + Android | $25,000–80,000 | App stores + installable |
| PWA + Capacitor wrapper | $12,000–40,000 | Web + both stores |
| React Native / Flutter | $20,000–60,000 | Both stores |
For a startup validating an idea: PWA first. Validate that users actually want the product before investing in native.
Real-World PWA Examples
Companies running PWAs successfully at scale:
- Twitter Lite - 70% less data usage, 65% more pages/session than their native app
- Starbucks PWA - 2x daily active users after launch, 99.84% smaller than iOS app
- Pinterest - 60% increase in core engagement
- Alibaba - 76% higher conversions from PWA users
These aren't small projects. The tech is proven.
The Technical Minimum for a Quality PWA
- HTTPS - required for Service Workers
- Web App Manifest - defines name, icons, display mode, theme color
- Service Worker - handles caching and offline
- Responsive design - works on all screen sizes
- Fast load time - LCP < 2.5s
- Core Web Vitals pass - Google uses this for ranking
// manifest.json minimum
{
"name": "Your App",
"short_name": "App",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#0497d9",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
]
}