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.

33rd of 17 in RAG and search

sonic

Lightweight schema-less search index that returns object IDs, written in Rust

#44th of 17 in RAG and search

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
sonic vs qmd: score parts and facts
What we comparesonicqmd
Score parts, out of 100
Adoption84, widely used91, widely used
MomentumNot scored for this kindNot scored for this kind
Freshness100, active100, active
Maintenance88, healthy55, fair
Agent-ready0, none40, minimal
Facts from GitHub and the README
Stars21.4k31.1k
LicenseMPL-2.0 (copyleft)MIT (permissive)
Last commitOct 2026Oct 2026
Last releaseOct 2026Aug 2026
LanguageRustTypeScript
DockerYesNo
GPUNot neededOptional
arm64 or Apple SiliconMentionedNot 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.