Skip to content

Latest commit

 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

convergent

CI License: MIT

Lightweight, composable CRDTs (Conflict-Free Replicated Data Types) for decentralized systems.

CRDTs are data structures that can be replicated across nodes, modified independently, and merged with a mathematically guaranteed consistent result — no central coordination required.

Types

Type Description Use case
GCounter Grow-only counter View counts, event tracking
PNCounter Positive-Negative counter Likes/dislikes, stock levels
LWWRegister Last-Writer-Wins register User profile fields, settings
ORSet Observed-Remove set Shopping carts, tag lists

Usage

[dependencies]
convergent = "0.1"
use convergent::{GCounter, Merge};

let mut node_a = GCounter::new("a");
let mut node_b = GCounter::new("b");

node_a.increment(3);
node_b.increment(5);

node_a.merge(&node_b);
assert_eq!(node_a.value(), 8);

Design

Every type implements the Merge trait, which guarantees:

  • Commutativea.merge(b) == b.merge(a)
  • Associativea.merge(b).merge(c) == a.merge(b.merge(c))
  • Idempotenta.merge(a) == a

The LWWRegister uses hlc_id for causally-ordered timestamps, connecting this crate to the broader problem of time in distributed systems.

Related

License

MIT

About

Lightweight, composable CRDTs (Conflict-Free Replicated Data Types) for decentralized systems.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages