Progressive web apps

Compose installability, application-shell caching, update coordination, and push registration without confusing a service worker with local-first application data.

Supported approaches

Manifest and installation

planned

Generate portable manifest and platform assets, capture install prompts, and provide explicit iOS installation guidance.

Packages

@playstack/pwa

@playstack/pwa-react

Frameworks and integrations

Application-shell caching

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

Safe update coordination

planned

Surface waiting service workers and let the product choose when to activate and reload without discarding unsaved work.

Packages

@playstack/pwa

@playstack/pwa-react

Frameworks and integrations

Web Push registration

planned

Request permission in response to user intent and attach the resulting subscription to the shared device boundary.

Packages

@playstack/pwa

@playstack/devices@playstack/notifications

Frameworks and integrations

Frameworks and integrations

framework

React

Headless domain bindings plus optional Chakra application and admin compositions, with server authority kept outside the client.

framework

Next.js

Compose Playstack server contracts, React bindings, SSR handoff, and route adapters at the Next.js application edge.

Package reference

@playstack/pwa

@playstack/pwa-react

@playstack/devices

Installability is not local-first data

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.

Start with safe cache boundaries

ts
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.

Let the user choose an update moment

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.

Register push through devices

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.

Planned until another concrete consumer earns it

The boundaries are specified, but the package remains deferred until a second product needs web installability strongly enough to validate the shared interface.

Go

Playstack Pro tag
OriginsPricingBlogNewsletterChangelogStatusRoadmap
ContributorsCommunityIn Use ShowcaseCase StudiesPartnersSponsors
FAQsSupportContact

© 2026 Playstack. All rights reserved.

With OSS
Terms of ServicePrivacy PolicyCookie PolicyImprint

By

Commune Software