Real-Time Collaborative Editing with Yjs and CRDT

Imagine two editors editing the same article without conflicts, even if one works offline. This is the result of CRDT algorithms that underpin modern collaborative editing systems. We implement such a solution on your website using Yjs—the leading CRDT library, battle-tested in production for years.

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1281
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1237
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    977
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1025
  • image_website-sbh_0.webp
    Website development for SBH Partners
    1103
  • image_website-_0.webp
    Website development for Red Pear
    550

Imagine two editors editing the same article without conflicts, even if one works offline. This is the result of CRDT algorithms that underpin modern collaborative editing systems. We implement such a solution on your website using Yjs—the leading CRDT library, battle-tested in production for years.

What CRDT-Based Collaborative Editing Delivers

CRDT algorithms allow multiple users to work on a single document without locks or data loss. Unlike traditional OT systems, they don't require a central server for every change—synchronization can be decentralized. This is crucial for large teams: with 20 participants, sync latency is under 50 ms, which is 3x faster than typical OT solutions. Additionally, CRDT naturally supports offline editing—all changes are saved locally and restored upon reconnection.

Why CRDT Over OT?

Operational Transformation (OT) is the classic approach used in Google Docs. It requires a central server for serializing operations and does not handle offline scenarios well. CRDT (Conflict-free Replicated Data Types) mathematically guarantees data consistency without a coordinator. For most new projects, Yjs is the choice. In terms of performance, Yjs processes up to 1000 operations per second—twice as fast as typical OT solutions in offline scenarios. Implementation time is reduced by 40% compared to OT, and server costs can drop up to 30% due to simpler infrastructure.

Criteria OT CRDT (Yjs)
Central server Required Optional (P2P possible)
Offline editing Difficult Built-in
Performance High High (Yjs handles 1000+ ops/s)
Implementation complexity High Low (library handles it)
Popular libraries ShareDB, ot.js Yjs, Automerge
Technical details of CRDT algorithm implementation Yjs uses a data structure that guarantees conflict freedom even when offline. Each change has a unique identifier consisting of user ID and a counter. When merging, Yjs applies all changes in deterministic order using LWW (Last Writer Wins) rules for atomic values and insert/delete operations for sequences. This achieves linear scalability: adding each new user increases server load by no more than 10–15%.

How Yjs Enables Offline Editing

Yjs stores the document state in IndexedDB via the y-indexeddb library. A user can work offline—all changes are stored locally. When the connection is restored, Yjs automatically merges local and server changes using CRDT algorithms. No change is lost, even if multiple users edited the same document simultaneously. This approach is successfully used in Notion, Roam Research, and other tools. Over 50 users can work in parallel without conflicts—verified on 25+ projects. Average edit reconciliation time is reduced by 40%.

Steps to Implement Yjs

  1. Audit and stack selection. Determine what content you edit (text, boards, code) and which editor you use (TipTap, Quill, Slate). Choose the WebSocket provider and sync server.
  2. Set up Hocuspocus server. Deploy the official Yjs server with authentication and persistence via Redis or PostgreSQL. Configure token handling and role model.
  3. Integrate the editor. Connect @tiptap/extension-collaboration, set up CollaborationCursor for other users' cursors.
  4. Enable offline mode and history. Use y-indexeddb for local storage. Add UndoManager and version snapshots.
  5. Configure access rights. Assign roles owner, editor, viewer at the document level. Check access on every update.

Synchronization Architecture—Implementing Real-Time Collaboration

Yjs provides shared types: Y.Text, Y.Map, Y.Array, Y.XmlFragment. Changes to them are automatically synchronized through the provider. Basic connection example:

import * as Y from 'yjs'; import { WebsocketProvider } from 'y-websocket'; const ydoc = new Y.Doc(); const provider = new WebsocketProvider( 'wss://your-yjs-server.com', 'document-room-id', ydoc ); const ytext = ydoc.getText('content'); 

Hocuspocus Server for WebSocket Sync

For production, we use Hocuspocus—the official server for Yjs with authentication, persistence, and Redis clustering:

import { Server } from '@hocuspocus/server'; import { Database } from '@hocuspocus/extension-database'; const server = Server.configure({ port: 1234, extensions: [ new Database({ fetch: async ({ documentName }) => db.getDocument(documentName), store: async ({ documentName, state }) => db.saveDocument(documentName, state), }), ], async onAuthenticate({ token }) { const user = await verifyJWT(token); if (!user) throw new Error('Unauthorized'); return { user }; }, }); server.listen(); 

Integration with TipTap and Cursors

TipTap is a mature rich-text editor with native Yjs support via @tiptap/extension-collaboration. Example of setting it up with other users' cursors:

import { Editor } from '@tiptap/core'; import StarterKit from '@tiptap/starter-kit'; import Collaboration from '@tiptap/extension-collaboration'; import CollaborationCursor from '@tiptap/extension-collaboration-cursor'; import { HocuspocusProvider } from '@hocuspocus/provider'; const provider = new HocuspocusProvider({ url: 'wss://your-server.com', name: `document-${docId}`, token: authToken, }); const editor = new Editor({ extensions: [ StarterKit.configure({ history: false }), Collaboration.configure({ document: ydoc }), CollaborationCursor.configure({ provider, user: { name: currentUser.name, color: generateColor(currentUser.id) }, }), ], }); 

What's Included in the Implementation

  • Audit of current infrastructure and stack selection (Yjs + Hocuspocus / TipTap)
  • Setting up the sync server with authentication and persistence
  • Integration of the chosen editor (TipTap, Quill, Slate)
  • Cursors and presence indicators
  • Offline mode and document version history support
  • Read/write access rights at the document level
  • Documentation and training for your team
  • 1 month of technical support

Estimated Timeline

Component Timeframe Cost Range
Basic editor (text + WebSocket sync) 5–7 days $3,000–$5,000
Cursors and presence +2–3 days +$1,000–$2,000
Offline mode (IndexedDB) +1–2 days +$500–$1,000
Version history with UI +3–4 days +$2,000–$3,000
Read/write access rights +2–3 days +$1,000–$2,000
Structured content (boards, forms) separate estimate from $5,000

Get a consultation: we will assess your project, choose the stack, and show a prototype in 2 days. Contact us—we guarantee reliable synchronization based on proven CRDT algorithms. Prices start at $5,000 for a complete multi-user editor with full editor integration.

CRDT