January 2026

ReadLevel

January 15, 2026 · Chroma Cloud

When data is written to Chroma, it’s first committed to our write-ahead log (wal3), then indexed and persisted to object storage asynchronously. This lets Chroma handle high-throughput writes without blocking, but it also means reads need to reconcile two sources of truth.

By default, Chroma reads from the index and considers any relevant entries still in the WAL. This guarantees consistent reads, but it can introduce additional latency as the server merges recent writes into the result set.

In many systems, that extra work isn’t always necessary. If your workload can tolerate slightly stale reads, or if you care more about predictable latency than absolute freshness, you may want to query only what’s already been indexed.

You can now do exactly that using the ReadLevel parameter on the Search() API.

  • IndexAndWal (default): Reads from the index and incorporates recent, unindexed writes.
  • IndexOnly: Reads strictly from the index, ignoring the WAL for faster, more consistent query latency.

rust

let index_and_wal = collection
.search_with_options(vec![search.clone()], ReadLevel::IndexAndWal)
.await
.unwrap();

python

result = collection.search(search_config, read_level=ReadLevel.INDEX_ONLY)

javascript

const result = await collection.search(searchConfig, {
readLevel: ReadLevel.INDEX_ONLY
});

ReadLevel gives you explicit control over the consistency/latency tradeoff, letting you choose the right behavior for each query instead of baking it into your system design.

This complements Chroma’s existing query engine by enabling:

  • Lower latency reads for performance-sensitive paths
  • Predictable query behavior when freshness isn’t required
  • Fine grained control over consistency on a per query basis

As always, the default remains safe and correct, but now you have the option to go faster when your use case requires it.