- Category
- Developer Tools
- Rank
- No. 184Tools index
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Data, Retrieval & Knowledge
- Interfaces
- CLI
- Builder
- tobi
- GitHub
- 30.0k stars
- Latest release
- v2.8.3
- Date
About
A local CLI search engine that indexes your markdown notes, meeting transcripts, docs, and knowledge bases. Uses BM25 full-text search, vector semantic search, and LLM re-ranking to find information across all your documents.
What it does
QMD turns folders into named collections, adds descriptive context at collection or path level, and returns matching documents, snippets, identifiers, or full content. You can search interactively, feed structured results to agents, or embed the same indexing and retrieval system inside Node.js and Bun applications.
Why it's ranked here
QMD offers an unusually complete local retrieval stack: collection management, contextual metadata, multiple search modes, document retrieval, agent-friendly output, an MCP server, and a typed library surface. The strongest case is operational flexibility. The same index serves terminal users, agent clients, and application code without requiring a hosted service.
What's good
Path-level context helps agents distinguish similar documents using information beyond their text. Keyword search can run without an LLM, while semantic retrieval and reranking remain available when quality matters more. JSON and file-list outputs suit automation. The HTTP MCP transport keeps models loaded across requests, avoiding repeated loading for multiple clients.
Tradeoffs
The full search path carries local model and hardware costs, including model storage, memory use, and possible VRAM use. Node users need version 22 or newer. Bun on macOS may require Homebrew SQLite for vector search, although keyword search still works without that extension. MCP silently ignores unknown parameters, so misspelled filters can produce unexpectedly broad results.
How to use it well
Use QMD when agents or developers repeatedly search private, file-based knowledge and need both quick lexical lookup and higher-cost semantic retrieval. Start with named collections and precise path context, then reserve reranking for ambiguous queries. It does not replace document authoring, synchronization, permissions, or hosted collaboration software.
Technical notes+
package.json defines a public ESM npm package, a qmd binary, Node 22 as the minimum runtime, Bun-oriented scripts, native SQLite dependencies, and platform-specific sqlite-vec packages. src/index.ts exposes the typed SDK and constructs a separate LlamaCpp instance for each store; models load on first use and unload after inactivity. src/store.ts implements SQLite-backed retrieval, scored document chunking, overlapping chunks, BM25 and vector paths, and hybrid reranking. src/db.ts selects better-sqlite3 under Node or Bun SQLite under Bun, enables WAL, applies a busy timeout, and reports platform-specific vector-extension guidance. src/ast.ts adds Tree-sitter breakpoints for TypeScript, TSX, JavaScript, Python, Go, and Rust, with regex fallback when parsing or grammar loading fails. src/llm.ts resolves local GGUF model roles for embedding, query generation, and reranking.
Observed
- License
- MIT
- Primary language
- TypeScript with ECMAScript modules
- Packaging
- Public npm package @tobilu/qmd, installable globally or as an application dependency; direct execution is documented through npx and bunx
- Interfaces
- Command-line interface, typed Node.js and Bun library, and MCP over stdio or Streamable HTTP
- Runtime support
- Node.js 22 or newer; Bun is also documented and supported by the database compatibility layer
- Native platform packages
- sqlite-vec packages are declared for macOS ARM64 and x64, Linux ARM64 and x64, and Windows x64
- Storage
- SQLite index with WAL mode and sqlite-vec for vector search
Read from README.md, package.json, src/index.ts, src/db.ts, src/ast.ts, src/llm.ts, src/paths.ts, src/store.ts, src/collections.ts, src/maintenance.ts, src/bench-rerank.ts.
What it can do
Index markdown files for search
Markdown files, notes, and documents → Searchable index database
Perform full-text search using BM25
Search query text → Ranked list of matching documents
Execute semantic vector search
Natural language query → Semantically similar documents and passages
Re-rank search results using LLM
Initial search results and user query → Improved ranking of most relevant results
Search meeting transcripts
Meeting transcript files and search terms → Relevant meeting segments and discussions
Query knowledge base documents
Documentation files and information requests → Matching knowledge base entries
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
