I Shipped...

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 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.

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 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.

17 February 2026 (2PRs)

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.

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.

13 February 2026 (3PRs)

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.

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.

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.

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)

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.

an example for Clerk integration with Svelte

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

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.

19 January 2026 (1PR)

a quick fix to upgrade our Svelte versions

A vulnerability was discovered in Svelte. I upgraded our versions to ensure we were not exposed to risks.

16 January 2026 (2PRs)

add a 512px progressive image variant

Jazz is a framework for building collaborative apps. When you upload an image, Jazz automatically creates smaller versions of it so they load faster. The existing sizes jumped from 256px straight to 1024px, which meant medium-sized images (like in a sidebar or card) had to either load a tiny version or wait for a much larger one. I added a 512px in-between size so images load more smoothly in those situations.

fix expo placeholders

Jazz apps can show low-quality placeholder images while the full-resolution version loads. On Expo (a React Native framework for mobile apps), uploaded images had broken placeholders because the image data was missing a required prefix. I added the missing data: prefix so placeholder images display correctly on mobile.

15 January 2026 (1PR)

aPI Reference

Jazz is a framework for building collaborative apps. I wrote a new API reference page for the docs site that gives developers a clear, concise overview of the most important functions they need to work with Jazz’s core data structures, without overwhelming them with every possible option.