Chroma

Embedded vector database for AI apps. Runs in-process like SQLite, prototype-first.

VISIT CHROMA

Key takeaway: Best treated as the SQLite of vector search: import it, embed some documents, and have retrieval working before you have decided anything about infrastructure. Choose it for prototypes, notebooks, and Python tools that ship inside another process. Move to pgvector or Qdrant before that prototype takes real traffic.

Quick facts

  • CategoryEmbedded
  • EnginePython / Rust core
  • PricingOpen source
  • LicenseApache-2.0
  • Created2022
  • GitHub stars22.4k
  • Hybrid searchNo
  • Edge-readyNo
  • Multi-tenantSingle-tenant
  • Max dimensionsunlimited

What it is

Chroma runs in-process, like SQLite for vectors. Python-first SDK, simple API, optional client-server mode for production. The default vector DB for prototype RAG apps and LangChain / LlamaIndex tutorials. Distinct from purpose-built engines: Chroma is for the hobbyist-to-mid-scale tier, not for big production workloads.

Best for

  • Prototype RAG apps where adding any infrastructure is overhead
  • Single-tenant Python tools embedded in another app
  • Small to mid-scale workloads under ~5M vectors

When not to pick it

Skip Chroma for high-traffic production workloads, it does not yet match Pinecone or Qdrant on latency and throughput at scale. Skip for non-Python stacks; the Python SDK is the path of least resistance.

My take

Chroma is the right pick for prototypes and Python tools. For serious RAG production, graduate to pgvector (if Postgres-aligned) or Qdrant (if not).

Embedded first, server second

Chroma's design point is that adding a vector store should not mean adding a service. It runs inside your Python process, persists to a local directory, and gets you from raw text to a working retrieval loop in a handful of lines, with a default embedding function so you do not have to pick a model on day one. There is a client-server mode and a hosted option when you outgrow in-process, but the embedded path is the one the ergonomics were designed around and it shows. It is single-tenant in practice too. Collections give you logical separation, but not the per-tenant isolation primitives Weaviate and Qdrant expose, so a multi-customer application ends up enforcing that boundary in application code and paying the filtering cost that implies.

What breaks when the prototype gets popular

Two things tend to bite. The first is the lack of native keyword search, so hybrid retrieval, which is usually what fixes a RAG pipeline that misses exact names, product codes, and error strings, has to be assembled outside the database. pgvector, Weaviate, and Qdrant all give you that in one query. The second is throughput: Chroma is comfortable in the small-to-mid range the project targets and does not pretend to match Qdrant or Pinecone under sustained concurrent load. The migration out is easy, which is rather the point. You hold the documents and the embedding model, so re-ingesting into pgvector or Qdrant is a script rather than a project. Treat Chroma as a stage rather than a destination and it is an excellent tool.

Frequently asked questions

Is Chroma production-ready?

For low-traffic internal tools and single-tenant Python applications, yes. For public products under sustained concurrent load, it is not where you want to end up, because latency and throughput at scale are not what the project optimises for and it does not claim otherwise. Prototype on Chroma, then move to pgvector if you are on Postgres or Qdrant if you are not.

Chroma or pgvector?

Chroma while you are still proving the retrieval idea works, because there is no infrastructure to stand up and no migration to write. pgvector once the thing is real, because you get keyword and vector search in one place, filtering that joins to your actual data, and an operational story your team already understands. Moving between them is a re-ingest script, not a rewrite.

Does Chroma work outside Python?

There is a JavaScript client and the server exposes an HTTP API, but Python is where the project's attention goes and where the documentation and framework integrations are deepest. If your application is TypeScript or Go, you are swimming against the current, and Qdrant or pgvector will give you better-supported clients and more community answers for those languages.

Links

Compare Chroma side-by-side

Similar tools you should also consider

If Chroma is your pick, the next conversation is short

The 30-min call is where your vector-DB choice becomes a real RAG architecture, a chunking + reranking strategy that actually works for your corpus, and a price range you can take to your stakeholders. Describe your data shape, your query patterns, your latency budget. I tell you whether Chroma is genuinely your fit.