v0.6 — Public beta (production browsers)
Positioning: Production-ready offline-first apps in modern browsers, with sync, multi-tab storage, and IndexedDB fallback.
Builds on: v0.5 internal beta (convergence + ApplyPipeline). Code for Phases 2–3.2 from the internal best-in-class plan (archived privately) is already merged; v0.6 is sign-off and DX, not greenfield implementation.
Technical scope (already in main)
| Area | Capability |
|---|---|
| Sync | Durable queue, op-log pending count, encryption hook, HTTP/WS transport, schema mismatch, op transforms |
| Storage | Tab leader + BroadcastChannel, optional SharedWorker, OPFS dbName, IDB coalescing + quota events |
| DX | app.sync.status, onSyncEvent, kora doctor, DevTools in templates, kora generate hooks |
| Server | Constraint + referential validation, rate limits, Postgres when DATABASE_URL set |
| Advanced | Sync rules, Yjs richtext channel, audit export, chaos + benchmark CI |
Exit criteria (v0.6 tag)
Automated (CI / local)
| Check | Command |
|---|---|
| Full CI parity | pnpm lint && pnpm build && pnpm test && pnpm typecheck |
| Release gate | pnpm test:release-gate |
| E2E (browser) | pnpm test:e2e |
| Benchmark gates workflow | passes on PR (see benchmark-gates.yml) |
Manual browser matrix
Test at least one app from npx create-kora-app (sync template) on:
- Chrome / Edge (latest)
- Firefox (latest)
- Safari (latest macOS or BrowserStack)
Per browser:
- Offline create/update/delete → refresh → data intact (OPFS + worker).
- Two tabs same origin → no duplicate DB corruption; writes visible across tabs.
- Sync against local
kora devserver → second browser profile or device converges. - DevTools overlay (Ctrl+Shift+K) shows ops and sync timeline.
- IndexedDB fallback path (force if you maintain a test flag) completes 1k inserts without freezing UI.
Documentation
- Getting started reflects
createApp({ schema, sync })one-liner sync - Migration +
kora doctorlinked from docs nav - Changelog entry for v0.6 highlights browser + sync production use
Optional stretch (post–v0.6)
- Default
sharedWorkerUrlin templates after E2E proves stability
Shipped in 0.6.0: @korajs/vue and @korajs/svelte with reactive query composables, provider components, org auth bindings, presence/collaboration hooks, and CLI scaffolds (plain + Tailwind).
E2E (in repo): e2e/tests/multi-tab.spec.ts (sync), e2e/tests/multi-tab-local-storage.spec.ts (local OPFS, local-multi-tab Playwright project on port 5200).
Release commands
pnpm build
pnpm test:release-gate
pnpm test:e2ePublish 0.6.0 (versions already bumped in package.json — do not run changeset version again):
pnpm build
pnpm changeset publish --dry-run # verify 16 packages
pnpm changeset publish # requires npm login / NPM_TOKENFull maintainer steps: npm-publish-checklist.md.
For 0.6.1+, use the standard Changesets PR flow (pnpm changeset → merge Version Packages PR → auto-publish via CI).
Document history
| Date | Note |
|---|---|
| 2026-05-29 | Initial v0.6 public beta checklist |

