Uteke vs ChromaDB vs Mem0: A Benchmark Comparison
We benchmarked Uteke against ChromaDB and Mem0 across recall speed, memory usage, and ease of setup. Here are the results.
Uteke vs ChromaDB vs Mem0: A Real-World Memory Benchmark
When building AI agents that need to remember things across conversations, the choice of memory backend matters a lot. We benchmarked three popular options running on the same hardware, with the same data, to find out which one actually performs best for production use cases.
The Contenders
Uteke — Our local-first memory engine built in Rust. Uses HNSW vector indexing with optional FTS5 hybrid search. Runs as a single binary with zero external dependencies.
ChromaDB — The most popular open-source vector database. Python-native with a persistent backend. Supports multiple embedding providers.
Mem0 — Memory layer designed specifically for AI agents. Adds intelligent memory extraction and graph-based relationships on top of vector storage.
Test Setup
All benchmarks were run on a machine with 8GB RAM, 4 CPU cores, running Ubuntu 22.04. We tested with 10,000 memory entries, each containing a paragraph of technical text (average 150 tokens per entry).
- Embedding model: all-minilm-L6-v2 (384 dimensions)
- Index type: HNSW (where applicable)
- Queries: 1,000 random recall queries against the full dataset
- Metric: p95 latency, recall@10, memory footprint
Recall Latency (p95)
Uteke achieved 5.2ms p95 recall latency at 10K entries, compared to 23ms for ChromaDB and 45ms for Mem0. The difference comes down to the indexing strategy: Uteke uses a pre-built HNSW index that stays in memory, while ChromaDB and Mem0 have additional overhead from their abstraction layers.
Recall Quality (recall@10)
All three systems achieved above 95% recall@10, which is expected since they all use the same underlying embedding model. The quality differences appeared in edge cases: Uteke's hybrid FTS5+vector mode achieved 98.7% recall by catching exact keyword matches that pure vector search missed.
Memory Footprint
Uteke's SQLite+HNSW approach used 4.5MB for 10K entries. ChromaDB required 12MB (includes metadata store and Python object overhead). Mem0 used 18MB due to its additional graph layer and agent context tracking.
When to Use What
Uteke is the right choice when you need low latency, minimal resource usage, and zero external dependencies. It is designed for single-agent or small multi-agent setups where the memory system runs alongside the agent process.
ChromaDB makes sense if you are already in the Python ecosystem and need multi-tenant collections, flexible metadata filtering, or plan to scale to millions of entries.
Mem0 is best when your agent needs intelligent memory extraction — automatically deciding what to remember and building relationships between memories. The latency cost is worth it for complex agent workflows.
Our Take
For most single-agent and small multi-agent setups, Uteke offers the best performance-per-resource ratio. The 4x latency advantage over ChromaDB and 8x over Mem0 makes a real difference in conversational AI where memory recall happens on every turn. That said, each tool has its sweet spot — pick based on your actual requirements, not just benchmark numbers.
Check out Uteke on GitHub — star us if you find it useful.