Implementation of the eg-walker CRDT algorithm with FugueMax sequence CRDT
Dependencies
import "dowdiness/event-graph-walker/text"
fn main() -> Unit raise {
let doc = @text.TextState::new("alice-laptop-001")
doc.insert(@text.Pos::at(0), "Hello")
doc.insert(@text.Pos::at(5), " World")
println(doc.text()) // "Hello World"
doc.delete(@text.Pos::at(5))
println(doc.text()) // "HelloWorld"
}fn delete_span(doc : @text.TextState, start : Int, end : Int) -> Unit raise {
let range = @text.Range::from_ints(start, end) catch {
@text.TextError::InvalidRange(start~, end~) => {
println("Failed: start \{start} > end \{end}")
return
}
error => raise error
}
doc.delete_range(range) catch {
@text.TextError::InvalidPosition(pos~, len~) =>
println("Failed: endpoint \{pos} exceeds document length \{len}")
error => raise error
}
}fn main() -> Unit raise {
let alice = @text.TextState::new("alice-laptop-001")
alice.insert(@text.Pos::at(0), "Hello")
let bob = @text.TextState::new("bob-laptop-001")
let alice_sync = alice.sync()
let initial = alice_sync.export_all()
bob.sync().apply(initial)
println(bob.text()) // "Hello"
let bob_version = bob.version()
alice.insert(@text.Pos::at(5), "!")
let delta = alice_sync.export_since(bob_version)
bob.sync().apply(delta)
println(bob.text()) // "Hello!"
}import "dowdiness/event-graph-walker/tree"
fn main() -> Unit raise {
let doc = @tree.TreeState::new("alice-laptop-001")
let project = doc.create_node(parent=@tree.root_id)
let src = doc.create_node(parent=project)
let test = doc.create_node(parent=project)
doc.set_property(project, "name", "my-project")
doc.set_property(src, "name", "src")
doc.set_property(test, "name", "test")
let peer = @tree.TreeState::new("bob-laptop-001")
peer.sync().apply(doc.sync().export_all())
println(peer.get_property(project, "name")) // Some("my-project")
println(peer.children(project).length()) // 2
doc.delete_node(test)
println(doc.is_alive(test)) // false
}event-graph-walker/
├── justfile # Local and CI command entry points
├── scripts/ # Nushell verification implementations
├── text/ # Public text CRDT facade
├── tree/ # Public movable-tree facade
├── undo/ # Public undo/redo package
├── container/ # Advanced document API: tree + block text + sync + undo
├── peer_sync/ # Peer-free synchronization policy and façade adapters
├── internal/ # Implementation packages, not the first-time API path
├── docs/ # User docs, design notes, benchmarks, and historical material
└── moon.modjust verifyjust verify-publishjust cimoon bench --releaseImplementation of the eg-walker CRDT algorithm with FugueMax sequence CRDT
Dependencies