I Shipped...

30 October 2025 (1PR)

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

15 October 2025 (1PR)

fix missing link to the BetterAuth Database Adapter doc

Jazz’s documentation site had a navigation link to the BetterAuth Database Adapter page that had accidentally been removed at some point. I added the link back so people can find that page from the sidebar again.

14 October 2025 (2PRs)

a new section for our docs offering performance tips for advanced users

I created a new section in our docs which covers advanced performance tips for the 20% of users who need to push harder on performance than the majority.

filter all the code snippets to show only the framework relevant snippets

Jazz supports multiple web frameworks like React, Svelte, and Vue. The docs used to show code examples for all frameworks at once, which was confusing. I updated the documentation build system so that when you select a framework, you only see code snippets relevant to that framework, keeping things clean and focused.

13 October 2025 (2PRs)

a new way to create invites to groups

So far, our users have been able to create invite links which target specific CoValues. But there’s no way to easily get the inviteSecret_ for processing however the user likes.

I created a couple of methods (Group.createInvite(groupId, role) and group.$jazz.createInvite(role) which allow you to manually get the secret, and process it how you like using Account.acceptInvite(). I also improved the API for acceptInvite so that if the invite is not specified, it’s assumed to be a group invitation.

an update to our CLI tool which adds more options

Our CLI tool allows you to get started quickly building with Jazz by running npx create-jazz-app. This update gives some more starter options to users running the CLI tool.

12 October 2025 (1PR)

updates to the way we generate our docs export for LLMs to consume

Previously, our LLMs text file was done simply by searching and replacing naively.

I introduced a step where our docs are rendered out as pure markdown before they are exported. This allows us to mock specific components so we can do things like render the tabbed code group component sensibly.

9 October 2025 (2PRs)

a fix to our homepage after an update caused overflow on basically every element, resulting in scrollbars appearing everywhere.

There was a PR which introduced a bug where buttons all had additional absolutely positioned content after them, which resulted in every section containing a button to horizontally overflow its container, resulting in unsightly scrollbars popping up all over the website. I fixed it.

an update to our CLI which makes sure that the latest docs are always fetched when a new project is initialised

We have a tool which allows you to run create-jazz-app with some options to get a new Jazz app set up. This tool was cloning a specific part of our monorepo where a static build of our docs had been copied. However, this had fallen out of date, and so we were wasting our users’ time, bandwidth, and worse, seeding their AI agents with incorrect, outdated data.

I introduced functionality to fetch the latest docs from our website to save for AIs to refer to.