PWA Resources and Specifications¶
This page is a curated, verified index of the primary sources behind Progressive Web Apps: the specifications and their maturity as of September 2026, the IETF RFCs behind Web Push, official documentation from each browser vendor, the trackers that tell you what ships where, the standards-position repositories that tell you what will ship, and the tools, libraries and books worth your time. Every link was checked in September 2026. Use it when you need the authoritative answer rather than a summary, and pair it with the API Cheat Sheet and the Manifest Cheat Sheet for quick lookups.
Key takeaways
- Only a few PWA specs are mature. The Web Share API is a W3C Recommendation and Service Workers is a Candidate Recommendation Draft. The Web App Manifest, Push API and Badging API are Working Drafts, and Notifications, Storage, File System and Cookie Store are WHATWG Living Standards.
- Background Sync, Periodic Background Sync, Background Fetch, Window Controls Overlay, Launch Handler, Get Installed Related Apps and Storage Buckets are WICG Community Group drafts. In practice that means shipped by Chromium only.
- Web Push rests on four IETF RFCs: 8030 (the push protocol), 8291 (payload encryption), 8292 (VAPID) and 8188 (the
aes128gcmcontent encoding). - For "does it work in browser X?", check MDN's browser-compat-data (which also powers caniuse's API tables), Web Platform Status and the vendors' release notes. For "will it ever work?", read the Mozilla and WebKit standards-positions repositories.
- Positions that shape PWA design today: WebKit opposes
beforeinstallpromptand the Web Install API. Mozilla is negative on Background Sync, Periodic Background Sync and Get Installed Related Apps. Both engines support Service Worker Static Routing. - Workbox (7.4.1), vite-plugin-pwa (1.3.0) and Serwist (9.5.12) are the actively maintained service worker toolkits, and web-push is the reference Node.js push library. Lighthouse removed its PWA category in version 12.0.
How to read a specification's status¶
A specification's maturity level tells you how stable its API is and how many engines have committed to it. It does not tell you what ships. Some Recommendations are implemented in only one engine, and some Community Group drafts ship in browsers that hold most of the market. Read the status together with the support data and the standards positions below.
| Status | Published by | What it means for you |
|---|---|---|
| W3C Recommendation (REC) | W3C Working Group | Stable, with at least two interoperable implementations shown during review. Changes are rare and backward compatible |
| Candidate Recommendation Draft / Snapshot (CRD / CR) | W3C Working Group | Feature-complete in the group's view and waiting for implementation experience. The API is unlikely to change in incompatible ways |
| Working Draft (WD) | W3C Working Group | Under active development on the Recommendation track. Members and algorithms can still change |
| Editor's Draft (ED) | Spec editors (GitHub Pages) | The latest text, often ahead of the dated /TR/ snapshot. Read it when you care about current behavior, and cite the dated version when you need a stable reference |
| Living Standard | WHATWG | Continuously updated with no version numbers. The text reflects what implementers agreed to ship. Treat the current text as authoritative |
| Draft Community Group Report (CG-DRAFT) | WICG and other Community Groups | Incubation. No standards-track commitment and no patent commitments from non-participants. Often implemented only by the engine that proposed it |
| Group Note | W3C Working Group | Published for reference, not on the Recommendation track (for example, Web App Manifest - Application Information) |
| Explainer / unofficial draft | Anyone (often a browser vendor) | A proposal document. Expect breaking changes, and never build a core flow on it |
Dated snapshot versus editor's draft
W3C /TR/ URLs (for example https://www.w3.org/TR/service-workers/) always point to the latest published snapshot. The editor's draft on w3c.github.io can be weeks or months ahead. When the two disagree about an algorithm, browsers usually follow the editor's draft. File spec bugs against the GitHub repository linked from the draft's header.
Core PWA specifications¶
Status as of September 2026, read from each document's header. "Pages on this site" links to the deep dives.
| Specification | Status | What it defines | Links | Pages on this site |
|---|---|---|---|---|
| Service Workers | W3C CRD, 17 September 2026 (Web Applications WG) | Registration, scope, lifecycle, fetch interception, Clients, Cache Storage, navigation preload, Static Routing (addRoutes()) | TR · ED · GitHub | Lifecycle, Cache Storage API, Static Routing API |
| Web Application Manifest | W3C WD, 13 August 2026 (Web Applications WG) | The manifest format, display, scope, start_url, id, icons, shortcuts, display-mode media feature, processing algorithm | TR · ED · GitHub | Members Reference, App Identity & Updates |
| Web App Manifest - Application Information | W3C Group Note, 21 August 2023 | description, screenshots, categories, iarc_rating_id | TR · ED | Rich Install UI |
| Manifest Incubations | WICG CG-DRAFT | Members Chromium ships ahead of standardization: protocol_handlers, file_handlers, share_target, note_taking, tab_strip, scope_extensions and the BeforeInstallPromptEvent | Draft | Advanced & Integration Members |
| Push API | W3C WD, 1 December 2025 (Web Applications WG) | PushManager, PushSubscription, push and pushsubscriptionchange events | TR · ED · GitHub | Push Notifications |
| Notifications API | WHATWG Living Standard | Notification, showNotification(), NotificationEvent, permission model | Standard | Notifications API |
| Badging API | W3C WD, 27 April 2026 | setAppBadge(), clearAppBadge() | TR · ED | Badging API |
| Web Share API | W3C Recommendation, 30 May 2023 | navigator.share(), navigator.canShare() | TR · ED | Web Share API |
| Web Share Target | Unofficial draft (Web Applications WG repository) | The manifest share_target member | Draft | Web Share Target |
| Web Background Synchronization | WICG CG-DRAFT, 10 November 2021 | SyncManager, sync event | Draft | Background Sync |
| Web Periodic Background Synchronization | WICG CG-DRAFT, 12 April 2021 | PeriodicSyncManager, periodicsync event | Draft | Periodic Background Sync |
| Background Fetch | WICG CG-DRAFT, 21 April 2021 | BackgroundFetchManager and its events | Draft | Background Fetch |
| Storage Standard | WHATWG Living Standard | Storage keys, buckets, navigator.storage, persistence, quota | Standard | Storage Quotas & Persistence |
| Storage Buckets API | WICG CG-DRAFT, 19 December 2023 | navigator.storageBuckets | Draft | Storage Quotas & Persistence |
| File System Standard | WHATWG Living Standard | FileSystemHandle, the origin private file system, sync access handles | Standard | Origin Private File System |
| File System Access | WICG CG-DRAFT, 10 October 2025 | showOpenFilePicker(), showSaveFilePicker(), showDirectoryPicker() | Draft | File System Access |
| Cookie Store API | WHATWG Living Standard | cookieStore, CookieStoreManager, cookiechange | Standard | API Cheat Sheet |
| Window Controls Overlay | WICG CG-DRAFT | navigator.windowControlsOverlay, titlebar-area-* environment variables | Draft | Window Controls Overlay |
| Web App Launch Handler API | WICG CG-DRAFT | launch_handler, window.launchQueue | Draft | Protocol Handlers & Launch Handling |
| Get Installed Related Apps API | WICG CG-DRAFT, 8 March 2021 | navigator.getInstalledRelatedApps() | Draft | Detecting Installed Apps |
| Content Index | WICG Editor's Draft, 13 April 2021 | registration.index | Draft | API Cheat Sheet |
| Web Install API | Explainer (Microsoft Edge team) plus the WICG <install> element | navigator.install(), <install> | Explainer · <install> | Install Prompts & Custom UI |
| Isolated Web Apps | WICG explainers | Signed web bundles, stricter security model, extra capabilities | Repository | Isolated Web Apps |
A few notes on this table:
- The Service Workers
/TR/page is titled "Service Workers Nightly". The Working Group publishes the full, current feature set, including Static Routing andInstallEvent.addRoutes(), as the Candidate Recommendation Draft. An older "Service Workers 1" document covered only the original core, so cite the nightly draft for modern behavior. beforeinstallpromptis not in the main manifest specification. It lives in Manifest Incubations and is implemented only by Chromium. A pull request to move it into the Web Application Manifest led to position requests at both other engines: WebKit opposes it and Mozilla has not taken a position (see the table of positions below).- The Push API and Notifications API move independently. Declarative Web Push, which Safari ships, was proposed as a pull request to the Push API. Mozilla's position on it is positive.
The IETF RFCs behind Web Push¶
The browser side of push is the Push API. The server side, which your code talks to when it sends a message, is defined by four IETF RFCs. Every push service (Firebase Cloud Messaging for Chrome, Mozilla's autopush for Firefox, Apple Push Notification service for Safari, Windows Push Notification Services for Edge) implements them.
| RFC | Title | What you need from it |
|---|---|---|
| RFC 8030 | Generic Event Delivery Using HTTP Push | The request your server sends: POST to the subscription endpoint, the TTL, Urgency and Topic headers, and the 201 Created, 404 and 410 Gone responses |
| RFC 8291 | Message Encryption for Web Push | ECDH (P-256) plus HKDF key derivation using the subscription's p256dh and auth keys, and why usable payloads stay under about 4 KB (RFC 8030 only requires push services to accept 4,096 bytes) |
| RFC 8292 | Voluntary Application Server Identification (VAPID) for Web Push | The Authorization: vapid t=<JWT>, k=<public key> header, the JWT claims (aud, exp of at most 24 hours, sub), and why applicationServerKey must match |
| RFC 8188 | Encrypted Content-Encoding for HTTP | The aes128gcm record format that RFC 8291 payloads use (Content-Encoding: aes128gcm) |
Apple documents its extra constraints and error responses in Sending web push notifications in web apps and browsers. How these fit together, with a byte-level walkthrough, is on The Web Push Protocol.
Related platform specifications¶
PWAs lean on general-purpose specifications that are not PWA-specific. These are the ones this site cites most often:
| Specification | Status (September 2026) | Why it matters to a PWA |
|---|---|---|
| Fetch Standard | WHATWG Living Standard | Request, Response, request modes and destinations, CORS and opaque responses: everything a fetch handler touches |
| HTML Standard | WHATWG Living Standard | Workers, postMessage(), user activation, registerProtocolHandler(), navigation, bfcache |
| Permissions | W3C WD, 6 October 2025 | navigator.permissions.query() and the permission names used by notifications, push and sync |
| Media Session | W3C WD, 5 June 2026 | Lock screen and hardware media controls for audio and video apps |
| Screen Wake Lock API | W3C WD, 24 October 2024 | Keeping the screen on in recipe, navigation and presentation apps |
| Web Locks API | W3C WD, 24 September 2025 | Coordinating tabs and the service worker (for example, one sync writer at a time) |
| Web-based Payment Handler API | W3C WD, 23 April 2026 | Service-worker-based payment apps (formerly "Payment Handler API"; the old /TR/payment-handler/ URL redirects) |
Browser vendor documentation¶
Vendor documentation is the best source for behavior that the specs leave to the browser: install criteria, quotas, prompts and platform quirks.
MDN Web Docs¶
MDN is the cross-browser reference. Its compatibility tables come from the same browser-compat-data project that this site uses for version numbers.
- Progressive web apps: guides, tutorials and the index of PWA-related APIs.
- Web application manifest: a per-member reference with compatibility data.
- Making PWAs installable: the installability requirements, compared across browsers.
- Service Worker API, Push API and Notifications API: interface references with per-member compatibility tables.
- Firefox release notes for developers: what each Firefox version shipped, including recent service worker and notification changes.
web.dev and Chrome for Developers¶
Google's two developer sites split the work. web.dev holds cross-browser guidance and courses. developer.chrome.com holds Chrome-specific capabilities, DevTools, Workbox and release notes.
- Learn PWA: a free, structured course that covers the manifest, service workers, caching, installation and capabilities.
- Progressive Web Apps collection: articles and case studies.
- What does it take to be installable?: Chromium's current installability criteria. Chrome dropped the service worker (
fetchhandler) requirement for installing from the browser menu in Chrome 108 on Android and 112 on desktop; the automatic prompt still required a fetch handler at that time, and current Chromium's install promotion has no service worker check. - The service worker lifecycle and the Offline Cookbook: the two classic explanations of lifecycle and caching strategies.
- Capabilities and the Project Fugu API Showcase: Chromium's capability APIs (File System Access, File Handling, Window Controls Overlay and others) with demo apps.
- Workbox documentation: modules, recipes and build tools.
- Debug Progressive Web Apps: the DevTools Application panel, manifest and service worker debugging.
- Get Installed Related Apps: the only complete description of the verification rules per platform.
- Trusted Web Activity overview: packaging a PWA for Google Play.
- Chrome release notes: per-version feature lists, deprecations and origin trials.
WebKit and Apple¶
Apple documents web apps mostly through the WebKit blog and the Safari release notes. There is no single "PWA" guide, so these pages are the primary sources for anything about iOS, iPadOS and macOS.
- Web Push for Web Apps on iOS and iPadOS: the iOS 16.4 announcement that defines the Home Screen requirement, badging and the rules for requesting permission.
- Meet Declarative Web Push: the declarative JSON format,
window.pushManagerand the fallback model. - Safari release notes: the authoritative list of what each Safari version fixed or added. For example, the Safari 27 notes record Service Worker Static Routing support and
maxAgein the Cookie Store API. - WebKit Feature Status: WebKit's own feature tracker.
- Sending web push notifications in web apps and browsers: server requirements for APNs-backed Web Push.
Microsoft Edge¶
Microsoft drives much of the desktop PWA work (Window Controls Overlay, protocol handling, the Web Install API) and documents it well.
- Overview of Progressive Web Apps: the entry point to Edge's PWA documentation, covering OS integration on Windows.
- Publish a PWA to the Microsoft Store: packaging with PWABuilder and submitting to the Store.
- Microsoft Edge web platform release notes: per-version changes, origin trials and deprecations.
- MSEdgeExplainers: explainers for features the Edge team proposes, including the Web Install API.
- MicrosoftEdge/Demos: working demo apps, including the Web Install API demo.
Android and Firefox tooling¶
- Overview of Trusted Web Activities: Android's own documentation for TWAs and Digital Asset Links.
- about:debugging: Firefox's tool for inspecting, starting and unregistering service workers, and for remote debugging Firefox for Android.
Browser support and status trackers¶
Different trackers answer different questions. The version numbers on this site come from MDN's browser-compat-data (release 8.1.3, published September 24, 2026) and the vendors' release notes.
| Tracker | Answers | Notes |
|---|---|---|
| MDN browser-compat-data | "Which version shipped member X, and with what caveats?" | Machine-readable JSON, also published to npm as @mdn/browser-compat-data. Records flags, partial implementations and removals |
| Can I use | "What share of users can use X?" | Combines its own feature tables with BCD-derived API tables, and adds usage statistics |
| Web Platform Status | "Is X Baseline, and since when?" | Google-run dashboard built on the web-features project, with Baseline status and web-platform-tests pass rates |
| Baseline | "Can I use X without a fallback?" | Newly available means supported in the current versions of all major engines. Widely available means 30 months after that |
| Chrome Platform Status | "When will Chromium ship X, and what did other engines say?" | Every Blink intent (prototype, experiment, ship), origin trial dates and links to standards positions. The roadmap shows upcoming milestones |
| WebKit Feature Status | "Is WebKit working on X?" | Less detailed than Chrome Platform Status; the Safari release notes are more precise |
| web-platform-tests dashboard | "Do engines actually pass the tests for X?" | Test results per engine. The Interop 2026 dashboard tracks the focus areas the engines agreed to improve this year |
| Release notes: Chrome, Safari, Firefox, Edge | "What changed in version N?" | The primary source when BCD hasn't caught up yet |
Two caveats apply. BCD records when an API became available, which is not always when it became usable: iOS Push, for example, is recorded as 16.4 but works only in Home Screen web apps. And support in "Chrome" usually carries over to Edge, Opera and Samsung Internet at the same Chromium version, but not always. Samsung Internet, for instance, tracks Chromium with a delay and its own feature choices.
Checking support from a script¶
When you maintain a support table, query browser-compat-data directly instead of copying numbers by hand. This Node.js script prints the first supporting version per browser for any list of BCD paths, and flags partial, prefixed and flagged support:
// Usage: npm i -D @mdn/browser-compat-data
// node scripts/support.mjs api.PushManager api.Navigator.setAppBadge api.InstallEvent.addRoutes
import bcd from "@mdn/browser-compat-data" with { type: "json" };
const BROWSERS = ["chrome", "chrome_android", "edge", "firefox", "firefox_android", "safari", "safari_ios"];
function lookup(path) {
// Walk "api.PushManager.subscribe" down the BCD tree.
return path.split(".").reduce((node, key) => node?.[key], bcd)?.__compat;
}
function describe(statement) {
if (!statement) return "?";
// A browser may have several statements (e.g. prefixed, then unprefixed); the first is current.
const s = Array.isArray(statement) ? statement[0] : statement;
if (s.version_added === false) return "no";
if (s.version_removed) return `removed ${s.version_removed}`;
const notes = [s.partial_implementation && "partial", s.prefix && `prefix ${s.prefix}`, s.flags && "flag"]
.filter(Boolean);
return `${s.version_added}${notes.length ? ` (${notes.join(", ")})` : ""}`;
}
const paths = process.argv.slice(2);
if (paths.length === 0) {
console.error("Pass one or more BCD paths, for example api.PushManager");
process.exit(1);
}
console.log(`BCD ${bcd.__meta.version} (${bcd.__meta.timestamp.slice(0, 10)})`);
for (const path of paths) {
const compat = lookup(path);
if (!compat) {
console.log(`${path}: not found in BCD`);
continue;
}
const row = BROWSERS.map((b) => `${b}=${describe(compat.support[b])}`).join(" ");
const flags = [compat.status?.experimental && "experimental", compat.status?.deprecated && "deprecated"]
.filter(Boolean).join(", ");
console.log(`${path}${flags ? ` [${flags}]` : ""}\n ${row}`);
}
The script needs Node.js 22 or later for the with { type: "json" } import attribute. Run it in CI after each BCD release and compare the output with your documentation, so support tables don't silently go stale.
Standards positions and design reviews¶
Chromium ships many PWA capabilities first. Whether the other engines follow depends on their published positions, which are the best predictor of cross-browser support you have.
- Mozilla standards positions (GitHub): positions are positive, neutral, negative, defer or not yet set.
- WebKit standards positions: positions are support, neutral, oppose or blocked, with the concern named in labels (privacy, security, venue and so on).
- W3C TAG design reviews: the Technical Architecture Group's reviews of new APIs, often the most detailed critique of a design.
Positions on PWA-related proposals, read from both repositories in September 2026:
| Proposal | Mozilla | WebKit |
|---|---|---|
| Service Worker Static Routing | positive | support (shipped in Safari 27) |
| Declarative Web Push | positive | Proposed and shipped by WebKit |
| Badging API | positive | Shipped (Safari 17 and iOS 16.4) |
| Web Share Target | positive | neutral |
| Cookie Store API | Shipped (Firefox 140); maxAge positive | support; maxAge support |
| Screen Wake Lock | positive | support |
| Storage Buckets | positive | no position |
| Web Background Synchronization | negative | no position |
| Periodic Background Sync | negative | No issue |
| Background Fetch | no position | no position |
| Get Installed Related Apps | negative | No issue |
| File System Access (pickers) | negative | oppose |
| File Handling | defer | No issue |
| URL protocol handlers for web apps | defer | No issue |
| Window Controls Overlay | defer | no position |
| Web App Launch Handling | no position | no position |
| Tabbed web apps | defer | no position |
| Isolated Web Apps | negative | blocked |
BeforeInstallPromptEvent in the manifest spec | no position | oppose |
Web Install API / <install> | no position | oppose |
| Web App Manifest - Application Information | No issue | oppose (the screenshots member) |
How to use this table: a negative or oppose position means you should design the feature as a Chromium-only enhancement indefinitely, as with Background Sync, where an IndexedDB outbox with an in-page retry is the real mechanism and sync is a bonus. Defer and no position mean nobody has done the work to decide yet. A positive or support position does not promise an implementation date. Mozilla's positive position on Static Routing, for example, has not yet produced a Firefox release.
Tools and libraries¶
Versions are the latest on npm as of late September 2026. Check each project's changelog before upgrading across a major version.
| Tool | Purpose | Latest | Links | Page on this site |
|---|---|---|---|---|
| Workbox | Google's service worker libraries: routing, strategies, precaching, expiration, background sync queue; build plugins for webpack and CLI | workbox-build 7.4.1 (May 2026) | Docs · GitHub | Workbox Fundamentals, Advanced Workbox |
| vite-plugin-pwa | Zero-config PWA plugin for Vite (manifest, Workbox-generated or custom service worker, update prompts) with framework integrations | 1.3.0 (May 2026) | Docs · GitHub | Vite PWA Plugin |
| Serwist | A Workbox-derived service worker toolkit with first-class Next.js and bundler integrations | serwist 9.5.12 (July 2026) | Docs · GitHub | Framework Integrations |
@angular/service-worker | Angular's built-in, configuration-driven service worker (ngsw-config.json) | 22.2.0 (September 2026) | Docs | Framework Integrations |
| PWABuilder | Microsoft's tool to validate a PWA and package it for the Microsoft Store (MSIX) and Google Play (TWA), with a community-maintained iOS wrapper template | Web service | Site · Docs | PWABuilder |
| Bubblewrap | Google's CLI for generating and building Trusted Web Activity Android projects | @bubblewrap/cli 1.25.0 (July 2026) | GitHub | Trusted Web Activity |
| Lighthouse | Performance, accessibility and best-practice audits. The PWA category was removed in 12.0 | 13.5.0 (September 2026) | GitHub · Docs | Lighthouse & Auditing |
| web-push (Node.js) | VAPID signing and RFC 8291 payload encryption for sending pushes | 3.6.7 (January 2024) | GitHub | The Web Push Protocol |
| pywebpush, web-push-php, webpush-java | The same functionality for Python, PHP and Java, from the web-push-libs organization | See each repository | pywebpush · web-push-php · webpush-java | Push Notifications |
| idb | A tiny promise wrapper for IndexedDB, usable in service workers | 8.0.3 (May 2025) | GitHub | IndexedDB |
| pwa-asset-generator | Generates icons, Apple touch icons and iOS splash screens from one source image with Puppeteer | 8.1.7 (September 2026) | GitHub | Icons & Maskable Icons |
@vite-pwa/assets-generator | Icon and splash generator from the vite-pwa project | 2.0.0 (September 2026) | Docs | Splash Screens & Theming |
| Maskable.app | In-browser editor and previewer for maskable icon safe zones | Web app | Site | Icons & Maskable Icons |
| Playwright | Browser automation; its service worker APIs (inspecting workers and their network requests) work only in Chromium | See docs | Service workers guide | Automated Testing |
Maintenance signals
A package's latest release date is a rough health signal, not a verdict. web-push's last release was in January 2024, but the protocol it implements hasn't changed since the RFCs were published. A service worker toolkit that stops tracking browser changes, such as Static Routing, pushsubscriptionchange in Chrome 138 or module service workers in Firefox 147, ages much faster.
Learning resources and demos¶
Beyond the specs and vendor references, these resources are worth reading in full:
- The Offline Cookbook by Jake Archibald: the original catalog of caching strategies (cache-first, network-first, stale-while-revalidate and variations). Every strategy page on the web, including Caching Strategies, descends from it.
- The service worker lifecycle, also by Jake Archibald: still the clearest explanation of why the waiting phase exists.
- Web Push Book by Matt Gaunt: a free online book on the push flow from subscription to server, including the encryption steps.
- Learn PWA on web.dev: a course that goes from basics to capabilities.
- What PWA Can Do Today: a PWA that demonstrates capabilities live, so you can test a device's support by installing it.
- Project Fugu API Showcase: production apps that use Chromium capability APIs.
- Going Offline, read online: Jeremy Keith's book on service workers, now free to read on the web.
Books¶
Books on PWAs were mostly published between 2017 and 2020. Their explanations of the lifecycle, caching and the manifest are still sound. Their browser support statements, install criteria and push details are not: iOS had no service workers when the earliest of them were written. Read them for concepts and check APIs against MDN.
| Title | Author | Publisher, year | Notes |
|---|---|---|---|
| Going Offline | Jeremy Keith | A Book Apart, 2018 | A short, careful introduction to service workers and offline pages. Free to read online |
| Progressive Web Apps | Jason Grigsby | A Book Apart, 2018 | The business case and the design decisions (when to go offline-first, how to ask for permissions) rather than API detail |
| Progressive Web Apps | Dean Alan Hume | Manning, 2017 | A hands-on introduction to service workers, caching, the manifest and push, with a foreword by Addy Osmani |
| Building Progressive Web Apps: Bringing the Power of Native to the Browser | Tal Ater | O'Reilly Media, 2017 | Builds a single sample app through every PWA feature available at the time |
| Progressive Web Application Development by Example | Chris Love | Packt, 2018 | Example-driven, from the same period |
| Progressive Web Apps with Angular | Majid Hajian | Apress, 2019 | @angular/service-worker in depth. The Angular APIs have changed since, so pair it with the current Angular docs |
| Learning Progressive Web Apps | John M. Wargo | Addison-Wesley | A broad introduction that also covers tooling |
Keeping this knowledge current¶
PWA support changes with every browser release. Chrome moved from a four-week to a two-week release cycle with Chrome 153 on September 8, 2026 (the Extended Stable channel stays at eight weeks). Firefox ships roughly every four weeks, and Safari ships a major version each September plus point releases during the year. A sustainable routine:
- Subscribe to the release notes of Chrome, Safari, Firefox and Edge (the links are in the trackers table). Search each one for "service worker", "manifest", "push", "notification" and "badge".
- Re-run your support script against each new browser-compat-data release, and diff the output against your documentation.
- Watch Chrome Platform Status for Intent to Ship and Intent to Deprecate posts that affect you. Background Fetch's November 2025 intent to deprecate and the Web Install API's 2026 intent to ship were both posted to blink-dev. Intents are proposals, not outcomes: as of Chrome 154, Background Fetch still ships, now with CORS enforcement and a Chrome 149 restriction on jobs started from a service worker.
- Watch the standards-positions repositories for the proposals in the positions table. A change from no position to positive is the earliest signal that another engine may implement.
- Test on real devices, particularly iOS Home Screen apps, whose behavior no desktop emulator reproduces. The Browser DevTools page covers remote debugging.
The site's History & Evolution page records when each capability shipped, and the Production Checklist turns current support into a release checklist.
Further reading¶
On this site
- API Cheat Sheet
- Manifest Cheat Sheet
- Glossary
- FAQ
- Platform Support
- History & Evolution
- Tooling & Frameworks
External references