{"post":{"slug":"what-is-a-progressive-web-app-2026","title":"What Is a Progressive Web App in 2026? PWA Basics","excerpt":"A progressive web app is a website that can be installed, work offline, and send push notifications using standard web technology. Here is what actually makes one work in 2026.","category":"code","date":"July 20, 2026","author":"ByteLedger Team","content":"<span class=\"dropcap\">A</span> progressive web app is not a separate technology from a website — it is a regular website that meets a handful of extra requirements so the browser treats it more like an app. Add a manifest file describing its name and icons, serve it over HTTPS, and register a service worker, and a browser will offer to install it, run it in its own window without browser chrome, and keep it working when the network drops. None of this needs a rewrite. It is closer to a checklist than a platform.\n\n## What changed in 2026\n\n- **iOS has kept narrowing the install and push gap with Android**, though it still lags in a few areas. Test the capability you need on the current iOS version rather than assuming parity.\n- **Manifest features expanded**, including richer icon sets, app shortcuts, and share targets, with wider support across major browsers than a few years ago.\n- **Some app stores now accept PWAs directly for listing**, blurring the line between a PWA and a store app, though this varies by store and is worth confirming for your target platform.\n- **Install prompt heuristics are more tied to engagement and performance signals**, so a slow or rarely revisited site is less likely to get an automatic prompt.\n\n## The three technical requirements\n\nEvery PWA rests on the same three pieces:\n\n```json\n{\n  \"name\": \"Acme Notes\",\n  \"short_name\": \"Notes\",\n  \"start_url\": \"/\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#1c1c1e\",\n  \"icons\": [\n    { \"src\": \"/icons/192.png\", \"sizes\": \"192x192\", \"type\": \"image/png\" },\n    { \"src\": \"/icons/512.png\", \"sizes\": \"512x512\", \"type\": \"image/png\" }\n  ]\n}\n```\n\n```javascript\nif (\"serviceWorker\" in navigator) {\n  navigator.serviceWorker.register(\"/sw.js\");\n}\n```\n\nThe manifest tells the browser how to present the installed app. The service worker, once registered, is what makes offline support and background behavior possible. The service worker that powers offline support is a distinct concept from a [web worker](/blog/what-is-a-web-worker-2026), which exists purely to run computation off the main thread, not to intercept network requests.\n\n## What a PWA can actually do\n\n- Install to a home screen, app drawer, or desktop, and launch in its own window.\n- Work offline or on a flaky connection by serving cached assets and data.\n- Send push notifications, with support and behavior varying by platform.\n- Queue actions for background sync when the connection returns, where supported.\n\n## PWA versus native app\n\n| Capability | PWA | Native app |\n| --- | --- | --- |\n| Distribution | Directly from your website, sometimes app stores too | App store only, typically |\n| Update process | Instant, same as deploying a website | Store review, user must update |\n| Install size | Small, cached incrementally | Full package download |\n| Offline support | Yes, via service worker cache | Yes, built in |\n| Deep OS or hardware integration | Limited, improving over time | Full |\n| Push notifications | Supported, with platform differences | Fully supported |\n| Cross-platform code | One codebase | Often per-platform or a separate framework |\n\n## When a PWA is the right call\n\nA PWA earns its keep for content or tools people return to often but that do not need deep hardware access — internal dashboards, note-taking apps, e-commerce storefronts, and reference tools. It is also a strong fit when instant updates without a store review cycle matter, since deploying a PWA update is no different from deploying any other change to the website.\n\n## Common mistakes\n\n**Registering a service worker but caching nothing useful.** \"Offline support\" that just registers an empty service worker without a caching strategy is not offline support — test it with the network disabled.\n\n**Ignoring iOS-specific quirks.** Manifest handling, storage limits, and notification support differ enough between platforms that testing only one will miss real gaps.\n\n**Not planning the update flow.** A cached service worker can keep serving stale assets indefinitely with no versioning or activation strategy, turning your offline feature into a bug that outlives the fix.\n\n**Treating installability as the finish line.** An install prompt appearing is not the same as offline support or push notifications actually working — test each capability directly.\n\n## FAQ\n\n**Does a PWA need a native app store listing?**\nNo. A PWA installs directly from the browser through the install prompt or \"add to home screen.\" Some platforms also allow packaging a PWA for a store listing, but it is optional, not required.\n\n**Can a PWA access the camera, GPS, or other device hardware?**\nMany common APIs, including camera and geolocation, are available to web apps directly, PWA or not. Some deeper hardware and background capabilities remain native-only or inconsistent across browsers, so verify support for the specific API you need.\n\n**Why is my PWA not getting an install prompt?**\nMost browsers require HTTPS, a valid manifest, a registered service worker, and sometimes a minimum engagement signal before showing the prompt automatically. Check your browser devtools application panel for the specific reason it is being withheld.\n\n**Do PWAs work offline automatically?**\nNo. Offline support has to be built deliberately by caching the right assets and data in the service worker. A PWA with no caching strategy behaves exactly like a normal website with no connection.\n\n## Where to go next\n\n- [What is a web worker in 2026](/blog/what-is-a-web-worker-2026)\n- [What are server-sent events in 2026](/blog/what-is-server-sent-events-2026)\n- [What is lazy loading in 2026](/blog/what-is-lazy-loading-2026)","hue":260,"metaTitle":"Progressive Web App Explained 2026: PWA Guide","metaDescription":"A 2026 guide to progressive web apps: the manifest, service workers, installability, offline support, and how a PWA compares to a native app.","keywords":["progressive web app 2026","what is a pwa","pwa vs native app","web app manifest","installable web app","pwa offline support","pwa push notifications","add to home screen","service worker basics"],"tldr":["**A PWA is a regular website that meets a few extra requirements** — a web app manifest, HTTPS, and a registered service worker are the core three.","**The service worker is what enables offline support and installability** — it intercepts network requests and can serve cached content when there is no connection.","**Installability does not mean feature parity with native apps** — deep OS integration and some hardware APIs still vary by platform.","**iOS and Android support the same standards differently** — test install prompts, push notifications, and storage limits on both before assuming parity.","**Skip:** wrapping a site with little repeat traffic in PWA features — the offline and install investment pays off for apps people open often, not one-off content pages."],"readTime":"4 min read","wordCount":897},"related":[{"slug":"what-is-a-microservice-2026","title":"What is a microservice in 2026? The small-service approach explained","excerpt":"A microservice is one small, independently deployable program that does a single job and talks to others over the network. This guide explains how the pattern works and when it actually pays off.","category":"code","date":"June 23, 2026","author":"ByteLedger Team","readTime":"4 min read","hue":205},{"slug":"how-to-use-git-and-github-2026","title":"How to Use Git and GitHub in 2026: a starter guide","excerpt":"Git tracks your code history; GitHub hosts it online. This 2026 guide covers the core commands and workflow you actually need to start using both today.","category":"code","date":"May 23, 2026","author":"ByteLedger Team","readTime":"3 min read","hue":240},{"slug":"what-is-git-basics-2026","title":"What is Git: basics explained for 2026","excerpt":"Git is the version control system that every developer needs to understand. This guide covers the core concepts, essential commands, and the mental model that makes Git click.","category":"code","date":"April 8, 2026","author":"ByteLedger Team","readTime":"6 min read","hue":314}],"sameCategory":[{"slug":"bazel-build-explained-2026","title":"Bazel Explained: What Hermetic Builds Actually Cost","excerpt":"Bazel delivers reproducible, precisely cached builds and demands that you describe everything. Here is what you get, what it costs, and who should say no.","category":"code","date":"August 19, 2026","author":"ByteLedger Team","readTime":"3 min read","hue":145},{"slug":"graphql-federation-2026","title":"GraphQL Federation: One Graph, Many Teams","excerpt":"Federation composes independently-owned subgraphs into a single API. Here is what it solves, the operational cost it adds, and when a simpler gateway is enough.","category":"code","date":"August 19, 2026","author":"ByteLedger Team","readTime":"3 min read","hue":300},{"slug":"hermetic-builds-explained-2026","title":"Hermetic Builds Explained: Same Inputs, Same Output","excerpt":"A hermetic build depends only on declared inputs. Here is what that property gives you, the common leaks that break it, and how to move toward it incrementally.","category":"code","date":"August 19, 2026","author":"ByteLedger Team","readTime":"3 min read","hue":130},{"slug":"monorepo-tooling-compared-2026","title":"Monorepo Tooling Compared: What You Actually Need","excerpt":"Monorepo tools solve task orchestration and caching, not repository layout. Here is what each tier provides and how to tell when you have outgrown the simple option.","category":"code","date":"August 19, 2026","author":"ByteLedger Team","readTime":"3 min read","hue":150}],"newer":{"slug":"what-is-a-priority-queue-2026","title":"What Is a Priority Queue in 2026? Heaps Explained","excerpt":"A priority queue serves the highest-priority item first, not the oldest one. Here is how binary heaps implement that promise and where it shows up in real systems.","category":"code","date":"July 20, 2026","author":"ByteLedger Team","readTime":"3 min read","hue":240},"older":{"slug":"what-is-a-promise-chain-2026","title":"What Is a Promise Chain in 2026? Chaining .then Explained","excerpt":"A promise chain links multiple then calls so each step waits for the last one to finish. Here is how chaining actually works, where it breaks, and how it compares to async await in 2026.","category":"code","date":"July 20, 2026","author":"ByteLedger Team","readTime":"4 min read","hue":320}}