Open Source

Your Markdown is already a database.
Make it useful to AI.

Hybrid retrieval, link graphs, typed frontmatter, relations, and computed fields in one Rust CLI—with an optional desktop workspace.

15 open-source Agent Skills for Claude Code, Codex, Gemini CLI, Cursor, and GitHub Copilot.

$ curl -fsSL https://mdvdb.dev/install.sh | sh
latest tagged release · current main: cargo install --git https://github.com/geckse/markdown-vdb.git --branch main --locked
LOCAL
Markdown source
TYPED
Frontmatter data
GRAPH
Links & relations
mdvdb
Active
$ mdvdb search "why did auth change?" --boost-links --expand 2
Hybrid retrieval · frontmatter-filterable · graph-expanded
0.94
decisions/auth-model.md § Why we changed the token flow
0.87
runbooks/auth-rotation.md § Recovery procedure
0.81
projects/identity.md § Current constraints
0.74
memory/2026-08-04.md § Identity rollout

What is mdvdb?

A filesystem-native retrieval and data layer. Keep human-readable files as the authority; add fast search, graph context, typed queries, and computed frontmatter around them.

📁

Filesystem Native

Markdown files are rows. Frontmatter is typed data. Links and relation fields are graph edges. Portable derived indexes live beside the collection.

⚡

Zero Infrastructure

One CLI, no database server and no container stack. HNSW vectors, BM25 segments, schema, and derived graph state stay local.

🦀

Agent Native

Structured JSON, a Rust library, watch mode, incremental ingest, graph expansion, and project-local skills fit directly into agent loops.

Frontmatter as data

Query Markdown like a database

Frontmatter becomes typed columns. Markdown links become relations. Formula, Lookup, and Rollup fields are computed safely and materialized back into Markdown, so every query sees the same source-of-truth values.

invoices/acme-042.md source of truth
---
title: August platform work
status: open
client: clients/acme.md
price: 240
quantity: 3
total: 720
---

# August platform work
SQL-shaped mental model
FROM invoices mdvdb collection invoices --recursive
WHERE status = open --filter status=open
ORDER BY total DESC --sort total --order desc
LIMIT 20 OFFSET 0 --limit 20 --offset 0 --json

This is a SQL-like workflow, not a SQL language: equality filters combine with AND, relations behave like foreign keys, and computed values can be filtered or sorted after they are materialized.

Relation

Follow a frontmatter link and populate the target like a one-hop JOIN.

Formula

Derive a typed value from fields in the same document.

Lookup

Copy a field from one or more related Markdown documents.

Rollup

Aggregate related values with an expression for counts, sums, averages, min/max, or another result.

Use cases

One Markdown layer. Three jobs.

Retrieval, memory, and structured operations all share the files your team and agents can already read and write.

01 / LLM Wiki

A wiki your model can actually retrieve

Turn handbooks, product docs, runbooks, and decisions into section-level context. Hybrid search catches meaning and exact names; graph expansion follows citations; JSON output drops into any LLM tool loop.

$ mdvdb search "why did auth change?" --boost-links --expand 2 --json Read the playbook →
02 / AI Memory

A durable memory layer with graceful forgetting

Store daily logs and curated memories as ordinary Markdown. Ingest a single file after every write, filter by memory type, and apply exponential decay so old activity fades while maintained knowledge stays prominent.

$ mdvdb search "deployment preference" --filter type=memory --decay --decay-half-life 30 Read the playbook →
03 / Knowledge Operations

Run structured workflows without giving up files

Model projects, research items, customers, content, or decisions with typed frontmatter. Relations connect records; formulas, lookups, and rollups compute state; collection queries filter, sort, and page the result.

$ mdvdb collection projects --recursive --filter status=active --sort risk --order desc --json Read the playbook →

Key Features

📝

Four Retrieval Modes

Hybrid RRF, semantic HNSW, lexical BM25, and semantic edge search. Results point to the matching heading, not merely the file.

🔍

Relations & Populate

A frontmatter .md path works like a foreign key and a graph edge. Populate the target and reverse references inline when you need JOIN-like context.

🧠

Agent Memory with Decay

Time-based exponential decay for search scores. Recent files rank higher — ideal for AI agent memory where recency matters. Configurable half-life, path-based include/exclude.

ƒx

Computed Frontmatter

Formula, Lookup, and Rollup modules atomically materialize typed values into Markdown. Filters, sorting, exports, and later ingests see the same values.

🗺

Leiden Communities & Topics

Discover stable automatic communities or define multi-label Topics with descriptions, seeds, thresholds, and an explicit Unassigned bucket.

◇

Shards

Name a recursive folder scope without creating another index. Each Shard gets strict local graph analysis, local communities, and independent Topics.

🧩

Provider Choice

OpenAI, OpenRouter, Gemini, Azure OpenAI, Bedrock, Hugging Face, Ollama, or a custom endpoint—with live model discovery where supported and automatic dimensions.

⚡

Reactive & Inspectable

Watch changes, preview ingest, stream NDJSON progress, estimate reindex cost, inspect schema and sync health, and diagnose broken relations.

Semantic features use your chosen embedding provider. Lexical search, metadata queries, and many inspection commands remain available without a query-time embedding call.

Knowledge Graph

Your ideas, connected

Retrieve beyond isolated chunks. Follow authored links, frontmatter relations, semantic edge context, and multi-hop neighborhoods across the Collection or inside a Shard.

Leiden + Topics

Discover stable communities automatically, then layer on your own multi-label Topics and thresholds.

Links + Relations

Body links and frontmatter foreign keys share one graph, so backlinks, orphans, boost, and expansion agree.

Scoped Analysis

Analyze the whole Collection or a named Shard with its own strict topology, communities, and Topics.

Optional desktop studio

Tesseract

mdvdb stays CLI-first and library-friendly. Tesseract adds a visual workspace on top of the same files and the same CLI contract—without turning your vault into a proprietary database.

What the app adds
  • Source, WYSIWYG, and preview editing with tabs, split panes, and multiple windows
  • Editable database tables, saved views, typed properties, Relations, Formula, Lookup, and Rollup
  • Collection, document, chunk, local, and 3D graph exploration with Topics and semantic edges
  • Named Shards with strict local graph analysis, search, Quick Open, collection info, and Doctor
  • Embedded terminal, Obsidian Topic import, and project-local agent skills

From files to retrieval in 4 commands

quickstart
Active
1. Install
$ curl -fsSL https://mdvdb.dev/install.sh | sh
Fetches the latest tagged GitHub release
macOS and Linux binaries supported
2. Initialize
$ cd your-notes/ && mdvdb init
Created .markdownvdb/config.yaml
Configure a provider; keep cloud credentials in .markdownvdb/.env
3. Ingest
$ mdvdb ingest
Scanning Markdown files...
Generating embeddings...
Index, graph, and derived fields updated
4. Search
$ mdvdb search "query" --boost-links --json
1. async-patterns.md (0.94)
2. tokio-runtime.md (0.87)
3. futures-guide.md (0.81)

21 Commands. One local contract.

Search, query frontmatter, manage Shards and Topics, run computed modules, inspect providers, export graphs, and automate every result with JSON.

  • search
    Hybrid, semantic, lexical, or edge retrieval with filters and graph context
  • ingest
    Incrementally index Markdown, links, relations, computed fields, and Topics
  • status
    Show index counts, embedding compatibility, and reindex state
  • info
    Inspect scope size, sync state, and full-reindex cost
Output
Active
$ mdvdb search "why did auth change?" --boost-links --expand 2 --populate
Hybrid results:
0.94 decisions/auth-model.md Why we changed the token flow
0.87 runbooks/auth-rotation.md Recovery procedure
Graph context: 4 linked chunks · relations populated
Flags
--limit--min-score--filter KEY=VALUE--mode hybrid|semantic|lexical|edge--path PATH | --shard ID--boost-links--hops N--expand N--decay--populate
Global Flags --json · --root PATH · --no-color · -v / -vv / -vvv
Local-first by design

Keep the files. Add the database behavior.

mdvdb is a derived layer around durable Markdown—not a new place you have to migrate your knowledge into.

AUTHOR

Markdown stays readable

Open it in a text editor, review it in Git, sync it however you like, and keep using existing Markdown tools.

.md + YAML frontmatter + links
DERIVE

Indexes stay disposable

Vectors, BM25 segments, schemas, clusters, Topics, and graph state can be rebuilt from the collection.

.markdownvdb/
QUERY

One contract for agents

Human-readable output for terminals and stable JSON for scripts, model tools, desktop clients, and the Rust API.

CLI + JSON + Rust library
EXPLORE

A desktop when you want one

Use Tesseract for editing, tables, graphs, Topics, Shards, and visual workflows without making it a dependency.

Optional Tesseract app
Source of truth Your Markdown and declared schema overlay
Computed writes Declared, module-owned, hash-guarded, and atomic
Secrets Environment or .env files—never the YAML config
Scope Folders or named Shards over one shared Collection index
Portability No hosted database or proprietary document format required