I Shipped...

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 (3PRs)

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.

hotfix for homepage

I fixed a CSS bug on the Jazz homepage where unwanted scrollbars were appearing all over the page. A recently added style on buttons was causing content to overflow its containers, so I removed the problematic rule.

8 October 2025 (1PR)

a fix for ugly scrollbar display when using macOS trackpads

macOS defaults to using a weird overlay scroll bar when you’re using a trackpad, which meant that the scrollbars were rendering over content, which looked ugly and unprofessional. I fixed it.

7 October 2025 (2PRs)

fix build issues

The Jazz docs site had a build issue where two pages were trying to use the same URL path, causing conflicts. I resolved the conflicting routes so the site could build and deploy successfully again.

some extensive changes to our navigation menu

We were starting to outgrow our existing nav structure for docs, with tens of articles and only two hierarchical levels. I extended the hierarchy to allow a third level of nesting, as well as collapsible subheadings in the nav menu.

6 October 2025 (3PRs)

extend auth quickstart to demonstrate passkey auth

Jazz is a framework for building collaborative apps, and its docs site had a quickstart guide for authentication. I extended this guide to show how to add passkey login (the kind where you use your fingerprint or face to sign in) alongside other auth methods, so developers can see how to offer multiple ways for users to log in.

fixes for our end-to-end tests which were failing in CI due to incorrect imports caused by our test runners upgrading slowly to Node 22.19

We have some automated tests that run when we add new code to our repositories. For a while now, the end-to-end tests have been failing. I spent some time digging into the reasons for this, and fixed the tests so that they no longer fail when newer versions of Node are used to run the tests.

updates to the quickstart guide for authentication which illustrates how to add a recovery key using passphrase authentication

Jazz allows you to authenticate in many different ways. One way is using passkeys, and this was covered in the authentication quickstart guide I published last week. This adds an additional authentication method, passphrases, and shows how to use the two different authentication methods in conjunction to create an effective ‘recovery key’ option.

2 October 2025 (1PR)

an enhancement to our existing server-side rendering agent which allows it to be used outside of React

Our existing SSR agent was recommended for use to allow Server-Side Rendering in Next.js apps. However, I realised that the module itself is written in pure TypeScript, and there’s no good reason for it to be React-only. I modified the Svelte provider, changed the export, and updated the docs, as well as creating a small example app demonstrating how the SSR agent can be used to perform Server-Side Rendering in SvelteKit too.

30 September 2025 (3PRs)

an improvement for our existing CodeGroup component's copy function

We have a CodeGroup component which allows us to display some code with a copy button. This CodeGroup allows us to write special comments like // [!code --:1] to mark a line as ‘removed’. However, these were still being copied, resulting in inaccurate code snippets being copied when users clicked the button.

This PR removes those lines from the copied text.

an improvement to our docs, consolidating our various bits of copy for 'getting an API key' into a reusable component

I created a GetAPIKey snippet which can be re-used all over the docs to have a single, consistent message regarding API keys, and allow us to simplify updating and maintaining all these references.

The snippet can also optionally display how the API key can be used.

two quickstart guides, one for authentication and one for groups & permissions

Most of our users need basic features like authentication and collaboration in their apps, but the guides we have are currently very reference-y and not so much practical implementation guides.

I wrote one guide that covers permissions in Jazz using groups, and how to share data and collaborate on it, and a second which shows how to add passkey authentication into your app using the basic passkey UI.

This should make it easier for users to build an app with the kind of features a real-world app needs.

29 September 2025 (1PR)

a fix to our passkey implementation which increases the challenge length to 20 bytes

In principle, according to the WebAuthn spec, cryptographic challenges should be at least 16 bytes long, however in our existing implementation, we had 3 bytes. Although this is technically within spec, it was causing issues for some users using third party passkey managers such as KeePassXC.

This PR builds on previous work and extends the challenge length to 20 bytes.