On this page
What a PWA actually is
Strip away the marketing and a progressive web app is a website with three additions. A web app manifest tells the operating system what the app is called, which icon to use and how to open it, so it can sit on a home screen without browser chrome around it. A service worker is a script the browser keeps outside your page that can intercept network requests, serve cached responses and receive push messages. And HTTPS, which the other two require.
That is the whole technical definition. There is no framework you must buy and no certification to pass, which is precisely why the label gets overused. The interesting question is never "can we make this a PWA" — you almost always can. It is whether the web platform can carry the product you want to ship, on the devices your customers actually hold.
The useful mental model: a PWA is not a lightweight native app. It is a website that has been given permission to behave like an app on platforms that allow it, and degrades to being a website on platforms that do not. Design for that gradient and you will be fine. Assume parity across devices and iOS will find you out.
PWA vs native, compared honestly
Most comparison tables are written by someone selling one of the two options. This one tries not to be. Note that several rows differ sharply between Android and iOS, which is the crux of the whole decision.
| Capability | PWA on Android | PWA on iOS | Native app |
|---|---|---|---|
| Install to home screen | Browser-triggered prompt you can time | Manual Share → Add to Home Screen only | Standard store install |
| Push notifications | Supported, close to native behaviour | Only once added to Home Screen | Full support |
| Offline use | Good, via service worker caching | Good, with tighter storage limits | Full control of storage |
| Background sync while closed | Partial, Chromium-specific APIs | No | Yes |
| Camera, photos, location, files | Yes | Yes | Yes, with deeper control |
| Bluetooth, NFC, USB | Chromium only, patchy | No | Yes |
| Release cadence | Deploy whenever you like, no review | Store review per release | |
| Discovery | Search engines, links, QR codes | Store search, plus your own marketing | |
| Platform commission | None on web payments | Store rules apply to digital goods | |
Read the table as a shape rather than a scorecard. A PWA is strong on reach, iteration speed and cost of distribution. Native is strong on hardware access, background work and the predictability of behaving the same way on every device it installs on. Neither column wins in the abstract.
Install, offline and push: the realities
These three features are what people mean when they call a PWA "app-like", and all three come with asterisks worth knowing before you plan a roadmap around them.
Install. On Android and desktop, the browser exposes an event you can capture to show your own install button at a sensible moment — after a user has done something valuable, rather than the second they land. On iOS there is no such event: the user must find Add to Home Screen inside the Share menu themselves. If you do not draw them a picture of that menu, install rates on iPhone stay near zero. This is not a bug you can engineer around; it is a constraint you plan around with in-app guidance.
Offline. A service worker gives you genuine control: cache the shell so the app opens instantly, cache data so it opens with something in it, and queue writes to replay when the connection returns. The caveat is storage. Browsers may evict cached data under pressure, and iOS is considerably more aggressive than Android about clearing script-writable storage for sites that go unused for a while. Installing to the Home Screen improves this on iOS — another reason to care about that install prompt. Never treat browser storage as the only copy of anything a user cannot afford to lose.
Push. Android web push is solid. iOS web push exists, but only for Home Screen installs, which means your addressable audience is a subset of a subset: users who installed, then accepted permission. If your business case depends on reaching every customer with a notification, model those two drop-offs honestly before you sign anything.
A quick sanity test we use: look at your existing analytics and check the iOS share of mobile traffic. In much of the Gulf, iPhone share is high enough that "it works everywhere except iOS install and push" is not a footnote — it is the decision.
When a PWA is the right call
There is a recognisable shape to products that do well as PWAs. They are content or transaction led, they need to be reachable by a link, and the friction of a store install is a genuine tax on conversion.
- Reach beats depth. Anyone with a browser is one tap from your product. No install, no account, no download on a hotel wi-fi connection.
- Search and sharing work. Pages are indexable and every screen has a URL you can put in a campaign, a QR code or a message. Native deep links never work this cleanly.
- You ship when you are ready. A fix goes live in minutes, not after a review queue, and every user is on the current version the next time they open it. For products that are still finding their shape, this compounds fast.
- One codebase, one pipeline. Sensible engineering economics for teams that already have web skills, and no store commission on web payments.
- Low commitment usage. Ideal when people use you occasionally — a booking, a lookup, an order — and would never install an app.
Retail and ordering flows are the classic fit, which is why the technique sits naturally alongside ecommerce development work. Internal tools are another: staff on mixed devices, no MDM rollout, a link in an email and everyone is on the same version. Much of what we do in SaaS development and custom application development lands here — the browser is already where the work happens, and the PWA layer makes it faster and available offline.
When a PWA is the wrong call
Equally, there is a shape to products where a PWA will waste six months and then be rebuilt.
- Deep hardware. Continuous Bluetooth, NFC, USB peripherals, printer control, precise camera or sensor access. Web APIs for these are Chromium-only at best and absent on iOS.
- Background work. Location tracking while closed, background audio, scheduled sync, geofencing. The web has no equivalent that works everywhere, and this is usually the row that ends the discussion for logistics and field products.
- Notifications as the product. If the value is time-sensitive alerts to every user, the iOS install requirement caps your reach structurally.
- Store presence is the strategy. If buyers expect to find you on the App Store, no amount of technical elegance substitutes for a listing.
- Heavy graphics or on-device processing. Achievable on the web now, but you will spend the saving on optimisation.
Our own portfolio shows the split. ClueMaster, which manages IoT-enabled escape rooms across multiple locations, lives in a world of device control the web platform cannot reach — the same reasoning that drives our IoT development engagements. OneTuch, covering logistics, carpooling and medical emergency response, depends on background location and immediate alerts. A property portal like Rising Walls, by contrast, is browsing, searching and enquiring: exactly the profile that benefits from being a link away rather than a download away.
Performance budgets that keep a PWA honest
A PWA has no store install to hide behind. If it is slow, users leave immediately, because leaving costs them nothing. That makes performance a functional requirement rather than a polish item, and the only way we have found to hold the line is a budget agreed before the first line of code and enforced in CI.
Start with Core Web Vitals as the outer boundary: largest contentful paint under 2.5 seconds, interaction to next paint under 200 milliseconds, cumulative layout shift under 0.1, all measured at the 75th percentile of real users rather than on your laptop. These are Google's published thresholds and they double as a decent proxy for whether the thing feels acceptable.
Then add budgets you can enforce per build. A cap on JavaScript shipped on first load does the most work — keep the compressed payload for the initial route in the low hundreds of kilobytes, because parse and execution cost on a mid-range Android phone is far worse than the download. Cap image weight per route, cap blocking requests before first paint, and fail the build on a breach so the conversation happens at the pull request rather than a month after launch.
Test on a real mid-range Android device on a throttled connection, not a simulator on a fast office network. The gap between those two environments is where most PWA disappointments are born, and it is the cheapest bug to find early.
Caching strategy is part of the budget too: stale-while-revalidate for content that can be a few minutes old, network-first for anything that must be current, cache-first for versioned static assets. Decide this per route deliberately. A service worker that caches the wrong thing is worse than no service worker, because now your users are looking at yesterday's data and a hard refresh does not fix it.
Distribution and the app store question
Skipping the stores is worth more than it sounds: no review delays, no rejection risk on a hotfix, no commission on web payments, and a product a search engine can index. For a lot of businesses that is the entire argument.
If you want both, Android is accommodating. A PWA can be packaged as a Trusted Web Activity and listed on Google Play, running full screen with no browser interface and verified against your domain. Users get a store listing, you keep one codebase. Apple is harder: a thin wrapper around a website is likely to be rejected for offering too little beyond Safari. If an App Store listing is genuinely required, budget for a real build — which is where Flutter often earns its place, or dedicated iOS and Android work when the platform depth justifies it.
The pattern we most often recommend is neither purist position: a fast, indexable PWA as the front door for everyone, and a native app later for the committed minority who need the depth. The web version does acquisition, the native version does retention, and you learn what people actually use before spending native money on it.
How Inovsion helps
We build mobile apps, AI systems, ERP platforms and custom applications for clients across the UAE, Saudi Arabia and India, which means we are not invested in talking you into a PWA. Much of the useful work happens before any code: establishing whether the web platform can carry your product on the devices your customers hold. In practice:
- A platform decision with the reasoning shown. We take your requirements, map them against what each platform genuinely supports, and tell you where a PWA breaks. If your feature list has background location in it, we will say so in week one rather than month six.
- An iOS reality check against your own numbers. We look at your actual traffic split and model the install and permission drop-offs, so the notification strategy is based on reachable users rather than total users.
- Performance budgets written into the build. Agreed thresholds, enforced in CI, tested on real mid-range hardware rather than a simulator.
- Offline behaviour designed per route. Explicit caching strategy, conflict handling for queued writes, and a clear position on what must never live only in browser storage.
- A path to native when it is warranted. Shared APIs and design system from the start, so a later app is an addition rather than a rebuild. Our UI and UX work, including Arabic and RTL layouts, carries across both.
We have shipped the full spread: consumer platforms like FameKeeda and HiCare, sector products like the Energy Central news app, an ERP-integrated ZATCA e-invoicing solution for businesses meeting Saudi compliance requirements, and IoT-connected systems like ClueMaster. That range is the point — it is why the recommendation you get is a genuine read of the trade-off rather than the one thing we happen to build. If your product is closer to a business platform than a consumer app, our ERP and CRM teams tend to lead instead.
Frequently asked questions
Will a PWA work properly on iPhone?
Yes, but with real caveats. Safari supports service workers, offline caching and Add to Home Screen, so the core of a PWA runs. What you lose is the smooth install path, some hardware APIs, and background execution. Web push on iOS works only after the user has added the app to their Home Screen and granted permission. If iPhone is your dominant platform and notifications are central to the product, test that flow with real users before committing.
Can users install a PWA without going through an app store?
On Android and desktop Chromium browsers, yes: the browser can offer an install prompt that your code triggers at a sensible moment, and the app lands on the home screen or desktop with its own icon and window. On iOS there is no programmatic install prompt. The user must open the Share menu and choose Add to Home Screen manually, which most people will not discover unless you show them. That gap is the single biggest reason PWA install rates disappoint on iPhone.
Can a PWA send push notifications?
On Android, web push is well supported and behaves much like native notifications. On iOS, push is available to web apps installed to the Home Screen, which means users who only visit in the browser cannot be reached. Either way, the browser must be able to run your service worker, and a device that is offline or has the app evicted will not receive anything until it comes back. Treat web push as a good re-engagement channel rather than a delivery guarantee for anything time critical.
Is a PWA cheaper than building separate iOS and Android apps?
Usually, because you build and ship one codebase and one release pipeline rather than three, and there is no store review in the loop. The saving is real but smaller than people expect once you account for testing across browsers, working around iOS behaviour and building the install education that native gets for free. If you would otherwise build a cross-platform app with Flutter, the cost gap narrows considerably and the decision should be made on capability, not budget.
Can we publish a PWA on the App Store or Google Play?
Google Play accepts PWAs packaged as a Trusted Web Activity, which runs your site full screen with no browser chrome and verifies ownership through Digital Asset Links. It is a well-trodden path. Apple is stricter: a thin wrapper around a website is likely to be rejected for offering too little beyond the browser experience. If App Store presence is non-negotiable, plan for a genuine native or cross-platform build rather than assuming a wrapper will pass.
Does a PWA really work offline?
It works offline to the extent you design for it. A service worker can cache your interface and data so the app opens and shows something useful with no connection, and queue writes for later. What it cannot do reliably is run in the background while closed to sync on its own, because background sync support is uneven across browsers and absent on iOS. Offline-first is achievable; silent background synchronisation is where native still wins.
Deciding between a PWA and an app?
Tell us what the product needs to do and who it needs to reach. We will give you a straight read on whether the web platform can carry it, and what it would cost you if it cannot.