zoigraph never flattens certainty into a single state. Facts, suspicions, and machine guesses coexist in one field, each rendered at the weight it has earned.
Static nodes are things you've committed to — they persist in a per-project SQLite database and survive every restart.
Phantom nodes are injected over a loopback UDP socket and decay to alpha zero over a 60-second TTL. Click one to pin it — it's promoted to a permanent node at the lowest tier, with a full event trace left behind.
Confidence is layered, not binary. Node tier moves from confirmed → suspected → phantom. Edge certainty drives render alpha, so weak links literally fade out.
A local model (Ollama by default) can propose phantoms about the selected node — but injection is UDP-only, so the model can suggest and never assert. Its output stays visibly provisional until a human pins it.
An edge isn't just a line. Each one holds a label, a kind, and a certainty — and that certainty maps directly to render alpha.
The shape of your own uncertainty becomes legible at a glance: strong relationships burn bright, hunches sit at the threshold of visibility.
No account, no cloud, no telemetry leaving the box. Build with CMake ≥ 3.24 and a C++20 compiler — the first configure pins every dependency for you.