zlf stores a property graph in RocksDB.
A node has an id (string, up to 255 characters), a set of labels, and a property map. Node properties are versioned: each mutation bumps the version and preserves prior property values under version keys (temporal queries read them).
node(alice).
node(alice, [person], { name: "Alice", age: 30 }).
A directed edge is identified by (source, type, target) and can carry properties:
edge(alice, knows, bob).
edge(alice, knows, bob, { since: 2024 }).
Edge identity is source:type:target; the same triple with properties merges into one edge.
property(Id, Key, Value) reads/writes a property of a node or edge id. Node and edge properties are also reachable through prop_Key(Id, Value) shortcuts.
Labels and edge types become queryable shortcuts:
person(alice). % label
knows(a, b). % edge type
Label(Id) on an existing node merges the label and preserves properties.