{"data":{"slug":"philippgille-chromem-go","name":"chromem-go","tagline":"Embeddable vector database for Go with Chroma-like interface and zero third-party dependencies.","github_url":"https://github.com/philippgille/chromem-go","owner":"philippgille","repo":"chromem-go","owner_avatar_url":"https://avatars.githubusercontent.com/u/170670?v=4","primary_language":"Go","stars":1025,"forks":70,"topics":["chroma","chromadb","cosine-similarity","embedded","embeddings","go","golang","in-memory","llm","llms","nearest-neighbor","rag","retrieval-augmented-generation","vector-database","vector-search"],"archived":false,"github_pushed_at":"2026-05-17T18:00:12+00:00","url":"https://www.graphcanon.com/tools/philippgille-chromem-go","markdown_url":"https://www.graphcanon.com/tools/philippgille-chromem-go.md","api_url":"https://www.graphcanon.com/api/graphcanon/tools/philippgille-chromem-go","graph_url":"https://www.graphcanon.com/api/graphcanon/graph?tool=philippgille-chromem-go","description":"Embeddable vector database for Go with Chroma-like interface and zero third-party dependencies. In-memory with optional persistence.","homepage_url":null,"license":"MPL-2.0","open_issues":17,"watchers":12,"ai_summary":"chromem-go is an embeddable vector database designed for simplicity, performance, and ease of integration into Go applications without relying on external databases. It supports in-memory operations with optional persistence capabilities, catering to common use cases such as retrieval augmented generation (RAG), question answering, text search, recommendation systems, classification, and clustering.","readme_excerpt":"# chromem-go\n\n\n\n\n\n\nEmbeddable vector database for Go with Chroma-like interface and zero third-party dependencies. In-memory with optional persistence.\n\nBecause `chromem-go` is embeddable it enables you to add retrieval augmented generation (RAG) and similar embeddings-based features into your Go app *without having to run a separate database*. Like when using SQLite instead of PostgreSQL/MySQL/etc.\n\nIt's *not* a library to connect to Chroma and also not a reimplementation of it in Go. It's a database on its own.\n\nThe focus is not scale (millions of documents) or number of features, but simplicity and performance for the most common use cases. On a mid-range 2020 Intel laptop CPU you can query 1,000 documents in 0.3 ms and 100,000 documents in 40 ms, with very few and small memory allocations. See [Benchmarks](#benchmarks) for details.\n\n> ⚠️ The project is in beta, under heavy construction, and may introduce breaking changes in releases before `v1.0.0`. All changes are documented in the [`CHANGELOG`](./CHANGELOG.md).\n\n## Contents\n\n1. [Use cases](#use-cases)\n2. [Interface](#interface)\n3. [Features + Roadmap](#features)\n4. [Installation](#installation)\n5. [Usage](#usage)\n6. [Benchmarks](#benchmarks)\n7. [Development](#development)\n8. [Motivation](#motivation)\n9. [Related projects](#related-projects)\n\n## Use cases\n\nWith a vector database you can do various things:\n\n- Retrieval augmented generation (RAG), question answering (Q&A)\n- Text and code search\n- Recommendation systems\n- Classification\n- Clustering\n\nLet's look at the RAG use case in more detail:\n\n### RAG\n\nThe knowledge of large language models (LLMs) - even the ones with 30 billion, 70 billion parameters and more - is limited. They don't know anything about what happened after their training ended, they don't know anything about data they were not trained with (like your company's intranet, Jira / bug tracker, wiki or other kinds of knowledge bases), and even the data they *do* know they often can't reproduce it *exactly*, but start to *hallucinate* instead.\n\nFine-tuning an LLM can help a bit, but it's more meant to improve the LLMs reasoning about specific topics, or reproduce the style of written text or code. Fine-tuning does *not* add knowledge *1:1* into the model. Details are lost or mixed up. And knowledge cutoff (about anything that happened after the fine-tuning) isn't solved either.\n\n=> A vector database can act as the up-to-date, precise knowledge for LLMs:\n\n1. You store relevant documents that you want the LLM to know in the database.\n2. The database stores the *embeddings* alongside the documents, which you can either provide or can be created by specific \"embedding models\" like OpenAI's `text-embedding-3-small`.\n   - `chromem-go` can do this for you and supports multiple embedding providers and models out-of-the-box.\n3. Later, when you want to talk to the LLM, you first send the question to the vector DB to find *similar*/*related* content. This is called \"nearest neighbor search\".\n4. In the question to the LLM, you provide this content alongside your question.\n5. The LLM can take this up-to-date precise content into account when answering.\n\nCheck out the [example code](examples) to see it in action!\n\n## Interface\n\nOur original inspiration was the [Chroma](https://www.trychroma.com/) interface, whose core API is the following (taken from their [README](https://github.com/chroma-core/chroma/blob/0.4.21/README.md)):\n\n<details><summary>Chroma core interface</summary>\n\n```python\nimport chromadb\n# setup Chroma in-memory, for easy prototyping. Can add persistence easily!\nclient = chromadb.Client()\n\n# Create collection. get_collection, get_or_create_collection, delete_collection also available!\ncollection = client.create_collection(\"all-my-documents\")\n\n# Add docs to the collection. Can also update and delete. Row-based API coming soon!\ncollection.add(\n    documents=[\"This is document1\", \"This is document2\"], # we handle tokenization, embedding, and indexing automatic","github_created_at":"2023-12-24T10:50:18+00:00","created_at":"2026-07-07T17:44:43.759591+00:00","updated_at":"2026-07-07T20:13:58.178962+00:00","categories":[{"slug":"data-retrieval","name":"Data & Retrieval","url":"https://www.graphcanon.com/categories/data-retrieval","markdown_url":"https://www.graphcanon.com/categories/data-retrieval.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/data-retrieval"},{"slug":"vector-databases","name":"Vector Databases","url":"https://www.graphcanon.com/categories/vector-databases","markdown_url":"https://www.graphcanon.com/categories/vector-databases.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/vector-databases"}],"tags":[{"slug":"chroma","name":"chroma"},{"slug":"vector-database","name":"vector-database"},{"slug":"llm","name":"llm"},{"slug":"in-memory","name":"in-memory"},{"slug":"embedded","name":"embedded"},{"slug":"rag","name":"rag"},{"slug":"golang","name":"golang"}]}}