A MoonBit CRDT toolkit for offline-first state merge and collaborative data structures.
moon add ddd-1234d/MoonCRDTKitimport { "ddd-1234d/MoonCRDTKit" @crdt }
let left = @crdt.ReplicaState::new(1)
left.add_task("draft")
let right = @crdt.ReplicaState::new(2)
right.add_task("review")
let converged = left.merge(right)
println(converged.tasks.contains("draft"))
println(converged.tasks.contains("review"))let left = @MoonCRDTKit.VectorClock::new()
let right = @MoonCRDTKit.VectorClock::new()
left.tick(1)
right.tick(2)
let merged = left.merge(right)
let counter = @MoonCRDTKit.PNCounter::new()
counter.increment(1, amount=8)
counter.decrement(2, amount=3)
let log = @MoonCRDTKit.ChangeLog::new()
ignore(log.append(@MoonCRDTKit.ChangeEvent::new(1, 1, "set", "title")))
let delta = log.delta_after(left, origin=1)
println(merged.concurrent_with(left))
println(counter.value())
println(delta.to_json())moon run cmd/mainmoon testfn LwwRegister::assign(self : LwwRegister, value : String, timestamp : Int, replica : Int) -> LwwRegisterpub(all) struct ReplicaState {
replica : Int
clock : VectorClock
counter : PNCounter
tasks : ORSet
log : ChangeLog
} derive(Debug)pub(all) struct SyncSummary {
replica : Int
clock : VectorClock
counter : PNCounter
set : ORSet
log : ChangeLog
clock_entries : Int
counter_value : Int
set_size : Int
log_events : Int
} derive(Debug)fn SyncSummary::new(replica : Int, clock : VectorClock, counter : PNCounter, set : ORSet, log : ChangeLog) -> SyncSummaryA MoonBit CRDT toolkit for offline-first state merge and collaborative data structures.