I Shipped...

26 February 2026 (1PR)

new apps to the Jazz showcase and redesigned the layout to a card grid

The Jazz website has a showcase page listing apps built with Jazz. I added two new projects — Alkalye and Hifz Garden — and redesigned the layout from a vertical list to a 3-column card grid with randomised ordering on each load. I also added a "Submit your app" button so other developers can easily get their projects listed.

25 February 2026 (1PR)

support for Real (float) column types

I added support for floating-point columns in the database. The TypeScript side already allowed col.float() and generated the right SQL, but the Rust SQL parser was rejecting it with an "UnsupportedType" error.

23 February 2026 (2PRs)

a fix for incorrect pluralization in the code generator

I replaced a hand-rolled singularize function with the pluralize-esm library. The old function only handled a few suffix patterns and got common English plurals wrong — for example, it was turning "canvases" into "Canvase" instead of "Canvas".

a fix for garbled query results when using include

I fixed a bug where using .include() on message queries caused the message text to come out garbled. The root cause was that an internal descriptor wasn't being updated after array subqueries were compiled, so the data was being read from the wrong columns.

22 February 2026 (1PR)

four bug fixes for my Chicken Dinner Timer app

I went back to my old Chicken Dinner Timer app and fixed a handful of small bugs I'd been meaning to sort out. I corrected an invalid input type, zero-padded the start time so the browser's time picker would actually bind to it, made the timeline entries sort by number instead of alphabetically, and fixed an addTime function that was ignoring the value it was given in favour of a stale closure variable.

19 February 2026 (3PRs)

a fix to clear the stored session ID when clearing user credentials in React Native

When a user logged out of a Jazz React Native app, their session ID was accidentally left behind in secure storage even though the rest of their credentials were removed. I fixed the logout function to also clean up the session ID, so there's no leftover authentication data after signing out.

a sync-before-navigate guard for SvelteKit SSR

When you changed data in a Jazz app and then navigated to a server-rendered page, the server could show stale information because the changes hadn't finished syncing yet. I added an optional navigation prop to the Svelte provider that automatically waits for pending syncs to complete before letting the page transition happen, so the server always has the latest data.

a React quick start guide

I wrote a quickstart guide for React developers getting started with Jazz. It consolidates the main topics into a single reference so new users can get up and running quickly.

17 February 2026 (2PRs)

a guard that makes `.create()` fail when the user has no write access to the owner group

If you tried to create content in a Jazz group where you only had read access, it would silently succeed locally but then all the data would quietly fail to sync. I made it throw a clear error right away instead, so you know immediately that you don't have permission rather than scratching your head over why your data isn't showing up.

contextual error hints when a CoValue can't load due to sync config

When a Jazz CoValue failed to load, you'd just get a vague "unavailable" error with no clue why. I added smarter error messages that tell you the actual reason -- for example, if your sync setting is set to "never" or "signedUp", the error now says so instead of leaving you guessing.

13 February 2026 (3PRs)

remove `@manuscripts/prosemirror-recreate-steps` and replace with local implementation

Jazz uses a rich text editor library called ProseMirror for collaborative editing. One of the packages it depended on had known security vulnerabilities and was no longer maintained. I replaced it with a much simpler, locally-written version that does just what Jazz actually needs, removing the security risk and the unnecessary bloat.

remove `await` from `create` calls in code examples

I fixed some code examples in the Jazz documentation that incorrectly used await when creating data objects. Creating these objects is actually instant (not asynchronous), so the examples were misleading developers about how the API works.

autogenerate BETTER_AUTH_SECRET

Jazz is a framework for building collaborative apps. One of the example projects in the Jazz repo needed a secret key stored in a config file, but that file isn't checked into source control for security reasons. This meant the project would fail to build for anyone cloning the repo fresh. I added a script that automatically generates the missing config file so builds just work out of the box.

11 February 2026 (1PR)

add a docs index to AGENTS.md

AGENTS.md is a file that helps AI coding assistants understand a project. I added a comprehensive index of Jazz's documentation to this file, so that AI tools like Claude and Cursor can more easily find and reference the right docs when helping developers. I also wrote a script that automatically regenerates this index whenever the docs are built, so it stays up to date.

7 February 2026 (1PR)

fix `toJSON()` serialisation for `co.record`

Jazz uses special data structures called CoRecords to store collaborative data. When you tried to convert a nested CoRecord to JSON (a common data format), the result was wrong because an internal mechanism was intercepting the conversion. I fixed the serialization logic so nested data structures convert to JSON correctly, and added tests to prevent this from breaking again.

30 January 2026 (1PR)

add some skills and reference material

Jazz is a framework for building collaborative apps. I added a set of "skills" -- reference documents that AI coding assistants like Claude and Cursor can use to write better Jazz code. These cover topics like performance optimization, permissions, UI integration, and testing, so that when you ask an AI to help you build a Jazz app, it has detailed, accurate guidance to draw on.

27 January 2026 (1PR)

enable dark mode support for minimal to-do list example

Jazz is a framework for building collaborative apps. The docs site has a minimal to-do list example on its landing page, but the icon was an external image that couldn't adapt to dark mode. I inlined the SVG so it can be styled with CSS, meaning it now automatically adjusts its colours when someone has dark mode enabled on their device.

23 January 2026 (2PRs)

an example for Clerk integration with Svelte

An example app which shows how to use Svelte with Clerk as an auth provider.

a guide on how to model data in a Jazz application

It's challenging sometimes to approach Jazz when coming from a background of other, more traditional DBMSs. I wrote a guide for folks to be able to more effectively plan their apps' data requirements.

20 January 2026 (1PR)

a link validation script for our docs pages

Our docs had some outdated links. I added a script to validate the links in our docs whenever the homepage is built, and fixed all the broken links.