I Shipped...

23 April 2026 (2PRs)

a fix to add jazz-wasm as a direct dependency to Vite-based starters

I added jazz-wasm as a direct dependency to six Vite-based starter templates. When using pnpm, packages only get hoisted to the top level if they're listed as direct dependencies, so without this change the starters would fail to resolve jazz-wasm at runtime.

a fix for a JazzProvider cleanup cycle caused by config object references

I fixed a bug where JazzProvider in React would tear down and recreate the Jazz client unnecessarily. The issue was that a config object in the useEffect dependency array was triggering cleanup on every render. I switched it to use a stable string key instead, which prevents the cycle.

22 April 2026 (7PRs)

Vite config hooks for worker format and optimizeDeps

I updated the Jazz Vite plugins to automatically inject worker.format: "es" and optimizeDeps.exclude: ["jazz-wasm"] via a config hook. This removes the need for developers to add these settings manually to their Vite config.

test failure guidance for AI agents in CLAUDE.md

I added instructions to the project's CLAUDE.md telling AI coding agents to investigate unexpected test failures rather than assuming they're pre-existing, and to never rewrite tests without asking the developer first.

real URLs for placeholder links in a blog post

I replaced two placeholder texts in the "What is Jazz?" blog post with proper markdown links — one pointing to the Discord community and one to the booking calendar.

assorted example app updates

I migrated several example apps (chat-react, moon-lander-react, wequencer) to use the new jazzPlugin() from jazz-tools/dev, switched wequencer to local-first auth, fixed a WebSocket proxy issue, and cleaned up permission configurations.

AGENTS.md files for Jazz starter templates

I added an AGENTS.md file to all nine starter templates, directing AI coding agents to fetch live Jazz documentation rather than relying on their training data. This helps agents give more accurate and up-to-date advice when working in Jazz projects.

a schema hash CLI command

I added a jazz-tools schema hash command that prints the short hash of your current schema.ts file locally, without hitting the server or writing a snapshot. Handy for checking if your local schema matches what's deployed.

a docs URL update in starter AGENTS.md files

I replaced the temporary jazz2-docs.vercel.app URLs with the permanent jazz.tools domain across all starter AGENTS.md files.

21 April 2026 (4PRs)

React SPA starter variants and create-jazz provisioning

I added three plain-Vite React starters alongside the existing Next.js/SvelteKit ones, and moved the Jazz Cloud provisioning step into the create-jazz CLI itself with a --hosting flag so you can set up hosting during scaffolding.

ephemeral storage fallback for Firefox private browsing

I added a fallback so Jazz apps work in Firefox private browsing mode. When the browser blocks access to the Origin Private File System (OPFS) with a SecurityError, the app now transparently falls back to in-memory storage instead of crashing.

deploy-time warnings for missing permission policies

I added schema validation warnings to jazz-tools deploy that flag tables without explicit permission policies. The warnings are informational only and don't block the deploy, but they help catch accidental permission gaps before they reach production.

an interactive app ID generation widget for the docs

I added an interactive widget to the quickstart docs that generates an app ID, admin secret, and backend secret from the hosted Jazz Cloud service. It automatically substitutes the generated values into the code examples on the page.

20 April 2026 (2PRs)

the create-jazz CLI scaffolder

I built an interactive CLI scaffolder so you can run npm create jazz to bootstrap a new project. It prompts for your framework choice and auth mode, then fetches the right starter template, resolves dependencies, and initialises git.

passphrase and passkey backup/restore UI for starters

I added an AuthBackup component to four local-first starter templates with recovery phrase and passkey backup/restore support. This gives users a way to recover their account if they lose their device.

18 April 2026 (2PRs)

experimental clock sync for clients with drifting system clocks

I added an optional feature that fixes a tricky timing problem. When a user's device clock is slightly wrong (drifting), it can cause data to be timestamped incorrectly. This feature uses the existing ping messages between the client and server to estimate how far off the clock is, and quietly corrects timestamps so they're accurate.

an alphaTab dependency update and Vite integration

I updated the alphaTab music notation library to its latest version and added a Vite-based sample project. alphaTab is a library for rendering and playing guitar tablature and sheet music in the browser.

17 April 2026 (3PRs)

pruned tests in the moon-lander example

I deleted 6 test files (about 2,450 lines) from the moon-lander-react example that weren't actually exercising Jazz's sync capabilities. I kept the 4 genuine cross-client sync tests that test what the example is really about.

a module type declaration fix for the jazz-wasm package

I added "type": "module" to the jazz-wasm package.json. Without it, running the CLI via npx or bunx would fail with an ERR_REQUIRE_CYCLE_MODULE error because Node.js was treating the ES module output as CommonJS.

a fix for worker URL resolution in bundlers

I switched from dynamic runtime URL resolution to a static new URL(...) pattern for the web worker bootstrap. This lets bundlers like Vite, webpack, and Next.js/Turbopack detect and co-bundle the worker and WASM files correctly.