framework
React
Headless domain bindings plus optional Chakra application and admin compositions, with server authority kept outside the client.
Compose installability, application-shell caching, update coordination, and push registration without confusing a service worker with local-first application data.
planned
Generate portable manifest and platform assets, capture install prompts, and provide explicit iOS installation guidance.
planned
Apply revisioned asset and document strategies while keeping local-first domain reads and mutations outside service-worker caches.
Packages
@playstack/pwa
Frameworks and integrations
planned
Surface waiting service workers and let the product choose when to activate and reload without discarding unsaved work.
planned
Request permission in response to user intent and attach the resulting subscription to the shared device boundary.
Packages
A service worker can install an application shell and cache revisioned assets. It should not become a second authority for domain reads and pending writes owned by a local-first store. Those capabilities compose, but neither implies the other.
import { definePwa } from '@playstack/pwa'
export const pwa = definePwa({
manifest: {
name: 'Timespans',
shortName: 'Timespans',
startUrl: '/',
display: 'standalone',
},
routes: {
assets: 'cache-first',
documents: 'stale-while-revalidate',
localDataApi: 'network-only',
},
})Workbox or the selected framework integration owns service-worker mechanics. Playstack supplies the configuration boundary and conventions that prevent API caches from fighting application data state.
A newly installed worker waits while old tabs remain open. The React binding exposes that state so the product can present an update banner, activate only after confirmation, and avoid reloading a page with unsaved work.
The PWA layer obtains a Web Push subscription after a user action and registers it with @playstack/devices. Notification preference and delivery remain in the notification stack; the service worker does not become a second notification policy engine.
The boundaries are specified, but the package remains deferred until a second product needs web installability strongly enough to validate the shared interface.