I Shipped...

4 November 2025 (2PRs)

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.

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.

3 November 2025 (2PRs)

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.

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.

1 November 2025 (2PRs)

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.

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.

30 October 2025 (3PRs)

a new section for vanilla users

I added some detail to our existing docs showing how users who are not using a framework (‘vanilla’ users) can get started with Jazz.

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.

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.

29 October 2025 (1PR)

a fix for a bug in our types for loading options on CoFeeds

I identified a bug where TypeScript incorrectly required specific options to load a CoFeed. However, the underlying code functionality did not depend on these options. I modified the system to remove this unnecessary requirement, improving its usability.

24 October 2025 (1PR)

a new 'Testing' section for our docs

I wrote a new section for our docs explaining how to test Jazz apps using a variety of different helpers.

22 October 2025 (3PRs)

a fix to eliminate critical security vulnerabilities

A number of the packages we depend on have become outdated and have security vulnerabilities. I took care of updating these packages to their latest versions and fixed the issues caused by API changes (particularly for Better Auth).

add custom placeholders for Image components

Jazz is a framework for building collaborative apps. After a recent update, images in Jazz apps would briefly flash their alt text while loading instead of showing a placeholder, which looked jarring. I added the ability for developers to specify their own custom placeholder image (like a company logo or branded loading graphic) so their apps look polished while images load in.

grey out quickstarts for RN

Jazz is a framework for building collaborative apps, and its docs site lets you switch between different platforms. I greyed out the quickstart guides in the navigation menu when viewing React Native or Expo, since those quickstarts haven’t been written yet. This way, users aren’t misled into clicking links that lead nowhere.

21 October 2025 (1PR)

an update to our ImageDefinition docs which makes it more maintainable

Our previous ImageDefinition docs were spread over four files, representing a nightmare for maintainability. I consolidated them into a single file, merging all the content and code samples together to make it easier to avoid mistakes and reduce repetition.

20 October 2025 (1PR)

restructure the docs following the nav menu updates

After the Jazz docs site got a new navigation menu, the actual documentation pages were no longer in the right places. I reorganized all the docs to match the new menu structure, updated all the internal links, and set up redirects so that anyone with an old bookmarked URL gets sent to the right page automatically.

17 October 2025 (3PRs)

a new Not Found page

Our previous ‘not found’ page was not particularly useful or professional. The new ‘not found’ page includes a search widget to allow users to find whatever content it was they were looking for when they landed on the ‘not found’ page.

an update to our CLI tool to make sure that the correct llms-full.txt is fetched based on the user's framework

Currently, the create-jazz-app CLI tool fetches an llms-full.txt file which contains a summary of all the content contained in the docs, regardless of framework.

However, since my previous PR got merged, we’re generating framework-specific llms-full.txt files, which will be a) smaller and b) less confusing for LLMs, so now, only the appropriate llms-full.txt gets pulled.

an update to our create-jazz-app utility to ensure that only the appropriate llms-full.txt is fetched

Currently, the create-jazz-app CLI tool fetches an llms-full.txt file which contains a summary of all the content contained in the docs, regardless of framework.

However, since my previous PR got merged, we’re generating framework-specific llms-full.txt files, which will be a) smaller and b) less confusing for LLMs, so now, only the appropriate llms-full.txt gets pulled.

16 October 2025 (1PR)

enhancements to our llms.txt files

I continued developing our llms.txt files. There are three main components to this PR:\

  1. Now, if a user wants to access a markdown version of a particular docs page, they can simply append `.md` to the URL, and it will be served as markdown (this is in line with https://llmstxt.org/#proposal)
  2. Further, the content is now accessible on a framework-by-framework basis. This means that each page does not include irrelevant information relating to other frameworks.
  3. Finally, there are now framework specific llms-full.txt