I Shipped...

11 March 2026 (4PRs)

reorganised docs to split deployment configuration from server setup

The Jazz server-side documentation was mixing two different concerns: how to set up your server code, and how to deploy it to different environments. I split these into separate pages — the setup guide now focuses on the runtime basics, and a new deployment page covers topics like WASM edge runtimes and multi-region patterns.

an MCP server that lets AI assistants search the Jazz docs

I built a Model Context Protocol (MCP) server for Jazz that exposes the documentation as searchable tools. AI assistants like Claude can now call search_docs, get_doc, and list_pages to look up accurate, up-to-date Jazz documentation rather than relying on their training data. It uses SQLite full-text search when available, with a keyword search fallback for older environments.

AGENTS.md and skill files into newly scaffolded Jazz projects

When you create a new Jazz app with create-jazz-app, it now includes an AGENTS.md file and a .skills/ directory out of the box. These files give AI coding assistants like Claude a head start by pointing them to Jazz's documentation and APIs, so they can help you build without hallucinating outdated patterns.

a type import fix in the Svelte quickstart example

The Svelte quickstart example was importing SyncConfig as a regular value import, but it's only ever used as a TypeScript type annotation. I changed it to import type, which is the correct approach for type-only imports and avoids any unnecessary runtime overhead.

9 March 2026 (1PR)

a typo fix in the Tiptap Svelte installation guide

Small but satisfying: I spotted a one-character typo in the Svelte installation instructions on the Tiptap docs site and sent in a fix.

7 March 2026 (3PRs)

options object support for Svelte QuerySubscription

I updated the Svelte QuerySubscription to accept an options object as its second argument instead of just a bare string. This brings it in line with the React API and makes it easier to pass configuration like the durability tier setting.

guides, quickstarts, and framework patterns for the docs

I added a new guides section to the Jazz docs with quickstart guides for Vue and TypeScript, framework patterns with React/Vue/Svelte tabs, binary data handling, and a WHERE operator reference.

a compatibility fix for better-auth 1.5.3 in jazz-tools

The better-auth library released v1.5.3, which moved where certain functions live inside the package. Jazz was importing createAuthMiddleware from better-auth/plugins, but that location was removed in the newer version. I updated the import to use better-auth/api instead, which works across versions and keeps the integration working.

5 March 2026 (5PRs)

EXISTS subquery support in policy expressions

I added support for EXISTS (SELECT FROM ...) subqueries in the SQL policy expression parser, and fixed a bug where the outer row's ID wasn't being resolved correctly in policy conditions. This lets you write more expressive permission rules.

corrected docstrings for database operations

I fixed incorrect docstrings in the database module that described insert, update, and deleteFrom as synchronous when they're actually async. Small fix, but wrong docs can mislead developers.

a fix for empty query results from anonymous clients

I fixed a bug where demo and anonymous clients always got empty query results. They were sending no session in their subscription payloads, and a previous change had made the server require a session for policy evaluation. Now the server falls back to the session it established during the connection handshake.

a fix for a callback race condition in subscriptions

I fixed a race condition where the subscription callback could fire before the internal tracking map was ready. The synchronous immediate_tick() call was triggering the callback before the sender could be inserted into the shared subscription map.

a built-in MCP docs server for jazz-tools

I built an MCP server into jazz-tools that exposes Jazz documentation as searchable tools for AI assistants. You can run it with npx jazz-tools mcp and it gives AI coding assistants direct access to the Jazz docs.

3 March 2026 (1PR)

a fix to pass SSH agent variables through to the sandbox

When running commands like git fetch inside the sandbox, they couldn't talk to my running SSH agent because the relevant environment variables were being stripped out. That meant SSH would pop up and ask for my passphrase on the terminal, which garbled the Claude Code session I was working in. I added SSH_AUTH_SOCK and SSH_AGENT_PID to the list of variables that get passed through, so SSH "just works" inside the sandbox.

2 March 2026 (4PRs)

Wequencer, a collaborative real-time music sequencer example

I built Wequencer — a collaborative real-time music sequencer — as a new example app for Jazz. It's built with Svelte 5 and Tone.js, and lets multiple users compose music together in real time.

reliable end-to-end test setup for Svelte

I replaced a hand-rolled binary spawn in the Svelte end-to-end test setup with the official startLocalJazzServer helper, giving each test run its own port. This made the tests more reliable and less prone to port conflicts.

a fix for DROP COLUMN generation in multi-table migrations

I fixed a bug where running a migration on multiple tables at once only generated the DROP COLUMN SQL for the first table, silently skipping the rest.

a fix for corrupted columns on subscription updates

I fixed a bug where using .include() caused base columns to get corrupted when a subscription fired a second time. The reevaluation function was being passed the output tuple (which included extra joined columns) instead of the original base columns, causing data to shift around.

27 February 2026 (1PR)

a fix for missing policy enforcement in queries

I fixed an issue where query() and subscribe() weren't applying permission policies because the session wasn't being passed through. Now the client defaults to the JWT session resolved at construction time, so policies are always enforced.

26 February 2026 (1PR)

Svelte 5 bindings for jazz-tools

I added Svelte 5 bindings for jazz-tools, including a reactive QuerySubscription class, context helpers, a user-switcher component, and a hook for linking external identities. This lets Svelte developers use Jazz with idiomatic Svelte 5 rune-based reactivity.