finds.dev← search

// the find

loro-dev/loro

★ 5,718 · Rust · MIT · updated Jun 2026

Make your JSON data collaborative and version-controlled with CRDTs

Loro is a Rust CRDT library for building local-first collaborative apps — think Figma or Notion's sync layer, but one you own. It handles the hard parts: text editing with Fugue, movable trees, movable lists, and a full operation log that enables time travel and version control. Targets Rust, JS (WASM), and Swift.

The movable tree CRDT is genuinely hard to get right — concurrent node moves can create cycles — and they've shipped a working implementation with dedicated fuzz coverage to back it up. The Eg-walker algorithm adaptation from diamond-types means they're not storing one operation per character like naive CRDTs; the oplog is columnar-encoded and the space/compute tradeoff is actually thought through. Shallow snapshots work like git shallow clone, which is a practical necessity for long-lived documents nobody wanted to solve. The fuzz infrastructure is extensive — a dozen distinct fuzz targets across containers — and the crash repro files in the test suite show they're actually using it rather than just checking a box.

The JS API requires you to work with typed container handles (LoroList, LoroMap) instead of proxying plain JS objects, so you can't gradually adopt it into an existing data model without a rewrite of how you think about state. The custom kv-store with SSTable is interesting but it's essentially unmaintained infrastructure you now own if something goes wrong at that layer. The 'version control with real-time collaboration' feature in 1.0 is compelling in the demo but the blog is vague on conflict semantics when branches diverge significantly — the hard part isn't the data structure, it's what the merge UI tells users. No Go bindings.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →