CRDT: Text Buffer

← Back to the algorithm list Published on May 19th, 2024

Collaboratively editing strings of text is a common desire in peer-to-peer applications. For example, a note-taking app might represent each document as a single collaboratively-edited string of text.

The algorithm presented here is one way to do this. It comes from a family of algorithms called CRDTs, which I will not describe here. It's similar to the approaches taken by popular collaborative text editing libraries such as Yjs and Automerge. Other articles have already been written about these similar approaches (see the references section below), but this article also has a nice interactive visualization of what goes on under the hood.

The algorithm:

This is not as expensive as it sounds because of three important optimizations:

Below is a demo of what this looks like in practice. Each quadrant represents a peer, and peers send messages to each other with a simulated network delay. Click on a peer's text to edit it. Temporarily disable the simulated network with the pause button to construct simultaneous editing scenarios. You can use your browser's "view source" feature to view the source code for this demo.

This technique has the following benefits and drawbacks:

Benefits:

Drawbacks:

References:

Here are some excellent resources on CRDT text buffers that I found helpful when implementing this algorithm: