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.