sonic vs qmd
Two of the top projects in RAG and search, side by side: who leads on each score part and who each one suits, then setup, license, activity and what each review found.
sonic
Lightweight schema-less search index that returns object IDs, written in Rust
qmd
Local hybrid search over markdown notes and docs, with CLI and MCP server
Verdict
sonic ranks higher, 82 to 78. Of the 4 score parts we measure for both, sonic leads on 1, qmd on 2 and 1 is even.
- Adoptionqmd leads by 7 points, 91 to 84.
- FreshnessEven at 100.
- Maintenancesonic leads by 33 points, 88 to 55: a wide gap.
- Agent-readyqmd leads by 40 points, 40 to 0: a wide gap.
Pick sonic if you are
Engineers needing a small full-text search index instead of Elasticsearch
- README benchmark: ~28MB RAM peak and ~880μs average query on 1M messages
- Built-in typo correction and autocomplete via the suggest operation
Pick qmd if you are
Developers who want local search over notes and docs for agents
- Hybrid pipeline: query expansion, BM25 plus vector search, RRF fusion, then LLM reranking
- Runs on-device with GGUF models via node-llama-cpp; no hosted API needed
| What we compare | sonic | qmd |
|---|---|---|
| Score parts, out of 100 | ||
| Adoption | 84, widely used | 91, widely used |
| Momentum | Not scored for this kind | Not scored for this kind |
| Freshness | 100, active | 100, active |
| Maintenance | 88, healthy | 55, fair |
| Agent-ready | 0, none | 40, minimal |
| Facts from GitHub and the README | ||
| Stars | 21.4k | 31.1k |
| License | MPL-2.0 (copyleft) | MIT (permissive) |
| Last commit | Oct 2026 | Oct 2026 |
| Last release | Oct 2026 | Aug 2026 |
| Language | Rust | TypeScript |
| Docker | Yes | No |
| GPU | Not needed | Optional |
| arm64 or Apple Silicon | Mentioned | Not stated |
sonic
Sonic is a Rust search backend that indexes text pushed over its Sonic Channel TCP protocol and returns identifiers, which you resolve against your own database. It supports typo correction, autocomplete suggestions, and stop-word removal for 80+ languages, storing data in RocksDB and FST files. The README reports about 30MB RAM under load and sub-millisecond queries on a 1M-message benchmark.
Who it is for: Engineers needing a small full-text search index instead of Elasticsearch
Strengths
- README benchmark: ~28MB RAM peak and ~880μs average query on 1M messages
- Built-in typo correction and autocomplete via the suggest operation
- Buckets within collections allow separate per-user indexes
- Official client libraries for NodeJS, Rust and PHP, plus many community ones
Weaknesses
- Returns only identifiers; no document storage, so an external database is needed
- No HTTP API; access is only through the Sonic Channel TCP protocol
- master is bug-fix only while a v2 rework is underway
- Pre-built packages target 64-bit Debian 12 only; no semantic or vector search
- Rust
- Docker
qmd
QMD indexes markdown notes, transcripts and docs into a SQLite store and searches them with BM25 (FTS5), vector search and LLM reranking. Models run locally as GGUF through node-llama-cpp. It ships a CLI with JSON and file-list output for agents, an MCP server over stdio or HTTP (default port 8181), and a Node/Bun SDK.
Who it is for: Developers who want local search over notes and docs for agents
Strengths
- Hybrid pipeline: query expansion, BM25 plus vector search, RRF fusion, then LLM reranking
- Runs on-device with GGUF models via node-llama-cpp; no hosted API needed
- CLI, MCP server (stdio or HTTP) and TypeScript SDK available
- HTTP server rejects non-loopback Origin and Host headers to block DNS rebinding
Weaknesses
- HTTP endpoints are unauthenticated; off-host use needs your own auth in front
- Built around markdown and text; other document formats are not mentioned
- Embedding step must run before semantic search works
- TypeScript, GGUF, qwen3-reranker
- Needs Node.js or Bun, node-llama-cpp, SQLite
More in RAG and search
Building with these?
We help teams pick an open-source AI stack and run it in production. Client work never changes a rank.