
What is Chroma? The Open Source, Local-First Vector Database
Discover Chroma, the favorite tool for AI developers. Learn why local-first storage is perfect for prototyping and how Chroma simplifies the vector database lifecycle.
What is Chroma? The Developer's Choice
We have spent four modules discussing the "How" and "Why" of vector databases. Now, we finally touch the keyboard. Welcome to Module 5: Getting Started with Chroma.
Chroma (or ChromaDB) is an open-source vector database designed for artificial intelligence applications. It has exploded in popularity because it is Local-First, meaning you can run it on your laptop with zero configuration. It is the "SQLite of Vector Databases."
In this lesson, we will explore why Chroma is the perfect starting point for your AI career and the specific scenarios where it outshines its managed competitors.
1. Why Chroma? The Prototyping Superpower
Most vector databases require you to set up an account, get an API key, and manage cloud clusters (Pinecone) or install complex distributed systems (Milvus).
Chroma is different:
- It's a Python library (
pip install chromadb). - It runs in-memory by default.
- It includes a built-in embedding model (you don't even need an OpenAI key to start!).
Key Features:
- Zero-Latency Prototyping: Test your RAG logic without waiting for network calls.
- Portable Indices: Save your database to a folder on your disk and share it with a teammate.
- Simplified API: Designed specifically for the "LLM Workflow" (Add documents -> Query).
2. When to Use Chroma vs. Pinecone
Chroma is not a toy, but it is optimized for different use cases than its cloud-managed rivals.
| Use Case | Choose Chroma | Choose Pinecone/OpenSearch |
|---|---|---|
| Early Prototyping | Yes (Free & Local) | No (Overkill) |
| Edge Computing | Yes (Runs on small devices) | No (Requires Internet) |
| Privacy/Compliance | Yes (Data never leaves your infra) | Maybe (Requires Trust) |
| Massive Scale (Billions) | No (Limited by your RAM/Disk) | Yes (Distributed Cloud) |
| Collaborative Dev | Yes (Commit index to Git) | No (Shared Cloud Resource) |
3. The Chroma Architecture (Simplified)
Internally, Chroma uses three powerful Open Source components:
- Hnswlib: For the vector index (Module 3).
- SQLite: For the metadata and document storage (Module 4).
- ClickHouse (Optional): For scaling to larger datasets in a "Server" mode.
graph LR
subgraph Chroma_Library
A[API Layer] --> B[Vector Index: HNSW]
A --> C[Metadata: SQLite]
end
D[Python App] --> A
4. Setting Up Your Environment
To follow this module, you need a Python 3.10+ environment.
Installation
pip install chromadb
The "Hello Vector" Code
Here is the minimal "Chroma Hello World." This script embeds four documents and searches them semantically in under 2 seconds.
import chromadb
# 1. Initialize Chroma (In-memory)
client = chromadb.Client()
# 2. Create a Collection (Like a Table in SQL)
collection = client.create_collection(name="my_first_collection")
# 3. Add Documents
# Note: Chroma will automatically use 'all-MiniLM-L6-v2'
# to embed these if you don't provide vectors!
collection.add(
documents=[
"This is a document about pineapples",
"This is a document about oranges",
"Space travel is a complex endeavor",
"The moon is 384,400 km from Earth"
],
ids=["id1", "id2", "id3", "id4"]
)
# 4. Search
results = collection.query(
query_texts=["Tell me about fruit"],
n_results=2
)
print(results["documents"])
# Output: [['This is a document about oranges', 'This is a document about pineapples']]
5. Chroma's Built-in Embedding Functions
One of the biggest friction points in AI is managing API keys for embeddings. Chroma solves this by providing Embedding Functions.
By default, Chroma uses SentenceTransformerEmbeddingFunction, which runs locally on your CPU. This means you can build AI apps offline.
However, Chroma is extensible. When you're ready for production, you can switch to OpenAI or AWS Bedrock with a single line of config:
from chromadb.utils import embedding_functions
# Switching to OpenAI
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key="your_key",
model_name="text-embedding-3-small"
)
collection = client.create_collection(
name="prod_collection",
embedding_function=openai_ef
)
6. The Developer Workflow: From Local to Server
Chroma can grow with you.
- Phase 1 (Ephemeral): Run
chromadb.Client()in a notebook. (Data disappears when you close Python). - Phase 2 (Persistent): Run
chromadb.PersistentClient(path="./my_db"). (Data is saved to your disk). - Phase 3 (Server/Docker): Run Chroma as a standalone Docker container (
chroma run). Your app connects to it via HTTP, allowing multiple developers to use the same database.
Summary and Key Takeaways
Chroma is the ultimate "First Vector Database" for any engineer.
- Local-First means privacy, speed, and zero cost.
- Built-in Embeddings remove the need for external API keys during dev.
- Simplified API (Add/Query) is optimized for RAG.
- SQLite + HNSW provide a reliable foundation on your local machine.
In the next lesson, we will look at Local-first vector databases in depth, exploring the performance limits of your laptop and how to manage large local indices.
Exercise: Local Chroma Setup
- Create a new directory and set up a Python virtual environment.
- Install
chromadb. - Create a script that ingests 5 sentences from your favorite book.
- Perform a query for a concept not mentioned in the book (e.g., if it's a history book, search for "modern technology") and observe what the vector search returns.