Skip to content

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)

AreaCapability
SyncDurable queue, op-log pending count, encryption hook, HTTP/WS transport, schema mismatch, op transforms
StorageTab leader + BroadcastChannel, optional SharedWorker, OPFS dbName, IDB coalescing + quota events
DXapp.sync.status, onSyncEvent, kora doctor, DevTools in templates, kora generate hooks
ServerConstraint + referential validation, rate limits, Postgres when DATABASE_URL set
AdvancedSync rules, Yjs richtext channel, audit export, chaos + benchmark CI

Exit criteria (v0.6 tag)

Automated (CI / local)

CheckCommand
Full CI paritypnpm lint && pnpm build && pnpm test && pnpm typecheck
Release gatepnpm test:release-gate
E2E (browser)pnpm test:e2e
Benchmark gates workflowpasses 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:

  1. Offline create/update/delete → refresh → data intact (OPFS + worker).
  2. Two tabs same origin → no duplicate DB corruption; writes visible across tabs.
  3. Sync against local kora dev server → second browser profile or device converges.
  4. DevTools overlay (Ctrl+Shift+K) shows ops and sync timeline.
  5. 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 doctor linked from docs nav
  • Changelog entry for v0.6 highlights browser + sync production use

Optional stretch (post–v0.6)

  • Default sharedWorkerUrl in 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

bash
pnpm build
pnpm test:release-gate
pnpm test:e2e

Publish 0.6.0 (versions already bumped in package.json — do not run changeset version again):

bash
pnpm build
pnpm changeset publish --dry-run   # verify 16 packages
pnpm changeset publish             # requires npm login / NPM_TOKEN

Full 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

DateNote
2026-05-29Initial v0.6 public beta checklist