Key Takeaways
- PWAs are web apps that feel like apps: A PWA is a website that uses modern browser APIs to provide app-like experiences: installability, offline support, push notifications, and full-screen mode. No App Store required.
- Service workers are the key technology: A service worker is a JavaScript file that runs in the background, separate from the main browser thread. It intercepts network requests, serves cached content, and enables offline functionality.
- The business case for PWAs: PWAs eliminate the App Store 15-30% tax, reduce installation friction (no download required), and enable a single codebase for web and installed app experiences. Twitter Lite, Pinterest, and Starbucks all saw significant engagement increases after launching PWAs.
- Workbox simplifies service worker development: Google's Workbox library provides high-level strategies for service worker caching without writing low-level service worker code manually. It is the standard starting point for PWA caching implementations.
Progressive Web Apps occupy a compelling position in 2026: they give web applications access to device capabilities that were previously exclusive to native apps, without requiring users to go through the App Store or Play Store.
This is increasingly important as App Store fees (15-30% of revenue) and approval delays frustrate developers, and as browsers have expanded the APIs available to web apps. In 2026, PWAs can access camera, microphone, location, Bluetooth, push notifications, background sync, and file system access — a capability set that was exclusive to native apps as recently as 2020.
What Is a PWA in 2026?
A Progressive Web App (PWA) is a web application that uses a set of modern browser APIs to deliver app-like experiences: it can be installed to the home screen, works offline, receives push notifications, and runs in full-screen mode without browser UI — while remaining a standard website accessible through a URL.
The three technical components that define a PWA:
- Web App Manifest: A JSON file that tells the browser how to display the app when installed — name, icon, theme color, start URL, and display mode (standalone removes browser UI).
- Service Worker: A JavaScript worker that runs in the background, intercepts network requests, and serves cached responses for offline support.
- HTTPS: PWAs require a secure origin. Service workers do not register on HTTP pages.
Browser support for PWA installation: Chrome (desktop and Android), Edge, Samsung Internet, and Safari (iOS 16.4+, desktop macOS) all support PWA installation. Firefox does not currently support the install prompt. The iOS PWA experience is more limited than Android — no push notifications in Safari until iOS 16.4, and some storage quotas are lower.
Web App Manifest: Make It Installable
Learn the Core Concepts
Start with the fundamentals before touching tools. Understanding why something was built the way it was makes every tool decision faster and more defensible.
Build Something Real
The fastest way to learn is to build a project that produces a real output — something you can show, share, or deploy. Toy examples teach you the happy path; real projects teach you everything else.
Know the Trade-offs
Every technology choice is a trade-off. The engineers who advance fastest are the ones who can articulate clearly why they chose one approach over another — not just "I used it before."
Go to Production
Development is the easy part. The real learning happens when you deploy, monitor, debug, and scale. Plan for production from day one.
The web app manifest is a JSON file that describes how your app should appear and behave when installed. Link it from your HTML with <link rel="manifest" href="/manifest.json">.
{
"name": "My App",
"short_name": "MyApp",
"description": "A short description of what it does",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#0070f3",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
]
}The display: standalone setting removes the browser address bar and navigation buttons, making the installed app look like a native application. Generate icons in all required sizes using tools like RealFaviconGenerator or the PWA Asset Generator.
Chrome shows an install prompt when a site meets the PWA installability criteria: HTTPS, valid manifest with required fields, and a registered service worker. The beforeinstallprompt event lets you intercept and customize the install prompt timing.
Service Workers: The Core of PWA
A service worker is a JavaScript script that runs in the browser background, separate from the web page. It can intercept all network requests from your app, serve cached responses, and receive push notifications — even when no browser tab is open.
Service worker registration:
// In your main app code if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js') .then(reg => console.log('SW registered', reg)) .catch(err => console.error('SW error', err)) }
Service worker lifecycle: Install (triggered when the browser installs a new version of the SW — good time to pre-cache critical resources), Activate (cleanup old caches), Fetch (intercept network requests and return cached or network responses).
Use Workbox from Google to handle service worker caching without writing low-level service worker code:
// sw.js with Workbox import { registerRoute } from 'workbox-routing' import { CacheFirst, NetworkFirst } from 'workbox-strategies' // Cache images with Cache First strategy registerRoute( ({ request }) => request.destination === 'image', new CacheFirst({ cacheName: 'images' }) ) // Cache API responses with Network First registerRoute( ({ url }) => url.pathname.startsWith('/api/'), new NetworkFirst({ cacheName: 'api-cache' }) )
PWA vs Native App: When to Choose Each
The choice between PWA and native app (React Native, Flutter, Swift/Kotlin) depends on your feature requirements, distribution strategy, and team expertise.
| Factor | PWA | Native App |
|---|---|---|
| Distribution | URL-based, no App Store | App Store / Play Store |
| Installation friction | Low (add to home screen prompt) | High (App Store download) |
| App Store revenue share | 0% | 15-30% |
| Device API access | Camera, GPS, Bluetooth, NFC (modern browsers) | Full native API access |
| Performance | Near-native for most apps | Best for graphics-intensive or hardware-dependent apps |
| Push notifications | Supported (Chrome/Android fully; Safari iOS 16.4+) | Fully supported |
| Discoverability | Google search | App Store search |
Choose PWA if: Your app is content-focused, does not require advanced hardware APIs (AR, complex Bluetooth), you want to avoid App Store fees, or you need one codebase for web + installed app.
Choose native if: You need the best possible performance for graphics or games, require full hardware API access, or your target audience expects an App Store-distributed app.
Frequently Asked Questions
Can a PWA replace a native app?
For most business applications — productivity tools, content apps, e-commerce, SaaS products — a well-built PWA can replace a native app and often provides a better user experience due to lower installation friction. For games, apps that require advanced AR/VR capabilities, or apps that need deep OS integration (background processing, specialized hardware), native apps still have significant advantages.
Do PWAs work on iOS?
Yes, with limitations. Safari on iOS 16.4+ supports push notifications and improved PWA capabilities. Earlier iOS versions have more restricted PWA support — no push notifications, stricter storage quotas, and limited background processing. The iOS PWA gap with Android has narrowed significantly since iOS 16.4 but has not fully closed. Test your PWA thoroughly on actual iOS devices.
What is a service worker and do I need one?
A service worker is a JavaScript file that runs in the background and intercepts network requests from your web app. You need one to: make your app work offline, implement background sync, or receive push notifications. You do not need one for a basic installable PWA — the manifest and HTTPS are sufficient for the install prompt. But offline support requires a service worker.
What cache strategy should I use for my service worker?
Common Workbox strategies: Cache First (serve from cache, update in background) for static assets that rarely change. Network First (try network, fall back to cache) for API responses where freshness matters. Stale While Revalidate (serve cached immediately, update cache in background) for non-critical assets where slightly stale data is acceptable. Most apps use a mix of strategies depending on the resource type.
PWAs are the future of web app distribution. Get the skills.
Join professionals from Denver, NYC, Dallas, LA, and Chicago for two days of hands-on AI and tech training. $1,490. June–October 2026 (Thu–Fri). Seats are limited.
Reserve Your SeatNote: Information in this article reflects the state of the field as of early 2026.
PWAs won on Android and lost on iOS, and the gap still matters.
Progressive Web Apps have been "almost there" on iOS for years, and while Safari's PWA support has improved meaningfully — push notifications landed in Safari 16.4, install prompts in Safari 17 — there's still a functional gap versus Chrome on Android. Background sync, Bluetooth access, persistent storage beyond 50MB, and several payment APIs are either absent or degraded on iOS PWA. For a B2C app where the majority of users are on iPhones, a PWA is still a second-class experience in ways that matter. For B2B internal tools and applications where Android dominates or device type is controlled, PWAs are a legitimately excellent choice.
The business case for PWAs in 2026 has actually strengthened in one specific context: the 30% App Store and Google Play commission is now a live political and legal issue in multiple jurisdictions. Epic vs. Apple set a precedent; the EU's Digital Markets Act requires Apple to allow alternative browser engines and app distribution. A PWA that bypasses the App Store sidesteps the commission entirely for web-based payments — which is the reason Spotify, Netflix, and several large publishers pushed hard for PWA capabilities in Safari. This is a real financial incentive, not just a technical preference.
For developers: if your app is fundamentally a web app with native-like UX requirements, invest in a well-built PWA before committing to React Native or Flutter. The maintenance cost of a single codebase that runs everywhere is genuinely lower, and the capability gap for most consumer apps is smaller than it was two years ago.