AI Deck

QMD (Query Markup Documents) — A hybrid, fully local search engine for Markdown notes, meeting memos, and docs

An open-source, on-device search engine built by Tobi Lütke, CEO of Shopify. It indexes the Markdown notes, meeting memos, and technical documentation scattered across your machine, so you can find things by keyword or by plain-language question. Its defining trait is a hybrid approach that combines BM25 full-text search, vector-based semantic search, and re-ranking by a local LLM — and everything, model inference included, runs on your own machine. Because it also works as an MCP server, it can serve as a memory layer that lets AI agents such as Claude Code search your own notes. The project has gathered more than 20,000 stars on GitHub and is released under the MIT license.

Key Features

  • Three-layer hybrid search: BM25 full-text search for exact matches, vector search for paraphrases, and a local LLM re-ranker that reorders the candidates, all fused with Reciprocal Rank Fusion. It surfaces “the same topic worded differently,” which plain keyword search misses
  • Fully local operation: Both the embedding model and the re-ranker run as local GGUF models via node-llama-cpp. Your note contents are never sent to an external API, which makes it comfortable for work memos and personal records
  • Markdown-aware chunking: Text is split along structural boundaries such as headings, paragraphs, and code blocks. For code you can also opt into tree-sitter syntax-aware splitting, so results are less likely to be fragments cut off mid-thought
  • Collection-based management: Register multiple directories as separate collections with qmd collection add, then narrow searches to the ones you want. You can keep an Obsidian vault, a repository’s docs, and a meeting-notes folder as distinct collections
  • MCP server / Claude Code plugin: It exposes tools such as query, get, multi_get, and status over MCP, letting an AI agent search your knowledge base mid-conversation. For Claude Code, install it with claude plugin install qmd@qmd
  • Three search commands for different needs: search for speed (BM25 only), vsearch for semantic search, and query for the highest quality with query expansion and re-ranking. Output formats include JSON, CSV, and Markdown, making it easy to wire into scripts

Pricing

PlanPriceHighlights
Open source (MIT license)$0All features available. Models run locally, so there are no usage fees

Pricing is current as of August 2026. Please check the official repository for the latest information.

Note that on first setup it automatically downloads models for embedding, re-ranking, and query expansion, using roughly 2GB of disk space in total (cached under ~/.cache/qmd/models/). There is no monetary cost, but you supply the disk and compute yourself.

Pros & Cons

Pros

  • Note contents never leave your machine, so confidential meeting memos and personal records can be indexed with confidence
  • Free and MIT-licensed, with few restrictions on commercial use or embedding it in internal tooling
  • Keyword and semantic search are available through a single command, so you can reach a note from a hazy recollection
  • MCP support maps directly onto letting an AI agent consult your own past records
  • As a CLI with selectable output formats, it fits easily into existing scripts and editor integrations

⚠️ Cons

  • It is a CLI tool with no bundled GUI, which makes it awkward if you are not comfortable in a terminal
  • It requires Node.js 22 or later (or Bun), and on macOS you need a Homebrew SQLite build with extension support
  • Because it runs a local LLM, the full query path with re-ranking can be slow depending on your hardware
  • The default embedding model (EmbeddingGemma) is optimized mainly for English, so notes written mostly in other languages may require switching to a multilingual model and re-indexing
  • It targets Markdown and similar text. It is not designed to index PDFs or Office files as-is

Comparison with Similar Services

CriteriaQMDKhojObsidian (built-in search)ripgrep
DeliveryCLI (open source)Self-hosted / cloudNote-taking appCLI (open source)
Search methodBM25 + vector + LLM re-rankingFull-text + semantic searchKeyword-centricRegex full-text matching
Runs fully locallyYesYes when using local modelsYesYes
AI agent integrationMCP server / Claude Code pluginVia chat UI and APIDepends on pluginsNone
Target dataMarkdown and documents in generalNotes, documents, some online sourcesNotes inside your own vaultAny text files

Who Is It For

  • People with years of accumulated Markdown notes and meeting memos who can no longer reach the right record by keyword search alone
  • Anyone handling confidential material who does not want search indexes or model inference entrusted to an external service
  • Developers who want AI agents such as Claude Code to work while referring to their own past records
  • People who want to search across an Obsidian vault and a repository’s docs in one pass
  • Regular CLI users who want search results as JSON to fold into their own workflow

Summary

QMD is a tool that commits fully to delivering high-precision search while staying local. Its greatest value is packaging the modern building blocks of search — BM25, vector search, and LLM re-ranking — into a single CLI that depends on no external service. The absence of a GUI and its setup prerequisites make the first step a little steep, but for anyone who wants their accumulated notes to work as an AI agent’s memory, it is a strong option. A good starting point is to register a single collection and see how well qmd query performs.

← Blog