A Progressive Web App (PWA) is a website that behaves like a mobile or desktop app: you open it in a browser, but you can also "install" it on your device, use it offline, and get a fast, app-like experience[1]. This guide walks you through converting your existing website into a PWA and then packaging it for distribution on Google Play and iOS App Store.
By following this guide, you will:
Convert your website into an installable PWA with offline support
Package and publish your PWA to Google Play Store (Android)
Understand the iOS App Store publishing pathway
Create a single codebase that runs on web, mobile, and desktop
Core Concept
PWAs try to give you the best parts of both worlds: the reach of a website plus the feel of a native app[1][2].
Key Features
Installable: Users can tap "Add to Home Screen" or similar and open it like a regular app without going through an app store[2][3].
Offline & Low-Network Support: Service workers (background scripts) cache pages and data so basic features work even without internet[2][3].
Fast & Responsive: Designed to load quickly and adapt to any screen size (mobile, tablet, desktop) using responsive design and aggressive caching[1][3].
Main Building Blocks
Service Worker: A background JavaScript file that intercepts network requests, caches assets, enables offline mode, and can handle push notifications[2][3].
Web App Manifest: A small JSON file with the app's name, icons, theme colors, and how it should open (standalone, full-screen, etc.), which enables installation[2][1].
HTTPS: PWAs must be served over HTTPS to ensure secure communication and to allow use of powerful browser features like service workers[1][3].
Why Developers Use PWAs
One codebase for web + "app-like" experience, reducing cost compared to separate Android/iOS native apps[3][4].
Better discoverability than native apps because PWAs can appear in normal search results and open in a browser link, but still re-engage users via install and push notifications[2][4].
Simple Mental Model
Think of a PWA as: "A website plus a tiny offline-and-install engine (service worker + manifest) that upgrades it into an app-like experience on any modern device."[1][2]
Prerequisites
Before you start:
Your site must be served over HTTPS (not plain http) for PWAs to work[1][3].
You should be able to edit and upload files to your hosting (HTML, JS, images, etc.).
Step 1: Run Your Site Through PWABuilder
Go to PWABuilder in your browser[5].
Paste your website URL (for example Example Domain ) into the input and click Start[5].
PWABuilder shows a PWA Report Card with scores for:
Manifest
Service worker
Other capabilities (like installability, offline, store packaging)[5][6]
This report tells you what is missing to become a proper PWA (usually: no manifest and no service worker yet)[5][6].
Step 2: Generate and Edit the Web Manifest
In the report page, click on the Manifest bar/section[5].
PWABuilder will usually say your manifest score is 0 and offer to generate a basic manifest for you[5].
Click the button that opens Manifest Options and fill key fields:
Table 1: Manifest Configuration Fields
4. Click Done (or similar) to let PWABuilder generate the manifest.json file[5].
PWABuilder will now add manifest.json to the package it will give you[5].
Step 3: Choose and Generate a Service Worker
Back on the report card, click the Service Worker bar/section[5].
PWABuilder shows a list of pre-built service workers for common scenarios (basic offline, offline with caching strategy, etc.)[5][7].
Pick one that matches your need; as a beginner, choose a basic offline caching template[5][3].
Click Add to Base Package then Done[5].
PWABuilder will now include a service worker file (for example pwabuilder-sw.js) in your download package[5][7].
Step 4: Download Your PWA Package
After configuring Manifest and Service Worker, PWABuilder lets you download a zip containing:
manifest.json
pwabuilder-sw.js (or similar name)
An images or icons folder with the icons you configured[5][7]
Save and unzip this package on your computer so you can upload the files to your server[5].
Step 5: Upload Files to Your Server
Place the files where your main website files live (often the web root):
Upload manifest.json to the root (eg https://example.com/manifest.json).
Upload pwabuilder-sw.js (or whatever name PWABuilder used) to the root as well (important for the scope to cover your whole site).
Upload the images / icons folder PWABuilder gave you.
Your directory might look like:
/index.html
/manifest.json
/pwabuilder-sw.js
/images/icons/...
Step 6: Link the Manifest in Your HTML
In your main HTML file (usually index.html), inside <head>...</head>, add:
This tells the browser where your PWA's manifest lives so it can install the app and show the right name/icon/colors.
Step 7: Register the Service Worker
In a main JavaScript file or a small inline script (often near the bottom of index.html), add:
navigator.serviceWorker.register('/pwabuilder-sw.js') tells the browser to load and run your generated service worker[4].
Once this succeeds, the service worker can cache files and support offline mode according to the template PWABuilder created[5][3].
Step 8: Test Your PWA
Open your site in Chrome or Edge using Your-Site.Com Website Hosting .
Open DevTools → Application tab → check Manifest and Service Workers sections; they should show your manifest details and an active service worker[6][8].
Try:
Reloading; pages should load faster due to caching.
Going offline in DevTools (toggle "Offline") and reloading; basic content should still show (depending on your chosen template)[3][9].
If all is good, the browser should eventually show an Install or Add to Home Screen prompt when conditions are met[2][10].
Critical Requirement: PWA Quality First
Yes, convert your website to a full PWA first before packaging for mobile app stores – it is not optional if you want high approval rates, good user experience, and to avoid rejection[1][3][11].
Why PWA Conversion is Required
Store Validation: Google Play (TWA) and Microsoft Store scan your URL for a valid manifest, active service worker, and installability before approving the package[1][11].
User Expectations: Packaged apps without offline support, fast loading, or install prompts feel broken – users uninstall quickly, hurting ratings[1][11].
Technical Requirement: Trusted Web Activity (Android) and Windows PWA wrappers only work properly if your site already supports service workers and HTTPS[11][3].
Quick Validation Test
Before packaging, open your site in Chrome Android → DevTools (or Lighthouse) → PWA audit. You need:
Manifest valid ✓
Service worker registered & active ✓
Install prompt appears ✓
Fast Reliable score 90+ ✓
If any item fails, fix those first. PWABuilder's report card matches exactly what stores check[5][1][8].
Step 9A: Google Play Store (Android via Trusted Web Activity)
Why PWABuilder Supports Android
Android does not accept a raw URL as an app; it wants an APK/AAB, so PWABuilder creates a small Android project that uses Trusted Web Activity to show your PWA in full-screen Chrome[11][3]. Users see a native Android app, but it loads your live PWA URL inside Chrome[11][3].
Generate TWA Package in PWABuilder
Go to PWABuilder → Enter your HTTPS PWA URL → Start[5][7].
Confirm PWA Report Card shows green (manifest ✓, service worker ✓, installable ✓)[5].
Scroll to Store Packages → Click Google Play or Android[1][7].
Fill TWA form:
Table 2: TWA Package Configuration
Click Generate → Download Android Studio project ZIP[11][7].
Build APK/AAB for Google Play
Install Android Studio (free)[11].
Open downloaded project → Build → Generate Signed Bundle/APK[11].
Use PWABuilder signing key → Choose Release AAB (preferred for Play Store)[11].
Get app-release.aab file (10-20MB)[11].
Upload to Google Play Console
Create Google Play Console account ($25 one-time fee)[11].
Create app → Upload AAB → Fill:
Store listing (title, description, screenshots, icons 512x512)[11]
Content rating questionnaire
Pricing (free/paid)
Target countries
Submit for review (1-7 days approval)[11].
Result: Android users get your PWA as a "native" app from Play Store[11][3].
Step 9B: iOS App Store (Native App Required – No PWABuilder)
Why PWABuilder Cannot Help iOS
Apple policy: "Apps that are simply web sites bundled in a native shell will be rejected" (App Review Guidelines 4.2)[11][3].
PWAs work great in Safari (installable via "Add to Home Screen"), but App Store requires 100% native code[11][3].
iOS Publishing Options
Table 3: iOS Publishing Options
Recommended: Capacitor (PWABuilder → Capacitor → App Store)
After PWABuilder PWA works: Install Capacitor CLI → npx cap init[3].
Add iOS platform: npx cap add ios → npx cap sync[3].
Open Xcode: npx cap open ios → Customize AppDelegate.swift if needed[3].
Build & Archive in Xcode → Upload via App Store Connect[3].
Fill App Store listing → Submit (1-2 weeks review)[3].
Capacitor result: Same PWA codebase publishes to both stores with minimal native code[3].
Recommended Priority
Website → HTTPS + PWA (Steps 1-8)
Test: Chrome/Android installs to home screen
Google Play: PWABuilder TWA → Android Studio → Play Console (3-5 days total)
iOS: Capacitor → Xcode → App Store Connect (1-3 weeks total, or skip initially)
Priority Recommendation
Do Google Play first (PWABuilder handles 95% automatically, $25 fee, 80% mobile users are Android)[11].
Skip iOS App Store initially – promote Safari "Add to Home Screen" instead (works great, no approval needed)[3].
Add iOS later with Capacitor when revenue justifies Xcode learning curve.
PWA conversion is mandatory before packaging for app stores – stores validate PWA quality automatically[1][11].
Google Play is easier – PWABuilder does most work automatically (3-5 days)[11].
iOS requires native code – Use Capacitor (2-5 days) or hire an iOS developer; PWABuilder cannot help[3][11].
One codebase, multiple platforms – Same PWA runs as website, Android app, and iOS app (with Capacitor)[3][11].
Start with web + Android – iOS can be added later when business justifies the extra effort[11][3].
[1] Mozilla Developer Network. (2025). Progressive web apps. Progressive web apps | MDN
[2] Wikipedia. (2016). Progressive web app. Progressive web app
[3] Microsoft Learn. (2025). Turn your website into a high quality PWA. Turn your website into a high quality PWA - Windows apps
[4] PWABuilder Blog. (2021). Converting your web app to a Progressive Web App with PWABuilder. Converting your web app to a Progressive Web App with PWABuilder | PWA Builder Blog
[5] PWABuilder. Home page. PWABuilder
[6] Microsoft Learn. (2025). Get started developing a PWA. Get started developing a PWA - Microsoft Edge Developer documentation
[7] PWABuilder Suite Documentation. (2025). PWABuilder Suite Documentation - test
[8] Microsoft Learn. (2025). Debug a Progressive Web App (PWA). Debug a Progressive Web App (PWA) - Microsoft Edge Developer documentation
[9] Heroku Blog. (2025). PWA Tutorial: Turn Your Website Into a Progressive Web App. PWA Tutorial: Turn Your Website Into a Progressive Web App
[10] Google. Explore progressive web apps. Progressive Web Apps | web.dev
[11] Simplilearn. (2025). Top 5 Open Source Tools to Create a Progressive Web App. Top 5 Open Source Tools to Create a Progressive Web App (PWA)
[12] DEV Community . (2025). Manifest and Service Workers in PWAs. Manifest and Service Workers in PWAs