You can turn a web app into a mobile app in three ways: make it an installable Progressive Web App (PWA), wrap it in a thin native shell and publish it to the app stores, or rebuild it natively. For most small apps the right order is the first, then the second only if you need store presence or device features the web cannot reach. A PWA costs nothing extra to distribute, while the app stores charge fees, run reviews and, on Apple's side, reject apps that are only a repackaged website.
This guide walks through each route, what it costs as of October 2026, and the rules that decide whether a wrapped web app gets accepted. Prices and rules come from Apple, Google and the web platform documentation linked in the Sources at the end.
The three routes at a glance
| Route | What you ship | Store listing | Cost to publish | Main limitation |
|---|---|---|---|---|
| PWA | Your web app plus a manifest | No (installed from the browser) | None beyond hosting | Some device features and background work are limited, especially on iOS |
| Wrapped web app | Your web app inside a native container (Trusted Web Activity on Android, a runtime such as Capacitor) | Yes | Google Play: US$25 once. Apple: US$99 per year | Apple requires more than a repackaged website |
| Native rebuild | A separate iOS and/or Android codebase | Yes | Same store fees | You maintain two or three apps |
If your app is a form, a dashboard, a booking flow or a content site, start with a PWA. Move to a wrapper when you have a concrete reason, such as customers who expect to find you in a store.
Route 1: make it an installable PWA
A PWA is your existing web app with two additions: a web app manifest (a small JSON file describing the app's name, icons and how it should open) and, typically, a service worker for offline behaviour. Browsers then offer to install it, and it opens in its own window with an icon on the home screen.
What Chrome needs before it offers to install
The web.dev installability criteria list what Chrome checks before showing its install prompt. The app must:
- Be served over HTTPS.
- Include a manifest with short_name or name, icons including a 192px and a 512px icon, a start_url, and a display value of fullscreen, standalone, minimal-ui or window-controls-overlay.
- Not set prefer_related_applications to true.
- Not already be installed.
Chrome also waits for some engagement: the user must have clicked or tapped on the page at least once and spent at least 30 seconds viewing it, at any time.
The web.dev manifest guide adds practical advice: if you can only make one icon, make it 512 by 512 pixels, and keep short_name under 12 characters so it fits under the icon. It notes that most apps use the standalone display mode, which hides the browser interface.
What iOS supports
Apple's WebKit team announced in iOS and iPadOS 16.4 that web apps added to the Home Screen can receive push notifications. The conditions matter:
- The site must be added to the Home Screen from Safari's Share menu.
- Its manifest must set display to standalone or fullscreen.
- Permission can only be requested "in response to direct user interaction," such as tapping a subscribe button.
Home Screen web apps can also set a badge count on their icon, and their notifications respect Focus settings. In other words, on iPhone a PWA can do push, but only once the user has installed it, so your onboarding should explain how to add it to the Home Screen.
When a PWA is enough
A PWA covers most of what a small web app needs on a phone: an icon, a full-screen window, offline pages, and push notifications on Android and installed iOS web apps. It does not give you a listing in the App Store or Google Play, which is the main reason people move on to a wrapper.
Before you install-enable anything, make sure the basics are right, because an installed app that loads slowly feels worse than a website. Our guide to Core Web Vitals covers the speed metrics that matter, and web accessibility basics covers touch targets and contrast, which matter even more on a small screen.
Route 2: wrap it and publish to the stores
A wrapper is a small native app whose main job is to display your web app. The store sees a normal app; your code stays web code.
Android: Trusted Web Activity
Google's documentation describes a Trusted Web Activity (TWA) as a way to open your web content, "such as your Progressive Web App (PWA)," from an Android app, rendered by Chrome. Two details matter:
- The app and the site must come from the same developer, which is verified with Digital Asset Links, a file on your domain that names your app.
- Google provides Bubblewrap, described as a Node.js library and command-line tool that generates and builds TWA projects.
Because a TWA uses the full browser engine, your PWA works inside it largely as it does in Chrome. The better your PWA, the better the Android app.
iOS and Android: a native runtime such as Capacitor
Capacitor describes itself as "a cross-platform native runtime" that runs web apps on iOS, Android and more. Its documentation says that if something works in the browser, it probably works in a mobile app built with Capacitor, and that native features are added through plugins written in Swift for iOS and Java for Android. This is the usual route when you need the iOS App Store or a device feature the browser does not expose.
What the stores charge and require
- Google Play: a US$25 one-time registration fee. New personal developer accounts (created after 13 November 2023) must also run a closed test with at least 12 testers who stay opted in for at least 14 consecutive days before the app can go to production.
- Apple: the Apple Developer Program costs US$99 per year (prices vary by region and are shown in local currency during enrollment).
Plan the Google testing period into your launch date; two weeks of opted-in testers is the minimum, not a formality.
The Apple rule that rejects thin wrappers
Apple's App Review Guideline 4.2, Minimum Functionality, says: "Your app should include features, content, and UI that elevate it beyond a repackaged website. If your app is not particularly useful, unique, or 'app-like,' it doesn't belong on the App Store." Guideline 4.2.2 adds that apps "shouldn't primarily be marketing materials, advertisements, web clippings, content aggregators, or a collection of links."
So a wrapper that only loads your homepage is at risk. What helps is anything that makes it behave like an app: native navigation, push notifications, offline access to the user's own data, use of device features such as the camera or share sheet, and an experience built around signed-in users rather than marketing pages.
Which route should you choose?
| If you... | Choose |
|---|---|
| Want people to use it on their phones this week | PWA |
| Have mostly Android users and want a Play Store listing | PWA, then a Trusted Web Activity |
| Need to be in the iOS App Store | Capacitor (or another runtime) with real app features |
| Need heavy background processing or deep hardware access | Native for that part |
| Are not sure anyone wants the app yet | PWA, and revisit after launch |
The last row is the important one. Store publishing adds fees, review time and a second release process. If you are still finding out whether the idea works, keep that cost for later and follow the approach in how to scope an MVP for your first web app.
A short checklist before you start
- The web app works well on a phone-sized screen and passes basic speed checks.
- It is served over HTTPS on your own domain (see how to connect a custom domain and HTTPS).
- A manifest exists with name, short name, 192px and 512px icons, start URL and standalone display.
- You have decided what should work offline, if anything.
- If you will publish to Google Play: you have budgeted for the US$25 fee and the closed-test period.
- If you will publish to the App Store: you can list the features that make it more than a repackaged website.
Frequently asked questions
Can I put a PWA in the Apple App Store?
Not as-is: a PWA is installed from Safari, not the App Store. To list it, you wrap it in a native app (for example with Capacitor), and it then has to meet Apple's guidelines, including 4.2 Minimum Functionality.
Do PWAs get push notifications on iPhone?
Yes, since iOS and iPadOS 16.4, but only for web apps the user has added to the Home Screen, with a manifest set to standalone or fullscreen, and only after the user grants permission following a direct action such as a tap.
How much does it cost to publish an app to Google Play and the App Store?
As of October 2026, Google Play charges a US$25 one-time registration fee and Apple charges US$99 per year for the Apple Developer Program. Check both pages before you enrol, as prices can change and vary by region.
Is a Trusted Web Activity the same as a WebView app?
No. A TWA displays your site using Chrome itself, and requires Digital Asset Links proving you own both the app and the site. A WebView embeds a browser component inside your own app.
Do I need a service worker to make my app installable?
The current web.dev criteria for Chrome's install prompt do not list one; they list HTTPS, a manifest with the fields above, and some user engagement. You will still want a service worker for offline pages and push notifications.
Sources
- What does it take to be installable? (web.dev)
- Web app manifest (web.dev, Learn PWA)
- Web Push for Web Apps on iOS and iPadOS (WebKit blog)
- Trusted Web Activity overview (Chrome for Developers)
- Capacitor documentation
- App Review Guidelines (Apple Developer)
- Enrollment (Apple Developer Support)
- Register for a Google Play Developer account (Play Console Help)
- App testing requirements for new personal developer accounts (Play Console Help)




