I Shipped...

24 November 2025 (4PRs)

fix issue when code sample is formatted

The Jazz docs have code examples that hide certain lines to keep things simple. In the Svelte permissions guide, a "hide this line" marker was only hiding the first line of a multi-line block of code, leaving extra lines visible that shouldn't have been shown. I fixed the formatting so the right lines are hidden.

an update to the docs clarifying how to use React Native Fast Encoder

Expo and React Native do not ship a TextDecoder implementation. This docs update explains how to polyfill for (huge) performance improvements in native apps.

a refactoring of our useFramework hook

In our docs, we have a hook which fetches the current framework, however, there were other bits of code around the codebase which do similar things, and the hook was becoming unwieldy and difficult to follow.

I refactored the useFramework hook to make it easier to use, and improve the separation of concerns on the homepage docs.

a docs update regarding credential persistence on iOS

When a Jazz app is uninstalled, all data is deleted except the login credentials on iOS which are persisted to the keychain. This can cause issues if the account is not synced and the user reinstalls the app.

18 November 2025 (1PR)

fix #3186

Jazz's documentation had a missing asterisk in a role permissions table, which meant a footnote reference wasn't displaying correctly. I added the missing character to fix the formatting.

13 November 2025 (4PRs)

fix homepage build issues

The Jazz homepage stopped building after a recent change added a new dependency that made a previously-needed TypeScript workaround invalid. I removed the outdated workaround and added a proper type check, which got the homepage building and deploying again.

documentation for a pattern on how to create set-like collections

Users can create lists using Jazz, but there's no protection to stop users from inserting the same item multiple times into a CoList. For users wanting lists of unique items, I proposed and wrote up a pattern for using a CoRecord keyed on the CoValue ID.

an update to our React Native and Expo example apps, demonstrating how to use images

We have an example chat app for all our supported frameworks. For our browser-based frameworks, this chat allows also uploading images to the chat, but our mobile apps did not.

I added the image upload functionality to the mobile framework examples.

add .svelte-kit to ignored paths

Vercel's Workflow SDK helps you build long-running background tasks. SvelteKit (a web framework) generates a build folder called .svelte-kit that should be ignored by tools watching for file changes. I added it to the ignore list so the workflow SDK doesn't unnecessarily process those generated files.

11 November 2025 (1PR)

add Jazz Workflow World documentation

Jazz is a framework for building collaborative apps. "Workflow World" is a Jazz feature that lets you run backend tasks and workflows. I wrote the documentation for it, covering how to get started, how to set up webhooks, and how to self-host it.

10 November 2025 (1PR)

a PR to fix an infinite navigation loop on our docs

At some point, I introduced a regression that was causing our homepage docs to enter into a recursive navigation loop calling useEffect multiple times. This quick PR fixed it.

I was quite pleased with the PR title on this one: "...infinite recursion: a fix to prevent..."

7 November 2025 (1PR)

a huge docs update, removing twoslash in favour of extracted code snippets

Twoslash is a code-highlighting and type-checking plugin which helps to make sure all our code samples are kept up to date. Unfortunately though, it causes our build times to be very slow.

I extracted all of our code samples into separate files, and developed a new way of integrating them into our docs. This led to huge speed wins, bringing our build times down by around 5 minutes per build (on Vercel), roughly 14 hours of compute per month.

It also brought even more significant savings in terms of development. Where previously, it took me (M4 Macbook Pro) 110s to compile the docs in dev mode, now it takes 7s, a speed increase of 15×, making it much easier to develop our homepage and our docs overall.

4 November 2025 (2PRs)

move codecs under schema and republish link

The Jazz documentation had a page about codecs (tools for converting data between formats) that had become unlinked and unreachable from the navigation menu. I moved it under the "Schemas" section where it logically belongs and re-added the link so people can find it again.

a note in our docs warning of the risk of XSS attacks

Currently, Jazz stores secrets in localStorage. This is accessible by client-side JavaScript, and so any untrusted code running in a developers' app could allow the secret to be extracted. Although this is a required trade-off in order to avoid re-authenticating every single session, users are now warned about the risk of cross-site scripting, and advised to take steps to prevent it.

3 November 2025 (2PRs)

export SingleCoFeedEntry

Jazz is a framework for building collaborative apps. It has various data types that developers use to build features, but one of them -- SingleCoFeedEntry -- wasn't being made available for outside use even though similar types were. I exported it so developers can actually use it in their own code.

an update to our docs clarifying that Jazz deduplicates loads under the hood

Jazz intelligently de-duplicates loads, meaning that each part of an application can load exactly what data it needs without worrying about what is loaded elsewhere in the app. The user will not pay a performance hit because only the extra data which is not already loaded will be fetched, and the existing loaded data will not be reloaded.

1 November 2025 (2PRs)

git_ui: Give visual feedback when an operation is pending

Zed is a high-performance code editor. When you made a Git commit from within Zed's built-in Git panel, there was no visual indication that anything was happening if it took a moment. Users would sometimes click the button repeatedly, thinking it hadn't worked. I changed the button text to appear dimmed while a commit is in progress, so you can tell it's working.

an enhancement to the 'commit' button

I was getting annoyed with Zed not showing any feedback when I tried to commit changes using Cmd+Enter. I made the button appear greyed out when there's a commit operation pending.

30 October 2025 (2PRs)

an extension to our Cryptography docs and FAQ clarifying our understanding of the legal status of Jazz's encryption algorithms

In Jazz, we use three main cryptographic algorithms: XSalsa20 for encrypting data, BLAKE3, for calculating a rolling hash of appended operations, and Ed25519 for signing the hashes. These are all published and available for anyone to use.

When uploading an app to the Apple App Store, users have to make declarations about whether their app uses standard encryption or not as part of legal requirements around 'exporting' cryptography in the US. This section is intended to provide information for Jazz's users to make informed decisions when responding to these questions.

an additional section to our performance docs documenting batching as a strategy to improve performance

In our Performance Tips section, I added a section telling users that if they're adding a lot of values, they can improve performance by inserting them simultaneously in a single call, rather than iterating and inserting each one separately.