Table of contents Introduction Yjs in the Wild License ❤️ 🚲 Getting Started A Collaborative Editor Awareness & Presence Offline Support Shared Types 🔥 Ecosystem Editor Bindings ProseMirror TipTap Monaco Quill CodeMirror Remirror Milkdown Slate Connection Provider y-websocket y-webrtc y-webxdc y-dat y-sweet Liveblocks Database Provider y-indexeddb y-leveldb y-redis Other y-protocols Ports to other languages 🔧 API Y.Doc Shared Types Y.Map Y.Array Y.Text Y.XmlFragment Y.XmlElement Y.XmlText Y.UndoManager Y.Event Delta Format Document Updates Y.RelativePosition Awareness Subdocuments Internals FAQ 🧪 Tutorials Meshing Providers Persisting the Document to a Central Database Indefinite Scaling with y-redis Lessons Learned Custom Provider 🌎 External Resources Talks, Podcasts, and Blogs About CRDTs CRDT Benchmarks Yjs Discussion Board Yjs Chat Kevin's Blog Awesome People ⭐