What Is a PWA? Progressive Web Apps Explained for Beginners
A progressive web app is a website that can be installed like an app, work offline and send notifications. What a PWA needs (manifest, service worker, HTTPS), what it can and can't do on iPhone and Android, and when it's a better first step than an app-store app.
You've built a web app and people keep asking, "Is there an app?" Before you dive into app stores, there's a middle ground: a progressive web app, or PWA — a website that can be installed on a phone or computer and behave much like an app.
The short version
A PWA is a normal website with a few extra pieces that let browsers:
- install it, with its own icon on the home screen or desktop,
- open it in its own window, without the browser's address bar,
- keep parts of it working offline,
- send push notifications (with permission).
It's the same code and the same URL as your website. No app store, no separate codebase.
What makes a site a PWA
1. HTTPS
PWAs only work on secure sites. (What is HTTPS?) localhost counts as secure for testing.
2. A web app manifest
A small JSON file describing your app — its name, icons and how it should open:
{
"name": "Reading List",
"short_name": "Reading",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#2563eb",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
]
}
Linked from your HTML with <link rel="manifest" href="/manifest.webmanifest">. "display": "standalone" is what makes it open without the browser chrome. (Icons: see how to add a favicon.)
3. A service worker
A piece of JavaScript that runs in the background, between your app and the network. It can cache files so the app loads instantly and works offline, and it receives push notifications. Frameworks and plugins (for Vite and Next.js, for example) can generate one for you.
What PWAs are good at
- One codebase for web, Android, iPhone and desktop.
- Instant updates — deploy, and everyone has the new version. No app review.
- No app-store fees or approval process.
- Easy to try — people can use it in the browser first and install later.
- Small compared with native apps.
The limits
- iPhone support is more limited. On iOS, people install a PWA from Safari's Share → Add to Home Screen — there's no automatic install prompt like on Android. Push notifications work on iOS (since iOS 16.4) only for PWAs added to the home screen.
- Less access to the device. Bluetooth, background location, deep system integrations, and some sensors are limited or unavailable, especially on iOS.
- Discoverability. People search app stores for apps; a PWA isn't there by default.
- Offline takes work. Caching your pages is easy; making real features work offline (saving data and syncing later) is a real engineering project.
PWA vs native app vs wrapped web app
| PWA | Native app | Wrapped web app | |
|---|---|---|---|
| Codebase | Your website | Separate (Swift, Kotlin…) | Your website inside a native shell |
| In app stores | No (by default) | Yes | Yes |
| Device features | Limited | Full | Most, via plugins |
| Updates | Instant | Store review | Mostly instant |
| Effort | Low | High | Medium |
If you need app-store presence, a "wrapper" like Capacitor turns your web app into store-ready apps. See how to turn your web app into a mobile app.
Should you make your app a PWA?
Yes, if:
- people use your app repeatedly on their phones,
- you want a home-screen icon and full-screen feel without an app store,
- you're early and want to test whether a mobile app is worth building at all.
It's a small amount of work — a manifest, icons and a basic service worker — and nothing is lost if you build native apps later. (Web app vs mobile app helps with the bigger decision.)
The summary
- A PWA is a website that can be installed, open in its own window, work offline and send notifications.
- It needs HTTPS, a manifest and a service worker.
- Great for one codebase and instant updates; limited on iOS and for deep device features.
- A cheap first step before native or wrapped apps.
EasySpawn serves every app over HTTPS on your own domain from the start — the first requirement for a PWA — and Claude Code can add the manifest and service worker and test them on the live site. See how it works or join the waitlist.
Related: Web App vs Mobile App · Responsive Design Basics · What Is Caching? · Core Web Vitals Explained
Keep reading
What Is a Headless CMS? And Does Your App Need One?
A headless CMS is a content editor with no website attached — it stores your content and hands it to your app through an API. How it differs from WordPress, the popular options, when it beats Markdown files or your own database, and when it's overkill.
What Is TypeScript? JavaScript With Labels, Explained for Beginners
TypeScript is JavaScript plus types: labels that say what kind of value each thing holds, checked before your code runs. What it looks like, why AI tools default to it, what .ts and .tsx files are, and how to read the red squiggles.