Use DeltaCrdt to build distributed applications in Elixir
Switch branches/tags
Clone or download
Latest commit a7af258 Dec 10, 2018


Hex pm CircleCI badge

DeltaCrdt implements some Delta CRDTs in Elixir. There is an introductory blog post and the official documentation on is also very good.

CRDTs currently offered include:

  • Add Wins Last Write Wins Map
  • Add Wins Set

Please open an issue or a pull request if you'd like to see any additional Delta CRDTs included.

The following papers have used to implement this library:


Documentation can be found on

Here's a short example to illustrate adding an entry to a map:

# start 2 Delta CRDTs
{:ok, crdt1} = DeltaCrdt.start_link(DeltaCrdt.AWLWWMap)
{:ok, crdt2} = DeltaCrdt.start_link(DeltaCrdt.AWLWWMap)

# make them aware of each other
DeltaCrdt.add_neighbours(crdt1, [crdt2])

# show the initial value

# add a key/value in crdt1
DeltaCrdt.mutate(crdt1, :add, ["CRDT", "is magic!"])

# read it after it has been replicated to crdt2
%{"CRDT" => "is magic!"}


The package can be installed by adding delta_crdt to your list of dependencies in mix.exs:

def deps do
    {:delta_crdt, "~> 0.3.1"}