Code (Implementations)

General-purpose CRDT libraries

There are several open source CRDT libraries that can be used to build collaborative applications and replicated storage systems:

  • Automerge (extended abstract) is a JavaScript CRDT implementation with a JSON data model. Network communication is handled by a separate layer, such as Hypermerge (which uses Dat) or plain TCP connections.

  • GUN (GitHub) is a graph CRDT implemented in JavaScript, using WebRTC networking. It includes public-key-based user authentication and encryption.

  • kappa-db is a JavaScript library for building your own CRDTs over append-only log architectures, with a reference implementation for Dat’s Hypercore data structure. Sort of a ‘build-your-own’ Automerge library.

  • Replicated Object Notation (RON) is a data format for encoding CRDT operations, implemented in several languages. It supports register, list, text, set, and counter datatypes. SwarmDB is a RON-based database, implemented in JavaScript.

  • Yjs (paper 1, paper 2) is a modular framework for building collaborative applications on the web. It includes several common CRDTs and modules that integrate them with different editors, communication protocols, and databases. More information in this series of blog posts about Yjs.

  • Legion (GitHub, paper) provides a JavaScript implementation of counter, set, map, and list CRDTs, and a WebRTC-based networking layer.

  • Yorkie (GitHub) is a synchronization solution for building collaborative applications, using MongoDB for data storage.

  • The Akka actor framework includes implementations of several CRDTs.

  • Schism is a Clojure implementation of several CRDTs.

  • Erlang implementation of CRDTs from the Lasp system

  • Carlos Baquero’s C++ implementation of state-based CRDTs with delta mutations.

  • Eventuate is a toolkit for building applications using causally ordered event streams and CRDTs.

  • Logux (GitHub) is a state sync system built primarily for React/Redux in a client/server architecture, but can be used p2p and/or on its own.

  • Braid-HTTP (GitHub, IETF draft) is an effort to augment the HTTP protocol itself to include state synchronization as a primitive.

Benchmarks

  • crdt-benchmarks compares document size and performance of Yjs and Automerge.

Distributed databases

Several distributed databases also have built-in support for CRDTs:

Text editors

Several text editors use CRDTs:

Other applications

Several other applications and systems also use CRDTs internally:

  • Actual, a budgeting app, uses CRDTs to allow sync across multiple user devices.

  • Figma, a collaborative graphic design app, uses CRDTs (and occasionally a central server to simplify things) as well.

  • Pixelboard, a collaborative whiteboarding app, uses CRDTs to allow several people to draw at the same time.

  • TomTom GPS navigation systems use CRDTs to synchronise user data, such as favourite locations, across multiple devices.

  • Facebook’s OpenR routing platform internally uses CRDTs to manage its state.

  • Bet365, League of Legends, and PayPal have all reported using CRDTs internally.

  • Mapeo, a toolset mapping and monitoring human and environmental rights abuses uses CRDTs for syncronizing edits to maps.

  • Cobox, a collaborative data hosting platform uses CRDTs to syncronize edits to files on disk.

Automerge users

Several collaborative (multi-user, multi-device) applications have been built using the Automerge CRDT library:

Yjs users

Yjs is used by several apps that are run in production:

  • Nimbus Note is a note-taking app by Nimbus Web.

  • http://coronavirustechhandbook.com/ is a collaborative document that is edited by thousands of different people to work on a rapid and sophisticated response to the coronavirus outbreak and subsequent impacts.

  • Relm is a collaborative gameworld for teamwork and community.

  • JoeDocs is an open collaborative wiki.

  • Room.sh is a meeting application with integrated collaborative drawing, editing, and coding tools.

  • Pluxbox RadioManager is a web-based app to collaboratively organize radio broadcasts.

  • Cattaz is a wiki that can run custom applications in the wiki pages.