Demo matrix
Five running frameworks, three interchangeable Postgres drivers, one session and one queue.
The live demo puts every supported host on one origin. Sign in through any stack and the same better-auth cookie authenticates all five.
| App | Path | Deployed driver |
|---|---|---|
| Next.js App Router | /next | Drizzle |
| TanStack Start | /tanstack | Prisma |
| Express 5 | /express | raw pg |
| Hono | /hono | Drizzle |
| NestJS | /nestjs | Prisma |
Every app exposes device registration, send, in-app feed, preferences, Studio, browser diagnostics, and the emulator. The Next app remains the depth demo for digests, scheduled sends, queue inspection, FCM, and two-instance realtime.
Cross-stack walkthroughs
Sign in anywhere
Sign in as Alice on Express, then open NestJS. No second sign-in is needed: every app has its own better-auth handler, but they share the secret, tables, cookie name, origin, and cookie path.
Register here, send there
Register an emulator device on Hono. Open Next or NestJS and send. The device and delivery rows are shared database records, so the notification appears in the shared inbox.
One worker, five producers
Every app writes the same bp_job payload. One worker imports the shared notification definitions and drains jobs regardless of which framework enqueued them.
Kill a token everywhere
Disconnect a virtual device in the inbox, then send from another stack. The emulator returns invalid_token, the shared bp_device row is disabled, and every stack stops targeting it.
The matrix page calls each app's own push.diagnose() endpoint. The parity page runs a send/feed/preference/read sequence through all three adapters against the live database.