lattice logo

LATTICE

Package Version Hex Docs

Conflict-free replicated data types (CRDTs) for Gleam. Battle-tested with property-based tests, targeting both Erlang and JavaScript runtimes.

Installation

gleam add lattice_crdt

Quickstart

import lattice/g_counter

pub fn main() {
  // Create counters for two replicas
  let counter_a = g_counter.new() |> g_counter.increment("node-a", 1)
  let counter_b = g_counter.new() |> g_counter.increment("node-b", 3)

  // Merge replicas -- CRDTs converge automatically
  let merged = g_counter.merge(counter_a, counter_b)
  g_counter.value(merged)
  // -> 4
}

Available Types

Counters

ModuleDescription
lattice/g_counterGCounter – grow-only counter
lattice/pn_counterPNCounter – positive-negative counter

Registers

ModuleDescription
lattice/lww_registerLWWRegister – last-writer-wins register
lattice/mv_registerMVRegister – multi-value register

Sets

ModuleDescription
lattice/g_setGSet – grow-only set
lattice/two_p_setTwoPSet – two-phase set with add/remove-once
lattice/or_setORSet – observed-remove set

Maps

ModuleDescription
lattice/lww_mapLWWMap – last-writer-wins map
lattice/or_mapORMap – observed-remove map

Supporting

ModuleDescription
lattice/version_vectorVersionVector – logical clocks for causality tracking
lattice/dot_contextDotContext – causal context for OR-types

Features

Documentation

Full API documentation is available at https://hexdocs.pm/lattice_crdt.

License

MIT - see LICENSE for details.

Search Document