Files
skills/plugins/document-navigator/docs/foundation/flow/crdt/README.md
2026-06-09 21:06:27 +01:00

12 KiB

@suaveplan/crdt - Conflict-free replicated data types: G-Counter, PN-Counter, OR-Set, LWW-Register, MV-Register, 2P-Set, RGA, Vector Clock, and Sync Manager

Summary

Conflict-free Replicated Data Types (CRDTs) for distributed systems. Provides eight composable CRDT primitives plus a vector-clock and a sync manager that coordinate delta exchange across heterogeneous replicas.

Documentation tree

- [sync-manager](./src/core/sync-manager/sync-manager.md) — _(no submodules)_- [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_- [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_- [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_- [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_- [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_- [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_- [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_- [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_- [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_- [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_- [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_- [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_- [rga](./src/crdts/rga/rga.md) — _(no submodules)_- [rga](./src/crdts/rga/rga.md) — _(no submodules)_- [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_- [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_- [errors](./src/errors/crdt-error.md) — _(no submodules)_- [crdt-error](./src/errors/crdt-error.md) — _(no submodules)_- [sync-manager](./src/core/sync-manager/sync-manager.md) — _(no submodules)_- [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_- [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_- [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_- [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_- [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_- [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_- [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_- [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_- [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_- [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_- [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_- [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_- [rga](./src/crdts/rga/rga.md) — _(no submodules)_- [rga](./src/crdts/rga/rga.md) — _(no submodules)_- [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_- [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_- [errors](./src/errors/crdt-error.md) — _(no submodules)_- [crdt-error](./src/errors/crdt-error.md) — _(no submodules)_- [sync-manager](./src/core/sync-manager/sync-manager.md) — _(no submodules)_- [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_- [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_- [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_- [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_- [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_- [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_- [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_- [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_- [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_- [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_- [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_- [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_- [rga](./src/crdts/rga/rga.md) — _(no submodules)_- [rga](./src/crdts/rga/rga.md) — _(no submodules)_- [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_- [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_- [errors](./src/errors/crdt-error.md) — _(no submodules)_- [crdt-error](./src/errors/crdt-error.md) — _(no submodules)_- [sync-manager](./src/core/sync-manager/sync-manager.md) — _(no submodules)_- [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_ - [vector-clock](./src/core/vector-clock/vector-clock.md) — _(no submodules)_- [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_ - [g-counter](./src/crdts/g-counter/g-counter.md) — _(no submodules)_- [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_ - [lww-register](./src/crdts/lww-register/lww-register.md) — _(no submodules)_- [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_ - [mv-register](./src/crdts/mv-register/mv-register.md) — _(no submodules)_- [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_ - [or-set](./src/crdts/or-set/or-set.md) — _(no submodules)_- [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_ - [pn-counter](./src/crdts/pn-counter/pn-counter.md) — _(no submodules)_- [rga](./src/crdts/rga/rga.md) — _(no submodules)_ - [rga](./src/crdts/rga/rga.md) — _(no submodules)_- [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_ - [two-p-set](./src/crdts/two-p-set/two-p-set.md) — _(no submodules)_- [errors](./src/errors/crdt-error.md) — _(no submodules)_ - [crdt-error](./src/errors/crdt-error.md) — _(no submodules)_

Packages

Module Description
GCounter Grow-only counter — monotonically increasing per-node counters
PNCounter Positive-Negative counter — bidirectional counter from two G-Counters
ORSet Observe-Remove Set — concurrent add survives remove via unique tags
LWWRegister Last-Write-Wins Register — timestamp + node-id tie-breaking
MVRegister Multi-Value Register — preserves all concurrent writes
TwoPSet Two-Phase Set — once removed, never re-added
RGA Replicated Growable Array — ordered list with causal insert/delete
VectorClock Causality tracking via per-node monotonic counters
CrdtSyncManager Delta-exchange coordinator for heterogeneous CRDT collections

Quick Start

import { GCounter, CrdtSyncManager } from "@suaveplan/crdt";

// Simple counter
const counter = new GCounter("my-counter");
counter.increment("node-1", 3);
counter.increment("node-2", 5);
console.log(counter.total()); // 8

// Sync across replicas
const mgr = new CrdtSyncManager({ nodeId: "node-1" });
mgr.register(counter);
mgr.tick();
const deltas = mgr.exportDeltas(); // send over network

Installation

bun add @suaveplan/crdt

License

MIT