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, express or quorum. 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).
Streams and collections exist today: collection storage and the Qdrant API are built and pass their gates. The HTTP API creates streams and reads and writes their records.

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.

A declared, continuously maintained materialization from one object into another, with an optional stateless transform:

LinkExample
stream → tableA topic of LLM calls into an Iceberg table
stream → collectionA topic of support tickets into a searchable, embedded collection
table → collectionA search projection of selected columns
tables or collections → graphAdjacency 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.

On this page