finds.dev← search

// the find

rust-crdt/rust-crdt

★ 1,542 · Rust · Apache-2.0 · updated Jun 2024

a collection of well-tested, serializable CRDTs for Rust

A Rust library implementing several CRDTs — GCounter, PNCounter, GSet, ORSet (ORSWOT), MVReg, LWWReg, Map, List, VClock — with both state-based (CvRDT) and op-based (CmRDT) replication. Targets developers building distributed systems in Rust who want off-the-shelf CRDT primitives rather than rolling their own. The causal context model is properly implemented, not bolted on.

The causal context API (ReadCtx → derive_add_ctx / derive_rm_ctx) is the right abstraction — it makes it structurally hard to issue operations without the correct causal history, which is where most CRDT implementations go wrong. Property-based testing with quickcheck is used throughout, and there's a serialization test vector file which means the serde round-trip is verified against real payloads, not just type-checks. The breadth of types is solid for a single crate: you get a CRDT Map and a List (glist/list) which are the genuinely hard ones to implement correctly.

Last push was June 2024 and it has 64 forks with 1.5k stars — the contribution velocity is low and the maintainer appears mostly absent. No async support or network layer is included, which is fine by itself, but there's also no example of how to wire this into an actual distributed system — the examples are all in-process toy demos. The List type has known complexity tradeoffs that aren't documented (interleaving behavior under concurrent insertions is a real problem in sequence CRDTs and the README doesn't address it). Actor ID type is generic but there's no guidance on what makes a safe actor ID in practice, which bites people who reuse IDs across restarts.

View on GitHub →

// 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 →