Chroma is an open-source, Apache 2.0-licensed embedding database that developers reach for when they want to start indexing embeddings in minutes, one of several open-source and managed vector databases, alongside Pinecone, Weaviate, and pgvector, that Atlan’s context layer sits upstream of, governing what gets embedded before Chroma ever indexes it. Founded by Jeff Huber and Anton Troynikov, Chroma raised an $18M seed round led by Astasia Myers at Quiet Capital, joined by angels including Naval Ravikant, Guillermo Rauch, and Spencer Kimball.[1] Its GitHub repository carries 29,325 stars and 2,518 forks as of September 2026.[2]
Chroma’s own founders describe why it exists plainly: “We evaluated the existing products, but found they were difficult to use and fundamentally built for a different use case (web scale semantic search).”[1] That developer-experience wedge, not raw scale, is Chroma’s real differentiator, and it’s why the tool shows up constantly inside other frameworks rather than only as a standalone destination: Mem0’s memory layer supports Chroma as one of several vector-store backends for personal AI memory.[3]
Chroma runs in three modes, embedded, single-node, and distributed, covered below, and stays fully free to self-host under Apache 2.0 regardless of which one you pick.
| Fact | Detail |
|---|---|
| What it is | Open-source embedding database, plus a managed Chroma Cloud option |
| Founders | Jeff Huber (CEO) and Anton Troynikov, 2022 |
| Deployment | Embedded, single-node (self-hosted), or distributed (self-hosted or Chroma Cloud, GA on AWS and GCP) |
| License | Apache 2.0 |
| Typical practical scale | Tens of millions of embeddings single-node, RAM-bound; distributed and Chroma Cloud extend further |
| Primary use cases | Local/prototype RAG, Mem0-backed agent memory, lightweight semantic search |
| Search | Dense, sparse and hybrid, plus keyword and regex full-text search |
What is Chroma?
Chroma is a company and an open-source project: an embedding database anyone can run for free, plus a managed Chroma Cloud business built on the same code. Jeff Huber, now CEO, and Anton Troynikov founded Chroma in 2022 after concluding the existing options weren’t built for how most AI teams actually work.[1] “We built Chroma for ourselves, because it was the product we needed and wanted,” the founders wrote in their seed announcement.[1]
A vector database exists because an LLM is stateless between calls: a model retrieves what it needs at query time instead of relying on parameters frozen at training. Chroma answers that problem the way its founders wanted a tool to answer it when they were building their own AI products: pip install chromadb, no account, no API key, no infrastructure decision required before the first query runs. The GitHub repository, written primarily in Rust with Python, TypeScript, and Go clients, sits at 29,325 stars as of September 2026.[2]
That same team also produced Context Rot, a July 2025 technical report testing 18 frontier models, including Claude, GPT, Gemini, and Qwen3 variants, that found model performance grows increasingly unreliable as input length grows, well before a context window is actually full.[4] It’s a useful credibility signal: even a vector-database vendor whose business is indexing more content has published research showing that stuffing more context into a prompt isn’t the same as improving RAG quality.
Chroma’s own scale is small next to the category it sits in. Gartner forecasts a 75.3% CAGR for the vector database segment of the DBMS market[5], and Fortune Business Insights projects the global market growing from $2.58 billion in 2025 to $17.91 billion by 2034.[6]
How does Chroma work?
Chroma ships three deployment modes, and which one a team picks changes almost everything else about running it day to day.
Embedded and single-node
Embedded mode runs Chroma inside a Python process, in memory, with nothing to configure, the default most tutorials reach for first. Single-node mode adds a persistent volume and swaps the in-memory index for SQLite plus an HNSW (Hierarchical Navigable Small World) index, the same graph-based approximate-nearest-neighbor algorithm Weaviate, Qdrant and Milvus all index with; Pinecone does not publish its index algorithm. Chroma publishes a RAM formula rather than a vector ceiling: N = R x 0.245, where N is the maximum collection size in millions of embeddings at 1024 dimensions and R is system RAM in gigabytes. Chroma’s own guidance is that users can “comfortably rely on Chroma for use cases approaching tens of millions of embeddings” on the right hardware, and that under 2 GB of RAM is not recommended.[7]
Distributed and Chroma Cloud
Past that point, distributed Chroma and Chroma Cloud use a SPANN index with SPFresh, replacing single-node HNSW: broad clusters searched first, with a smaller index inside each cluster for fast local lookups, a two-level design built to keep memory and search time manageable at far larger scale.[11] The system itself splits into a gateway, write-ahead log, compactor, and query executor, each scaled independently of the others. Chroma Cloud is generally available on AWS aws-us-east-1 and GCP gcp-europe-west1, and Chroma documents a tenant, database, and collection hierarchy in which “tenants provide complete isolation.”[12]
| Mode | Storage | Index | Best for |
|---|---|---|---|
| Embedded | In-memory, in-process | HNSW (unpersisted) | Quick experiments, notebooks |
| Single-node | SQLite + persistent volume | HNSW | Self-hosted production into tens of millions, RAM-bound |
| Distributed / Chroma Cloud | Gateway + write-ahead log + compactor | SPANN with SPFresh | Larger collections, per-tenant isolation, managed operations |
Whichever mode a team runs, the query path stays the same: text gets embedded, Chroma’s index finds the closest matches, an optional metadata filter narrows the set, and matched documents return. Chroma indexes and retrieves vectors. Deciding what belongs in the index is a separate, upstream job.
What's actually in your AI context stack?
The AI Context Stack breaks down where retrieval infrastructure like Chroma fits next to the governance layer most teams skip.
Get the AI Context StackWhat is Chroma used for?
Two use cases account for most real Chroma deployments, plus a third worth naming.
Local and prototype RAG is the dominant pattern. A developer chunks and embeds documents, wikis, or tickets, stores them in Chroma, and retrieves relevant chunks at query time to feed an LLM’s prompt, the standard retrieval-augmented generation loop, minus the setup cost of a managed vector database.
Agent memory through Mem0 pairs Chroma with one of the types of AI agent memory that benefit most from fast local retrieval. Mem0’s open-source memory layer, which extracts, deduplicates, and fuses salient facts from an agent’s conversations rather than replacing the vector store underneath, lists Chroma as one of its supported backends alongside Qdrant, Pinecone, and Weaviate.[3] That pairing shows up constantly in personal AI memory tooling, where a lightweight, zero-infrastructure vector store is exactly what a local, single-user memory system needs; see the best AI agent memory frameworks for how Mem0 compares to the rest of the field.
Lightweight semantic search rounds out the list. Chroma supports dense, sparse, and hybrid vector search, plus keyword and regex-based full-text search and metadata filtering at query time, and multi-modal retrieval across text, images, and audio.[8] Semantic search versus keyword search covers the underlying tradeoff Chroma’s hybrid mode is built to blend.
Developer-experience wins get a team from zero to a working prototype fast. They say nothing about whether the content that ended up indexed was ever approved for an AI agent to read, still current, or safe to expose, the same gap that shows up in why AI agents fail in production once a prototype becomes something real users depend on.
How much does Chroma cost?
Self-hosted Chroma stays free under Apache 2.0, whichever deployment mode a team runs. Chroma Cloud, the managed option, follows three tiers.[9]
| Tier | Base cost | Includes |
|---|---|---|
| Starter | $0/month + usage | 10 databases, 10 team members, community Slack |
| Team | $250/month + usage, $100 in credits | 100 databases, 30 team members, SOC 2 Type II, volume discounts |
| Enterprise | Custom | Unlimited databases and members, single-tenant clusters, BYOC, SLAs |
Usage on Chroma Cloud bills across four dimensions: $2.50 per GiB written, $0.33 per GiB stored monthly, $0.0075 per TiB queried, and $0.09 per GiB of network egress.[9] A headline number here ages fast. Check Chroma’s own pricing page before committing budget, and model 12 to 18 months of write and query volume rather than today’s Starter-versus-Team math, the same caution that applies to any usage-based vector database.
What are Chroma’s honest limitations?
The limitations worth knowing are operational, not philosophical, and they show up the moment a prototype becomes something people depend on.
A common first mistake has nothing to do with scale: a team uses the ephemeral, in-process Client() in development because tutorials default to it, deploys the same code unchanged, and loses every embedding on the next server restart. Chroma’s client reference is explicit that Client() is “best when you don’t need data persistence” and that PersistentClient(path=...) persists to disk.[10]
Concurrency is the second thing to plan for, and Chroma’s own docs state it plainly: only one thread can read or write a given index at a time, so single-node Chroma is fundamentally single threaded and average latency rises under parallel load. Client/server mode lets several clients reach one store, but the server is still single threaded per index.[7] Memory is the third. Chroma’s single-node HNSW index is held fully in memory, and Chroma’s performance guide says the size of that index in RAM “becomes the limiting factor” long before the metadata database does; past available memory the OS swaps and “the system quickly becomes unusable.” Pinecone or Weaviate at the same volume distribute the problem across machines instead of holding it in one process’s memory.[7]
None of that is a data-quality problem, and the difference is worth naming. Whether a document embedded six months ago is still accurate, and whether it was ever approved for an AI agent to see, gets decided before the upsert. Chroma indexes and retrieves vectors. Deciding what belongs in the index is a separate, upstream job.
How does Chroma compare to other vector databases?
The right vector database depends on how much infrastructure a team wants to own and at what scale. Chroma optimizes for local iteration and developer experience first; Pinecone trades that for a fully managed, closed-source engine built for zero-ops scale; Weaviate is open-source like Chroma but built around native hybrid search and horizontal scale to a billion-plus vectors; pgvector skips a new system entirely by extending Postgres. None of these four wins outright, and the honest move is naming which constraint is actually yours before picking one.
Readers weighing the full field should read top vector databases for enterprise AI, an eight-way comparison; anyone starting from zero on the category should read what a vector database is first. A team facing a knowledge-graph-shaped problem instead of a retrieval one should look at context graphs or vector databases versus knowledge graphs for agent memory rather than stretching any of these four to do that job, and vector database versus metadata layer covers the adjacent, often-confused question of what an AI agent actually needs versus what it merely retrieves quickly.
Is your data estate actually AI-ready?
Run the Context Gap Calculator to see how much of what feeds your retrieval pipeline is certified, current, and actually safe to index.
Run the Context Gap CalculatorWhat a governed context layer adds upstream of Chroma
Chroma answers a narrow question well: given this query vector, what’s closest in what’s already indexed. A different set of questions gets answered earlier, wherever the embedding pipeline starts: was this data certified for AI use, is it still current, and should a model see it at all. That step is easy to skip precisely because Chroma removes every other decision, with no cluster to size and no account to create, so it doesn’t feel like a system that needs its own review.
Atlan sits upstream of that gap, for a Chroma-backed pipeline or any other. Source certification means only owner-approved data enters the embedding pipeline in the first place. Sensitivity classification blocks PII and regulated fields before they ever become a vector, rather than filtering them out after the fact. Freshness triggers connect a source-system update to a re-embed signal, so an index doesn’t quietly go stale the way a six-month-old Chroma collection can. Full-pipeline lineage traces every retrieved vector back to its source table, so “what did this answer actually come from” has a real answer. Atlan’s MCP Server exposes that context to agents at runtime over the same Model Context Protocol many agent frameworks already speak, so an agent querying a MCP-connected data catalog alongside Chroma can check whether what it retrieved was ever supposed to be there. A semantic layer closes a related gap: the distance between “semantically similar” and “means what the business thinks it means.”
None of this is a knock on Chroma, a genuinely good tool for what its founders built it to do, and not every Chroma collection needs this treatment. A solo developer’s weekend RAG project over public documentation has little to certify and nothing regulated to classify. The moment the same collection starts feeding decisions a business, a customer, or a compliance team depends on, that calculus changes, and the context layer becomes the upstream layer worth building deliberately, what context engineering actually means in practice. See how to implement an enterprise context layer for the end-to-end version, rather than discovering the gap after an agent has already acted on something nobody re-certified.
See what governed retrieval looks like
Walk through how the Context Layer ROI Calculator estimates the cost of ungoverned retrieval versus a certified, lineage-tracked pipeline, whichever vector database sits underneath.
Try the ROI CalculatorFAQs about Chroma vector database
1. What is ChromaDB used for?
ChromaDB is used to store and retrieve embeddings for local and prototype AI applications, most commonly retrieval-augmented generation and agent memory, including as a backend inside Mem0. Teams choose it when they want to start indexing embeddings in minutes without standing up managed infrastructure first.
2. Is ChromaDB free to use?
Yes, the open-source core is Apache 2.0 licensed and free to self-host indefinitely. Chroma Cloud, the managed option, starts at $0 a month plus usage on the Starter tier, with Team and Enterprise tiers for larger teams and BYOC deployments.
3. How does ChromaDB work?
ChromaDB embeds documents and queries, stores the resulting vectors in a collection, and retrieves the closest matches by nearest-neighbor search. Single-node deployments use SQLite plus an HNSW index; distributed deployments and Chroma Cloud use a SPANN index built for much larger collections.
4. What is the difference between Pinecone and ChromaDB?
Pinecone is closed-source and managed-only, built for teams that want zero operational ownership at any scale. ChromaDB is open-source and self-hostable first, built for fast local iteration, with a managed Chroma Cloud tier as an option rather than the only path.
5. Is ChromaDB a vector database?
Yes. ChromaDB stores high-dimensional embeddings and retrieves them by semantic similarity rather than exact match, the defining behavior of a vector database. It also supports keyword and metadata-filtered search alongside vector similarity.
6. Does ChromaDB support metadata filtering?
Yes. Chroma collections accept metadata filters alongside a similarity query, narrowing results to records matching specific key-value conditions. It also supports hybrid dense-and-sparse search and multi-modal retrieval across text, images, and audio.
7. Can ChromaDB run locally?
Yes, and running locally is Chroma’s default identity. It runs embedded inside a Python process for quick experiments or as a single-node server with a persistent volume, with no managed account or API key required to get started.
8. Is Chroma production-ready, or only for prototyping?
Both. Chroma Cloud is generally available on AWS and GCP, with Customer-Managed Encryption Keys and published customer case studies, and a correctly configured self-hosted single-node deployment reaches tens of millions of embeddings on the right hardware. Two things to plan for: self-hosted single-node Chroma ships no authentication by default and is single threaded per index, and a common first mistake is shipping the in-memory Client() instead of PersistentClient and losing data on restart.
Sources
- Chroma raises $18M seed round, Chroma
- chroma-core/chroma repository, GitHub
- Chroma vector store, Mem0 Docs
- Context Rot: How Increasing Input Tokens Impacts LLM Performance, Chroma Research
- Forecast: Database Management Systems, Worldwide, Gartner
- Vector Database Market Size, Share & Industry Analysis, Fortune Business Insights
- Performance and scaling, Chroma Docs
- Chroma documentation: overview and core concepts, Chroma Docs
- Chroma Cloud pricing, Chroma
- Running Chroma: clients, Chroma Docs
- Configuring collections, Chroma Docs
- Chroma architecture, Chroma Docs