The browser host now stores data through yaak-models compiled to wasm — the
same queries, migrations, cascade rules, duplicate naming and first-run
bootstrap the desktop and CLI use — instead of a TypeScript port of them.
- crates/yaak-web: the wasm crate. boot() registers an IndexedDB-backed VFS
and calls init_standalone; rpc(cmd, payload, label) answers the models_*
commands via ClientDb and returns the model_writes it caused; blob get/put
through blob_manager. Built like yaak-templates (pkg/ committed); the
build script keeps pkg/ and says so when no wasm-capable clang is present,
so a desktop bootstrap never depends on one.
- models_ops moves from crates/yaak into yaak-models so the wasm crate can
use it without the send engine.
- The database lives in a SharedWorker (packages/platform/src/web/worker.ts):
one process holds the data and pushes writes to every tab, as on the
desktop. Where SharedWorker is missing or its script cannot be fetched, a
dedicated worker guarded by a Web Lock takes over and a second tab is told
so. The worker imports the wasm lazily so a tab's connect is answered
instantly; the tab reconnects if it isn't.
- packages/platform/src/web loses models.ts, schema.ts, db.ts and the
BroadcastChannel; commands.ts forwards model commands to the worker and
keeps the fixed answers and refusals.
Verified in Chrome, dev and production builds: bootstrap, CRUD across every
model type, serde defaults, engine-format ids, Rust copy naming, folder
cascade with per-descendant events, single-event workspace delete, reload
persistence, two tabs coherent, Send declined with a toast, 8/8 reloads
rendering in ~100 ms.
Add .oxfmtignore to skip generated bindings and wasm-pack output.
Add npm format script, update DEVELOPMENT.md for Vite+ toolchain,
and format all non-generated files with oxfmt.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On macOS Tahoe (26+), the default title bar is 32px with 14px buttons,
so the old formula (button_height + PAD_Y = 14 + 18 = 32) produced no
change. Add TITLEBAR_EXTRA_HEIGHT to push the title bar taller than
the Tahoe default. Use OnceLock to capture the original default height
so repeated calls don't accumulate extra pixels.
Also update CI runners to macos-26 for Tahoe SDK builds and adjust
frontend padding for larger stoplights.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>