Yjs

Decentralized Data Protocol

A high-performance CRDT framework for building collaborative applications, providing shared data types — Y.Map, Y.Array, Y.Text, Y.XmlFragment — that merge concurrent changes automatically. Its distinguishing strengths are speed and ecosystem breadth: bindings exist for most major rich-text and code editors (ProseMirror, TipTap, Quill, CodeMirror, Monaco, Slate), and provider modules supply sync over WebSocket, WebRTC, IndexedDB and other channels. y-protocols defines the awareness and sync message formats. Yjs is the most widely deployed CRDT library in production collaborative software, and underpins several applications in this file.

Comunidade

Detalhes

Licença Permissive (MIT) — https://github.com/yjs/yjs; y-protocols and the provider/binding ecosystem also MIT
Status de Dev 🟢 Ativo
Proprietário Kevin Jahns — independent open-source developer and sole principal maintainer; the yjs GitHub organization hosts the core library and the provider and binding ecosystem
Órgão de Governança None (single principal maintainer, Kevin Jahns; no foundation or governing body. Recent v14 work funded by ZenDiS and DINUM as funders, not governors)
País Germany (maintainer based in Germany)
Ano de Início 2015
Stack JavaScript/TypeScript core with a highly optimised binary encoding; Yrs is a Rust port maintained separately, used where native performance or non-JS embedding is needed
Financiamento Independent open source with project-specific public funding — recent versioning and track-changes work funded via the BlockNote collaboration by ZenDiS (OpenDesk) and DINUM (La Suite Docs); otherwise sponsorship and consulting
Última Investigação 1 de jul. de 2026

Domínios de Caso de Uso

Decentralized Data Protocol Atributos

Origins Collaborative text editing — built to make real-time collaborative editing practical in the browser without operational transformation's server-coordination requirement, then generalised into a broad shared-data-type framework
Database N/A as a store — Yjs is an in-memory CRDT with pluggable persistence; y-indexeddb, y-leveldb and similar providers supply storage
Query Language N/A — shared types are accessed as native JavaScript objects; no query language
Data Formats Highly optimised binary update encoding (document state and incremental updates); y-protocols defines the sync and awareness message formats; shared types Y.Map, Y.Array, Y.Text, Y.XmlFragment and Y.XmlElement
Collaborative Live Editing Collaborative real-time editing (CRDTs) — the library's primary purpose, with an awareness protocol carrying ephemeral presence state such as cursors and selections alongside document updates
Rich Text Editing Rich text editing — Y.Text and Y.XmlFragment support formatted content, with official and community bindings for ProseMirror, TipTap, Quill, Slate, CodeMirror and Monaco; v14 adds versioning and track changes
Mobile Support Library-level — runs in mobile browsers and React Native; Yrs enables native mobile embedding
Web Support Yes — the browser is Yjs's primary environment and the source of most of its adoption
Native Apps Library-level — via Yrs (Rust) for native embedding, or Electron and similar for JS applications
Terms Free / open source (MIT), described by the project as free forever. No hosted service is required; sync providers may be self-hosted
Funds Unknown — no consolidated figures published; funding is per-engagement rather than a raised total
Based On YATA (Yet Another Transformation Approach) — the sequence CRDT algorithm underlying Yjs, published by Kevin Jahns; original work rather than a derivative implementation. y-protocols layers sync and awareness on top
P2P Architecture Transport-agnostic, provider-based — Yjs itself defines only the merge semantics and update encoding; connectivity comes from separate provider modules supporting WebSocket (client-server or relay), WebRTC (direct peer-to-peer), and BroadcastChannel (same-device tabs). Peers converge regardless of topology
Overlay Network Store-wide — sync is scoped to a document shared between connected peers or through a room on a provider; no global network exists
Content Addressing No — documents are identified by document ID with changes referenced by hash internally, not addressed by content hash externally
Local-First Local-First — full offline editing against a local replica with automatic convergence on reconnection, provided a persistence provider such as y-indexeddb is used
E2EE Provider-dependent — Yjs does not encrypt documents itself; some providers (notably y-webrtc) support encrypting updates with a shared room key, but confidentiality is not a property of the core library
CRDTs Lib Yjs — this entry is the library. JavaScript/TypeScript core, with Yrs as the Rust port
Byzantine Fault Tolerance No — CRDT merge is designed for cooperating peers; a malicious peer can inject arbitrary valid-looking changes. Authentication and authorization are left to the surrounding system
Signature N/A — updates are not signed by the library; authenticity is the embedding application's responsibility
Permissions N/A — no access-control model in the core; any peer with document access can modify it. Authorization is enforced by the provider or surrounding application
Semantic Web Compatibility N/A — custom binary/document model with no RDF, JSON-LD or SPARQL layer
Smart Contract N/A — no ledger or contract component
Protocol Stack Position Application-layer (built on TCP/IP) — transport-agnostic; sync runs over WebSocket, WebRTC, BroadcastChannel or any duplex channel
Asset / Value Embedding None — no token or value-transfer mechanism
Protocol Maturity / Standardization De facto standard, implementation-defined — extremely widely deployed and the update encoding is stable and interoperable across the ecosystem, but the normative definition remains the JavaScript implementation plus y-protocols rather than an independent specification document. Yrs demonstrates the encoding is reimplementable, though it was written by porting rather than from a spec. No standards-body involvement