← iLiveMyLifeThe model underneath

Everything is
an event.

Nothing in your graph is overwritten in place. Every change is a command that appends an event — and the present is simply the replay of everything that happened.

Commands, not edits

A ledger for your knowledge.

Like a blockchain keeps a chain of transactions rather than a mutable balance, your graph keeps a chain of events rather than a mutable state. Rename a node, move it, send a message — each becomes an immutable event. The node you see is those events, replayed.

YouItemCreatedEvent created “Deploy checklist”just now
RuslanItemUpdatedEvent marked “Ship v1” ✅ Done2m ago
LifebotMessageCreatedEvent posted the weekly summary2m ago
YouItemMovedInEvent moved “Idea” → “Backlog”1h ago
One stream, two powers

The same events do double duty.

There’s a single source of truth — the event stream. It powers two things at once.

How it travels

Events flow up the tree.

An event doesn’t just sit on the node it happened to — it bubbles upward through every parent. So you subscribe to anything just by placing a reference above it: the events of a whole branch — a project, a person, a team — flow up to your reference and into whatever is listening there.

Concrete, not abstract

The events themselves.

A small, well-defined set — every one carries who did it and when, down to the millisecond.

ItemCreatedEventItemUpdatedEventItemArchivedEventItemMovedOutEventItemMovedInEventMessageCreatedEventMessageUpdatedEventMessageArchivedEvent
One event, as your code receives it
ItemUpdatedEvent — a task flipped to Done
eventType  = 'ItemUpdatedEvent'
event.toItemDetails.title    // "Ship v1"
event.toItemDetails.tags     // [ '#marker#…done' ]
event.updatedByDisplayName   // "Ruslan"
event.updated.when.inMilli   // 1782861612367

This is exactly what a contract sees on every change — and exactly what the history replays. One shape, two uses.

A graph that never forgets.

Every change recorded, replayable, and ready to act on.

Start your graph →