Conflict-free Replicated Data Type

Getting Started

Marc Shapiro

See this talk on YouTube by Marc Shapiro for an excellent introduction on what CRDTs are and how they work.




See TodoP2P for example projects using some of these libraries.

  • Clojure
    • replikativ (Bliki)
      • replikativ is a library that offers many CRDTs including LWWR, G-Set, OR-Map, and CDVCS (an append-only graph)
      • Uses WebSockets as wire
  • Erlang
    • CouchDB
      • CouchDB uses a Merkle DAG like hyperlog and Git
  • JavaScript
    • hyperlog (Bliki)
      • hyperlog is a CRDT because two append-only Merkle DAGs can inherently be merged in either order. In other words, the internal replication updates among hyperlogs are commutative.
      • Uses Node.js streams as wire
    • Scuttlebot (Bliki)
      • Scuttlebot is a CRDT because a) writes to concurrent streams do not conflict with each other and b) conflicts within streams are handled using (as far as I know) last-write-wins semantics using the message‚Äôs locally-recorded timestamp.
    • PouchDB
      • A client for CouchDB in JavaScript.
      • Decentralized, not distributed: PouchDB relies on an external CouchDB server to talk to other peers.
      • Uses HTTP as wire