A progressive web app is not a separate technology from a website — it is a regular website that meets a handful of extra requirements so the browser treats it more like an app. Add a manifest file describing its name and icons, serve it over HTTPS, and register a service worker, and a browser will offer to install it, run it in its own window without browser chrome, and keep it working when the network drops. None of this needs a rewrite. It is closer to a checklist than a platform.
What changed in 2026
- iOS has kept narrowing the install and push gap with Android, though it still lags in a few areas. Test the capability you need on the current iOS version rather than assuming parity.
- Manifest features expanded, including richer icon sets, app shortcuts, and share targets, with wider support across major browsers than a few years ago.
- Some app stores now accept PWAs directly for listing, blurring the line between a PWA and a store app, though this varies by store and is worth confirming for your target platform.
- Install prompt heuristics are more tied to engagement and performance signals, so a slow or rarely revisited site is less likely to get an automatic prompt.
The three technical requirements
Every PWA rests on the same three pieces:
{
"name": "Acme Notes",
"short_name": "Notes",
"start_url": "/",
"display": "standalone",
"theme_color": "#1c1c1e",
"icons": [
{ "src": "/icons/192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icons/512.png", "sizes": "512x512", "type": "image/png" }
]
}
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/sw.js");
}
The manifest tells the browser how to present the installed app. The service worker, once registered, is what makes offline support and background behavior possible. The service worker that powers offline support is a distinct concept from a web worker, which exists purely to run computation off the main thread, not to intercept network requests.
What a PWA can actually do
- Install to a home screen, app drawer, or desktop, and launch in its own window.
- Work offline or on a flaky connection by serving cached assets and data.
- Send push notifications, with support and behavior varying by platform.
- Queue actions for background sync when the connection returns, where supported.
PWA versus native app
| Capability |
PWA |
Native app |
| Distribution |
Directly from your website, sometimes app stores too |
App store only, typically |
| Update process |
Instant, same as deploying a website |
Store review, user must update |
| Install size |
Small, cached incrementally |
Full package download |
| Offline support |
Yes, via service worker cache |
Yes, built in |
| Deep OS or hardware integration |
Limited, improving over time |
Full |
| Push notifications |
Supported, with platform differences |
Fully supported |
| Cross-platform code |
One codebase |
Often per-platform or a separate framework |
When a PWA is the right call
A PWA earns its keep for content or tools people return to often but that do not need deep hardware access — internal dashboards, note-taking apps, e-commerce storefronts, and reference tools. It is also a strong fit when instant updates without a store review cycle matter, since deploying a PWA update is no different from deploying any other change to the website.
Common mistakes
Registering a service worker but caching nothing useful. "Offline support" that just registers an empty service worker without a caching strategy is not offline support — test it with the network disabled.
Ignoring iOS-specific quirks. Manifest handling, storage limits, and notification support differ enough between platforms that testing only one will miss real gaps.
Not planning the update flow. A cached service worker can keep serving stale assets indefinitely with no versioning or activation strategy, turning your offline feature into a bug that outlives the fix.
Treating installability as the finish line. An install prompt appearing is not the same as offline support or push notifications actually working — test each capability directly.
FAQ
Does a PWA need a native app store listing?
No. A PWA installs directly from the browser through the install prompt or "add to home screen." Some platforms also allow packaging a PWA for a store listing, but it is optional, not required.
Can a PWA access the camera, GPS, or other device hardware?
Many common APIs, including camera and geolocation, are available to web apps directly, PWA or not. Some deeper hardware and background capabilities remain native-only or inconsistent across browsers, so verify support for the specific API you need.
Why is my PWA not getting an install prompt?
Most browsers require HTTPS, a valid manifest, a registered service worker, and sometimes a minimum engagement signal before showing the prompt automatically. Check your browser devtools application panel for the specific reason it is being withheld.
Do PWAs work offline automatically?
No. Offline support has to be built deliberately by caching the right assets and data in the service worker. A PWA with no caching strategy behaves exactly like a normal website with no connection.
Where to go next