Chroma vector store
Chroma is an embedding database that can run as a server or a local persistent client, selected via VECTOR_STORE_PROVIDER=chroma.
Enable it
bash
VECTOR_STORE_PROVIDER=chroma
CHROMA_HOST=localhost
CHROMA_PORT=8000
CHROMA_PERSIST_DIR=./chroma_dataInstall the client: pip install chromadb.
Configuration
| Variable | Default | Description |
|---|---|---|
VECTOR_STORE_PROVIDER | pgvector | Set to chroma to use this store. |
CHROMA_HOST | (none) | Host of a running Chroma server. When set, an HTTP client is used. |
CHROMA_PORT | 8000 | Port of the Chroma server. |
CHROMA_PERSIST_DIR | ./chroma_data | Local path used for a persistent client when CHROMA_HOST is unset. |
Notes
- Unit-tested against a mocked client, not integration-tested against a real Chroma instance. Smoke-test before production use.
keyword_searchis degraded: Chroma has no BM25/ts_rank, so it falls back to a scoped fetch plus term-overlap scoring. pgvector is the optimal backend for hybrid keyword search.- Metadata is scalar-only. Non-scalar payload values (e.g.
metadata,related_memory_ids) are JSON-encoded under a_json__prefix; they round-trip faithfully but are not filterable server-side, unlike pgvector's JSONB. increment_accessand partial payload writes are read-modify-write because Chroma's update replaces metadata rather than merging, so concurrent bumps of the same id can lose an increment.listordering and offset are approximate: with no ORDER BY, rows are fetched and ordered bycreated_atclient-side, so pages beyond the fetch window are approximate.