This Month in Automerge: July '26

In our ongoing attempts to keep everyone in the loop, we’re trying something new!

We’ve been doing community calls on and off for a while. These are moving to a quarterly cadence, and in between we’ll post written updates like this one more frequently. The community still hangs out in the Automerge Discord — come say hi!

Here’s what we’ve been up to over the past few weeks, broken down roughly by project:

Automerge

Core Package

Alex Good and others have been running a sustained correctness campaign across patches, diffs, and sync:

All of this shipped in Automerge v3.3.0 through v3.3.2, plus automerge 0.10.0 on crates.io for Rust users.

Document Anonymizer

We have a new document anonymizer tool (available from Rust, JS, and the CLI): if you have a document with a performance problem you can’t share because of its contents, you can now strip the contents while preserving the exact structure. Please anonymize and send us your pathological documents (in the Discord or an issue) so that we can add them to the test and bench suites!

Hexane

Hexane v1 has landed in Automerge. Hexane is the columnar storage engine that underpins Automerge, and this v1 is a major rewrite by Orion Henry with a much cleaner public interface and better performance. Depending on the benchmark, it runs around 2–9× faster. A few highlights from the benchmarks:

Benchmark v0 v1 Speedup
Get: u64, 10k values 291ns 80ns 3.6×
Save: delta, 100k 2.92ms 372µs 7.8×
Save: delta mono, 10k 310µs 33µs 9.3×
Load: string, 100k 4.01ms 1.44ms 2.8×
Splice: bool replace 651ns 152ns 4.3×
Iterate: bool, 100k 779µs 105µs 7.4×

The Automerge crate has been fully migrated to the new Hexane API, and follow-up work has already landed:

automerge-repo

A huge community thanks to Darcy Parker, who has been on a tear hardening automerge-repo for long-running sync servers: catching errors from malformed peer messages that could previously crash a Node process, bounding storage and sync fan-out with configurable concurrency limits, fixing adapter teardown leaks, and modernizing the whole toolchain (TypeScript 6, Vite 8, pnpm 11 with supply-chain controls). Thanks also to Simon Leblanc for the new injectable logging interface.

Much of this work is available now in the automerge-repo v2.6.0 alphas.

🗝️🐝 Keyhive

Keyhive is our work-in-progress access control layer for Automerge. It’s actually larger than that: it will work with any hash graph, including CRDTs. Here’s what we’ve been up to on the access control side:

John Mumm has been refactoring automerge-repo to support end-to-end encryption with Keyhive: blob interceptor delivery and application secret chain support, paving the way for Keyhive-encrypted documents in JS/TS apps. On the developer-experience side, John has also been making Keyhive-enabled apps easier to build: streamlining the Keyhive integration API, updating the Keyhive Todo MVC app demo as a worked example, and writing documentation for both.

Alex Good has also begun initial work adding author provenance to Automerge. Automerge will be able to tell you who wrote which commit, and combined with Keyhive this allows for revoking permissions, which has historically been a surprisingly thorny issue for CRDTs.

BeeKEM Paper

BeeKEM is the concurrent TreeKEM variant at the heart of Keyhive’s continuous group key agreement. It’s the bit that lets you share content with only who you want to and no one else, even if it’s intercepted.

We’re happy to announce that the BeeKEM paper is now available as a preprint on the Cryptology ePrint Archive: BeeKEM: Decentralized, Secure and Efficient Group Key Agreement. — The paper covers how it stays secure and efficient without a central server mediating group membership. It also covers some interesting underlying theory if you’re into decentralized communications. If you’ve been curious about how Keyhive’s encryption groups work under the hood, this is the place to start.

🏔️ Subduction

Brooke Zelenka has been hard at work making our new sync system — Subduction — both fast and boring to operate in production. The past few months, our focus on scale has been driven by requirements in Patchwork, in which users can load low thousands of Automerge documents at a time.

Improved Server Storage Backend

On the sync server, we were running out of inodes and running into issues with how ext4 pads out blocks, so we’ve switched to an actual database (novel, we know). After weighing several options, we landed on a new redb-backed storage backend with write batching. We also reworked the filesystem backend — split trees, lazy tree minimisation, and so on — for (much) better performance.

Performance & Observability

iroh v1.0 Support

A big thanks to Brendan O’Brien for upgrading the Subduction iroh sync transport to use iroh v1.0. We’re excited about the possibilities of iroh for peer-to-peer sync in addition to sync servers. Sadly iroh doesn’t support the browser well yet, but our early tests for desktop and mobile applications have been very promising.

Cloudflare Workers

We’ve seen a couple of teams put Subduction on Cloudflare Durable Objects. There are a couple of contributions to review to make this a reality, including one from Sunil Pai. This is very much an ongoing area of interest, but we wanted to note that it’s a thing on our minds in case you too want this in Durable Objects.

💎 Bijoux

A surprising amount of movement for a small dependency this month!

We’ve (very) recently consolidated our canonical varint formats into a single crate: bijoux. The “bijouX” family of varints are canonical-by-construction variable-length integers, which is a fancy way of saying “fast, hard to mess up, and space efficient numbers”.

We also needed signed integers, so we’ve designed and implemented variants for i32, i64, and i128. We were able to reuse most of the unsigned version by using a zigzag encoding before bijou-ing. We also explored two’s complement and a mirror encoding, but ultimately zigzag hit a sweet spot between speed, size, and unsurprising behavior.

If you’re curious about the original design and motivation, check out the Ink & Switch post about bijou64. In the crate’s benchmark shootout it’s the fastest decoder of the varint crates tested on every value distribution, by margins of roughly 2–4× over the next-best, with canonical decoding coming “for free”.

It’s already in use in Sedimentree, Subduction, and Hexane. We expect it to land in Keyhive shortly as part of our move away from Bincode to a bespoke encoding based on Subduction’s.

🌱 Around the Ecosystem

One of the best parts of this work is watching what people build with it. A few projects (from outside the core team) that caught our eye recently:

Backstitch: Collaboration for Game Dev

Backstitch enables fast collaboration for dev teams, game jams, and classrooms: real-time sync for Godot projects, with branching, merging, and reverting powered by Automerge. It’s local-first (changes and history live on your machine), works alongside Git, and lets you share a playable build of your game via URL. Backstitch is built by our friends at Ink & SwitchLilith Duncan, Nikita Zatkovich, and Paul Sonnentag — with support from the Endless Foundation.

Lilith gave a great talk about it at GodotCon 2026.

Braid: Issue Tracking for LLM Agents

Braid is an Automerge-centric issue tracker for LLM agents (and the humans they work with). A project’s issues live in a single Automerge document — a “skein” — so any number of agents across machines, branches, and worktrees can create, edit, and close issues in parallel. It’s been Automerge-native since its first commit, uses both the Rust and JS stacks, and recently grew its own standalone sync server.

Coln: A Data-Oriented Proof Assistant

Coln is a (heavily pre-alpha) data-oriented proof assistant that builds its storage layer directly on Hexane v1 and syncs over Subduction. One of the ways its authors describe it: “Automerge for acsets” (categorical databases — think relational data with precise mathematical semantics). We love seeing the internals reused in new domains!

Teamtype: Collaborate Across Editors

Teamtype (formerly Ethersync) continues to ship: real-time co-editing of local text files from any editor, with Automerge underneath. They recently picked up Automerge 0.10 and made the same jump to iroh v1.0 that Subduction did — within the same week, no less.

📬 Get in Touch

Are you building something with Automerge? We’d love to hear about it! Drop us a line in the Discord! Knowing how Automerge is being used in the wild helps us understand what the community would find most valuable.

If Automerge is important to your product or organization, consider sponsoring its development: reach out to the team at [email protected].


Until next time 👋

— The Automerge Core Team