Pitfalls
Treating Install As Offline
Installed apps can still fail offline. Test app shell reload, route navigation, cached assets, data reads, writes, uploads, and conflict recovery separately.
Caching API Responses Blindly
Do not cache authenticated or mutable API responses without rules for freshness, user boundaries, and invalidation. A stale cache can leak the wrong account state or replay old business data.
Storing App Data In Cache Storage
Cache Storage is for request/response pairs. Use IndexedDB for structured user data, drafts, queues, blobs, sync metadata, and migration state.
Building On Background Sync As If It Is Universal
Background Sync and Periodic Background Sync are limited and browser-controlled. Always provide a foreground retry path.
Forcing skipWaiting() Without Update UX
Activating a new service worker while old tabs are open can mix old HTML with new chunks or new code with old caches. Use a prompt or controlled reload strategy for real apps.
Asking For Notification Permission Too Early
Ask only after the user understands the value. A denied permission is hard to recover and varies by browser.
Assuming Store Wrappers Remove Policy Work
PWABuilder, TWA, and MSIX wrappers add signing, identity, package metadata, store review, and update rules. They do not hide poor offline UX or thin-wrapper policy risk.
Ignoring iOS And Safari Differences
Safari, iOS, and iPadOS have distinct install flows and capability limits. If iOS matters, verify on real devices and do not infer behavior from Chrome desktop.