Skip to content

Stateful Cursor

The cursor persists the pipeline’s position so it survives restarts. Without it, a restart makes Oura start over from its configured intersect point.

Why it matters

Some use-cases — like building a stateful view of the chain — can’t tolerate gaps. If Oura starts from the chain Tip, a restart could miss the blocks produced during bootstrap. You could work around this by always starting from a fixed point and re-processing (safe if your sink is idempotent), but if that point is far back, catching up can take hours.

The cursor solves this directly: the sink stage reports its position as it works, and at a regular interval that position is saved to a backend. On restart, Oura loads the saved position and resumes the source from there.

Configuration

Add a top-level [cursor] section to enable the feature, and pick a backend with type:

Keeps the cursor in memory only — the position is not persisted across restarts. This is the default when no [cursor] section is present, and takes no extra fields.

daemon.toml
[cursor]
type = "Memory"