/crdt-examples

An example implementations of various CRDTs

Primary LanguageF#MIT LicenseMIT

CRDT Examples

This repository contains an example implementation of various CRDTs. It serves mainly academic purposes (the implementations are meant to be simple and easy to understand, not optimized). If you want help or want to actually use them on production please let me know ;)

List of CRDTs (implemented and to be implemented):

  1. Convergent (state-based):

    • Delta-based
      • Grow-only Counter
      • Positive/Negative Counter
      • Grow-only Set
      • Add Wins Observed Remove Set
      • Multi Value Register
      • YATA
    • Grow-only Counter
    • Positive/Negative Counter
    • Bounded Counter
    • Grow-only Set
    • 2 Phase Set
    • Add Wins Observed Removed Set
    • Last Write Wins Register
  2. Commutative (operation-based)

    • Pure-operation based:
      • protocol: Tagged Reliable Causal Broadcast
      • Counter
      • Observed Remove Set
    • protocol: Reliable Causal Broadcast
    • Counter
    • Last Write Wins Register
    • Multi Value Register
    • Observed Remove Set (add wins semantics)
    • Linear Sequence (L-Seq)
    • Replicated Growable Array (RGA)
    • Replicated Growable Array (blockwise variant)
    • JSON-like document

How to run

Requirements

  • Docker

Running

  1. Start Docker
  2. From inside the repo, run the following command
$ docker build -t crdt5 .
  1. Run the following command to start the container
$ docker run -it crdt5
  1. Inside the container, run the following command to run the tests
$ dotnet Crdt.Tests.dll --debug --sequenced