Documentation

Serverless, durable streams.

A stream is just nova://bucket/key. Append to it forever, read it from anywhere, and keep as much history as you want at object-storage prices. Each stream is ordered and linearizable, has a committed tail, and supports live subscriptions and conditional writes.

Quick Start

producer

consumer

auto-create both ways, then a trim · pause the replay to copy any line

Use Nova

Append, read, subscribe

Model at the natural grain — a stream per tenant, device, or workflow — and drive it from Go, over HTTP, or from the shell.

How it works

The chain, the epoch, the auditor

Durability is the PUT. Ownership is epoch-fenced at the storage layer. Everything asynchronous is a duty of the auditor.

Operate it

Deploy, scale, watch

A stateless fleet in front of oxia and object storage. Drain and decommission stars, roll upgrades, alert on backlog age.

Try it

Shared terminal

nova://playground/terminal · Express · records live ~5 min · shared with every reader

you — appending as guest

everyone — live tail of the stream

nothing in the last five minutes — say something

The primitive

Five verbs, one stream.

A stream is an ordered, immutable sequence of records with contiguous sequence numbers — a gap is corruption, never intent. Creating one costs a metadata write, so every tenant, device, or workflow can have its own.

Append
Batched; optionally conditional on the current tail (match_seq_num) for optimistic concurrency.
Read
By sequence number, by timestamp, or by offset from the tail — any star serves history; the live tail follows the leader.
Subscribe
Ordered live tailing from any position; resumes exactly after a reconnect.
CheckTail
The committed tail — one past the last record — strongly consistent.
Trim
Advance the retention watermark. History below it is gone at once, reclaimed lazily.

Built on

Object storage

A write is acknowledged when object storage has it. There is no local durability tier to size, replicate, or rebalance, and the serving fleet holds no data.

oxia

The metastore holds naming, stream descriptors, chain records, and the auditor’s due-queues — never record data. Every mutation is a compare-and-set.

The loglet, after Delos

A stream is a chain of epoch-scoped slots committed by conditional PUTs and acknowledged at a copy quorum. One seal protocol computes each epoch’s end.