corrected docstrings for database operations
I fixed incorrect docstrings in the database module that described insert, update, and deleteFrom as synchronous when they’re actually async. Small fix, but wrong docs can mislead developers.
I fixed incorrect docstrings in the database module that described insert, update, and deleteFrom as synchronous when they’re actually async. Small fix, but wrong docs can mislead developers.
I added support for EXISTS (SELECT FROM ...) subqueries in the SQL policy expression parser, and fixed a bug where the outer row’s ID wasn’t being resolved correctly in policy conditions. This lets you write more expressive permission rules.
When running commands like git fetch inside the sandbox, they couldn’t talk to my running SSH agent because the relevant environment variables were being stripped out. That meant SSH would pop up and ask for my passphrase on the terminal, which garbled the Claude Code session I was working in. I added SSH_AUTH_SOCK and SSH_AGENT_PID to the list of variables that get passed through, so SSH “just works” inside the sandbox.
I fixed a bug where using .include() caused base columns to get corrupted when a subscription fired a second time. The reevaluation function was being passed the output tuple (which included extra joined columns) instead of the original base columns, causing data to shift around.
I fixed a bug where running a migration on multiple tables at once only generated the DROP COLUMN SQL for the first table, silently skipping the rest.
I replaced a hand-rolled binary spawn in the Svelte end-to-end test setup with the official startLocalJazzServer helper, giving each test run its own port. This made the tests more reliable and less prone to port conflicts.
I built Wequencer — a collaborative real-time music sequencer — as a new example app for Jazz. It’s built with Svelte 5 and Tone.js, and lets multiple users compose music together in real time.
I fixed an issue where query() and subscribe() weren’t applying permission policies because the session wasn’t being passed through. Now the client defaults to the JWT session resolved at construction time, so policies are always enforced.
The Jazz website has a showcase page listing apps built with Jazz. I added two new projects — Alkalye and Hifz Garden — and redesigned the layout from a vertical list to a 3-column card grid with randomised ordering on each load. I also added a “Submit your app” button so other developers can easily get their projects listed.
I added Svelte 5 bindings for jazz-tools, including a reactive QuerySubscription class, context helpers, a user-switcher component, and a hook for linking external identities. This lets Svelte developers use Jazz with idiomatic Svelte 5 rune-based reactivity.
I added support for floating-point columns in the database. The TypeScript side already allowed col.float() and generated the right SQL, but the Rust SQL parser was rejecting it with an “UnsupportedType” error.
I fixed a bug where using .include() on message queries caused the message text to come out garbled. The root cause was that an internal descriptor wasn’t being updated after array subqueries were compiled, so the data was being read from the wrong columns.
I replaced a hand-rolled singularize function with the pluralize-esm library. The old function only handled a few suffix patterns and got common English plurals wrong — for example, it was turning “canvases” into “Canvase” instead of “Canvas”.
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.
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.
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.
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.
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.
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.
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.