finds.dev← search

// the find

yjs/yjs

★ 22,015 · JavaScript · NOASSERTION · updated Jun 2026

Shared data types for building collaborative software

Yjs is a CRDT library that exposes conflict-free shared data structures (Array, Map, Text, XML) as regular JS types. It's the de facto standard for adding real-time collaboration to web apps — used in production by Linear, Evernote, JupyterLab, and dozens of others. If you're building anything with collaborative editing, this is the starting point, not an experiment.

The provider architecture is genuinely well-designed: you can stack a WebRTC provider for P2P sync on top of IndexedDB for local persistence on top of a WebSocket server, and they all merge correctly. The CRDT benchmarks show Yjs consistently outperforms Automerge on memory and CPU, which matters at scale. The ecosystem is mature — first-class bindings for ProseMirror, CodeMirror, Monaco, Lexical, Tiptap cover essentially every serious editor. The internal encoding is binary and compact; document state is not JSON bloat.

The document history grows forever by default — garbage collection is on, but you can't easily time-travel or do fine-grained version control without disabling GC, which has real memory cost at scale. There's no built-in access control: Yjs gives you eventual consistency but says nothing about who is allowed to make which changes, so authorization is entirely your problem to bolt on. The JavaScript-only core means server-side use in non-JS stacks requires y-crdt (Rust port) or ydotnet, which lag behind the JS implementation and have historically broken binary compatibility across versions. TypeScript types come from a separate global.d.ts rather than being generated from source, so they occasionally drift.

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 →