Data model
Namespaces and the five kinds of objects they contain.
A namespace is the unit of everything in Operon: tenancy, quotas, encryption keys, cache affinity, routing and billing. A cold namespace costs only its bytes in the bucket.
A namespace contains five kinds of objects. Every mutation enters through a stream; the other objects are materializations of streams.
Stream
A partitioned, ordered, offset-addressed log of records, each with a key, a value, headers and a timestamp. It is planned to take over the event-ingest role Kafka plays in an AI stack, through Loam's own native streaming API (M2).
- Each stream picks a WAL class, which trades latency for cost:
standard,expressorquorum. See the log. - Retention is by time, by size, or
compacted(last value per key). - Explicit streams are created by users, like Kafka topics. Implicit streams back every table, collection and graph: a write to a collection is appended to its implicit stream first.
- Any keyed table or collection will be able to expose its row-level changes as a changelog stream, read through the native streaming API (planned for M5).
Table
A columnar, schema'd, partitioned dataset with a sort key, either append-only or keyed. It takes over the analytics role (M4) and is stored as an Apache Iceberg table catalogued in Lakekeeper, so Spark, Trino, DuckDB, Snowflake and StarRocks can read it directly.
Collection
Documents keyed by a primary key, with any mix of text fields, keyword, numeric and date fields, dense and sparse vectors, and a JSON payload. It fills both the Elasticsearch and the Qdrant role.
A collection is one Lance dataset (documents, vectors, scalar and IVF indexes) plus a set of Tantivy splits (inverted index and fast fields), bound together by one collection manifest.
Graph
A property graph defined over tables and collections: vertex labels map to a keyed source, and edge types map to a source with source-key and destination-key columns. Forward (CSR) and reverse (CSC) adjacency sidecars make 1–2 hop expansion fast inside a hybrid query. It takes over the GraphRAG role of a graph database (M3); Loam does not speak Cypher or Bolt.
Link
A declared, continuously maintained materialization from one object into another, with an optional stateless transform:
| Link | Example |
|---|---|
| stream → table | A topic of LLM calls into an Iceberg table |
| stream → collection | A topic of support tickets into a searchable, embedded collection |
| table → collection | A search projection of selected columns |
| tables or collections → graph | Adjacency maintenance for an edge table |
Every link records its applied offset atomically with each commit to its target. That gives exactly-once materialization and makes consistency tokens work. See links and workers.
Durable execution
Not a sixth object kind but a service on the Resonate protocol: durable promises, tasks with fenced leases, and schedules. Agent code uses the Resonate SDKs unmodified, and every step of a run is a durable promise stored in the same bucket as the agent's memory. A crashed run resumes at the step it was on instead of repeating model calls.
Read more in §01 Architecture and §14 Durable execution.