I Shipped...

28 April 2026 (1PR)

deduplication of identical permissions bundle publishes

I added content-based deduplication to the permissions bundle publishing step. When you deploy without changing your schema's access rules, the system now detects that the new bundle is identical to the current one and skips creating a new version — preventing unnecessary version bumps.

27 April 2026 (7PRs)

support for getter functions in Svelte QuerySubscription

I updated Jazz's Svelte query API to accept getter functions — functions that return a query — in addition to plain query objects. This means reactive query updates now flow through automatically, matching what was already possible in the Vue integration.

fallback support for framework-prefixed environment variables in the Jazz CLI

I updated the Jazz command-line tool to recognise environment variables with framework-specific prefixes — like VITE_, NEXT_PUBLIC_, PUBLIC_, and EXPO_PUBLIC_. Previously, if you set your app ID using your framework's conventional prefix, the CLI wouldn't find it; now it checks all common prefixes automatically.

expanded scaffold test coverage to all self-hosted starters

I extended our automated tests to cover three starter templates that previously had no test coverage. The tests check that the scaffolding tool creates the right files and structure, so we can catch regressions before they reach developers.

a reorganisation of recipe docs and a new group permissions recipe

I reorganised Jazz's "recipes" (short how-to guides) into clearer sub-folders — access control, auth, and data patterns — so they're easier to find. I also added a new recipe showing how to configure group-level permissions for shared data.

a fix to wait for membership confirmation before enabling the chat composer

I fixed a race condition in the React chat example where the message input would become usable before the server had confirmed the user was a member of the chat room. I added a readiness check to prevent this, and wrote a Playwright end-to-end test to guard against it happening again.

a fix for the SvelteKit dev plugin failing to apply config on cold start

I fixed a bug where Jazz's SvelteKit plugin didn't apply its configuration correctly the very first time you started the dev server. The plugin now restarts Vite once after allocating the app ID, so SvelteKit's server hooks pick up the config properly.

a fix for startup and auth issues in several example apps

I fixed broken configuration and authentication in several of Jazz's example applications. The affected apps — including WorkOS auth, Better Auth, Next.js CSR/SSR, Cloudflare Workers, and managed runtime — had issues that stopped developers from using them as working references.

24 April 2026 (2PRs)

removal of stale JWT claims from starter templates

I removed leftover jazz_principal_id JWT claims from the starter templates. Jazz only reads the sub claim to identify users, so this extra claim wasn't doing anything — it was just confusing people who were reading the starter code and thinking it was important.

an expanded local-first auth docs section with internals reference

I restructured the auth documentation to be organized around mental models with framework-specific tabs. I also moved the more technical theory into a new internals reference page covering things like Ed25519 key derivation, JWT structure, and how provider upgrades are verified.

23 April 2026 (3PRs)

per-package progress on the create-jazz dependency spinner

I updated the create-jazz CLI spinner to show progress counts while it fetches GitHub dependencies, so you can see how far along it is instead of staring at a static spinner. I also cleaned up some console warnings that were corrupting the output.

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.