finds.dev← search

// the find

streamich/json-joy

★ 1,076 · TypeScript · NOASSERTION · updated Jun 2026

json-joy is a library that implements cutting-edge real-time and collaborative editing algorithms and utilities for JSON data models, with a focus on developing the JSON CRDT (Conflict-free Replicated Data Type) specification and implementation.

json-joy is a TypeScript monorepo implementing JSON CRDT from scratch — the spec, the binary codecs (CBOR, MessagePack, UBJSON), the editor integrations, and the transport layer. It's for developers building local-first or collaborative apps who want a single dependency tree rather than stitching together Yjs, a codec library, and editor bindings separately. The author clearly benchmarks obsessively and the performance claims are backed by actual benchmark files in the repo.

The list CRDT and text OT implementations are measurably fast — the packages/buffers/src/utf8/decodeUtf8/ directory has 19 numbered implementation variants, which tells you exactly how seriously performance was taken. Editor integration coverage is unusually complete: CodeMirror, Monaco, Ace, ProseMirror, Slate, and Quill all have first-party bindings, so you don't need to write glue code. The CRDT is fuzz-tested (documented in a dedicated blog post), which matters because naive CRDT implementations fail on adversarial input sequences. Owning the codecs means the wire format is efficient without depending on a separate MessagePack library.

The JSON CRDT spec is entirely home-grown and incompatible with Yjs or Automerge, so adopting it is a one-way door — your data model, wire format, and peer interop are all tied to this project and its 26-person contributor base. The monorepo sprawl is real: HTTP routers, JSON schema validation, radix trees, and base64 encoders are bundled alongside the CRDT, which means you're either taking the kitchen sink or carefully tree-shaking a repo that was designed as one unit. Documentation lives mostly on an external site (jsonjoy.com), which is fine until the site goes dark. The star-to-fork ratio (1076/26) suggests it's being consumed but not extended, which means community-discovered edge cases accumulate slowly.

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 →