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

README.md

DeltaCrdt

Hex pm CircleCI badge

DeltaCrdt implements some Delta CRDTs in Elixir. There is an introductory blog post and the official documentation on hexdocs.pm 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:

Usage

Documentation can be found on hexdocs.pm.

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
DeltaCrdt.read(crdt1)
%{}

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

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

Installation

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"}
  ]
end