What is a Progressive Web App?
A Progressive Web App (PWA) is a website that uses modern web APIs to deliver an app-like experience. It can be installed on your device, work offline, send push notifications, and access hardware such as the camera, Bluetooth, and file system, all from the browser.
How is a PWA different from a regular website?
A regular website runs in a browser tab. A PWA can do everything a website can do, plus:
- Installable: add it to your home screen or desktop, no app store needed
- Offline-capable: works without an internet connection using cached content
- Push notifications: send notifications even when the app isn't open
- Hardware access: camera, microphone, Bluetooth, NFC, fingerprint sensor
- Background sync: sync data in the background, even after the user leaves
- Automatic updates: users always get the latest version, no manual updates
Why build a PWA instead of a native app?
- One codebase: build once, run on iOS, Android, and desktop
- No app store required: distribute directly via a URL, no review process
- Smaller download: PWAs are measured in kilobytes, not hundreds of megabytes
- Always up to date: deploy changes and every user gets them instantly
- Secure by default: served over HTTPS with the same security model as the web
- Lower cost: one web developer can build and maintain a PWA
What can a PWA actually do?
Modern PWAs can access nearly every hardware and platform capability that native apps can. See all 40+ live demos on the homepage, each one runs on your device so you can see exactly what's supported.
Which platforms support PWAs?
- Android: full support, installable from Chrome and other browsers
- iOS / iPadOS: installable via all browsers, no support for native installation dialog
- Windows: installable via Chrome and Edge
- macOS: installable via Chrome and Edge
- Linux: installable via Chrome and Chromium-based browsers
See detailed installation instructions for every platform
How do I get started building a PWA?
- Your website already needs to be served over HTTPS
- Add a Web App Manifest, a JSON file that tells the browser your app's name, icons, and behavior
- Add a Service Worker, a script that enables offline support, caching, and push notifications
- Test with pwa-check, a free tool that audits your PWA
- Deploy and share your URL, users can install it directly
Does a PWA have to be installed?
No. A PWA is still a website and can be used directly in your browser. "Installation" just means the web app is added to your home screen or desktop and this can unlock additional platform features, such as push notifications on iPhone and iPad.
There are no extra files installed like with a native app. Everything it needs to function like an app is stored in the browser's sandbox environment on the user's device which can only be accessed by the app itself. The app cannot access any other files or data on the user's device without explicit permission. → Try the Installation demo
Does a PWA require a service worker?
Not necessarily, but a service worker lets an app work offline and handles features like push notifications and background sync. You can build a PWA without a service worker, but it will then miss these features. → Try the Offline support demo
Why don't I see an install button?
Currently, only Chromium-based browsers like Chrome, Edge and Opera support the native installation dialog. This
dialog is shown when the beforeinstallprompt event is fired in the browser, but many PWAs suppress
displaying the dialog and offer a button to display it later, so users are not bothered with it immediately and
can then decide later whether or not they want to install the PWA.
Some browsers only offer installation through their menu, and in-app browsers may not offer it at all.
→ Try the installation demo
How do I install a PWA on iPhone or iPad?
Open the website in Safari, open the Share menu, choose "Add to Home Screen", and tap "Add".
If an "Open as Web App" option is shown, leave it enabled. Safari does not support the
beforeinstallprompt event, so a website cannot use it to open a native installation dialog.
→ Try the installation demo
Can a PWA receive notifications when it isn't running?
Yes, when explicit permission has been granted, the PWA doesn't have to be running to receive notifications. Displaying of notifications depends on browser support, network availability, and operating system settings. → Try the Notifications demo
Do push notifications work on iOS and iPadOS?
Yes, push notifications work on iOS and iPadOS since version 16.4 when the PWA is added to the Home Screen. Since version 18.4, iOS and iPadOS also support Declarative Web Push which enables PWAs to receive and display push notifications without a service worker, even when the app is not running. → Try the Declarative Web Push demo
Do PWAs update automatically?
Yes, whenever a new version of the PWA is deployed to the web server it's hosted on, users will automatically get the new version when they open the app. An already open app may need to reload or close before a new version takes over. → Try the Offline support demo
Do all PWA features work in every browser?
No. Support varies by browser, operating system, and device. The Capabilities demo shows you directly what is supported on your device. → Try the capabilities demo
Can a PWA access Bluetooth, NFC, files, camera and microphone?
Yes, where the relevant APIs are supported and the user grants the required access. Camera and microphone access are widely available, while Bluetooth, NFC, and direct file system access have more limited support. Access is restricted to the devices, files, or capabilities the browser allows the user to share. → Try the Bluetooth demo → Try the NFC demo → Try the File system demo → Try the Camera and microphone demo
Can PWAs be published in app stores?
Yes. A PWA can be packaged for store distribution, subject to each store's requirements and review process. On Android, a Trusted Web Activity is one way to distribute a web app through Google Play. Other stores require their own packaging approaches. Store distribution is optional, and a browser-generated WebAPK is not the same as a store submission. → Try the installation demo
What is the difference between a PWA, WebAPK and Trusted Web Activity?
A PWA is the web app itself. A WebAPK is an Android package generated during installation by a supporting browser to integrate that web app with the operating system. A Trusted Web Activity lets an Android app display web content through a supporting browser without its usual toolbar, after verifying the relationship between the Android app and website using Digital Asset Links. → Try the installation demo
Are PWAs secure?
Yes, PWAs run inside a browser environment which uses the web's security model: HTTPS encrypts data, browser isolation restricts access between websites, and sensitive capabilities such as the camera require explicit permission. Adding a PWA to your Home Screen or desktop does not give it unrestricted access to your device. These protections do not guarantee that a site's content or code is trustworthy, so only grant permissions to sites you trust.
Do PWAs work inside Instagram, Facebook and other in-app browsers?
The website may work, but an in-app browser can have different support for installation, sign-in, storage, and device APIs than your regular browser. If a feature is unavailable, open the same URL in your regular browser and try again. Test the browsers your audience uses rather than assuming identical behavior.
Does Safari delete my PWA data after 7 days?
No, not when the PWA is added to the Home Screen or desktop. Safari may delete a website's data if it hasn't been used in the last 7 days but web apps added to the Home Screen or desktop are excluded from this. A PWA added to the Home Screen or desktop can also request persistent storage, so the data can only be deleted manually by the user. → Try the storage demo
Does a PWA need to be installed to work offline?
No, if the service worker caches all the needed files and pages to work offline, a PWA can function without being installed. However, if the service worker is not properly configured, the PWA may not work offline.
Why won’t my installed PWA open / launch offline?
This usually means your service worker is not properly configured and doesn't cache all routes. Specifically, it probably doesn't cache your PWA's entry point, which is usually /index.html. If any route is not cached, the PWA will show the standard offline page of the browser when you try to access it.
Inventory all URLs (routes) your PWA uses and make sure they are all cached by your service worker or that they fall back to an offline page for example. → Try the Offline support demo
Why do users still see the old version after I deploy?
First of all, there needs to be a change in the service worker script for the browser to recognize it as a new version. This may be any change and a best practice is to increment the service worker version number, which can be just a variable in the service worker script holding a number or string.
If the service worker is changed but the new version of the app is not yet visible, this means the new service worker has not yet been activated. It may have been installed, but it won't be activated until every tab using the old one is closed. If the user closes and restarts the app, the new version will be activated.
I created a basic service worker that you can download on GitHub that updates as soon as the user navigates to another page or reloads a page in the PWA.
How do I detect if a PWA is added to the Home Screen or desktop?
You can use the media query matchMedia('(display-mode: standalone)').matches to detect this. If it
returns true, the PWA is added to the Home Screen or desktop. This works in all browsers on all
platforms.
Can I use TouchID and FaceID with a PWA?
Yes, you can use TouchID and FaceID with a PWA. These features are available on all platforms and devices. You can also use an external USB security key. → Try the authentication demo
Can I use a PWA to open files and links?
Yes, you can use a PWA to open files and links. You can even register your PWA as the default application to open specific file types, for example images. This works on desktop for PWAs added to the desktop with Chromium-based browsers. PWAs can open links within their scope on Android when added to the Home Screen through Chrome and PWAs added to the Dock through Safari on macOS. → Try the file handling demo → Try the link handling demo
Need your PWA audited?
Use the free pwa-check CLI tool to test your PWA, or run a PWA Runtime Audit to catch real-world failures across install, offline, and update flows.