Felipe Córdova236 downloadsA graph that explains itself: your vault as a layered map, with the reason each note links to the next — written by you, or suggested by AI.
Obsidian's graph shows you that two notes are linked. This one shows you why.
Made for LLM wikis · works with any vault that has structure
English · Leer en español
Five real views, no mock-ups: the layered map · a note with every reason · the gaps · a path between two notes · the radial view
In a vault of a few hundred notes, the standard graph is a hairball: pretty, and useless for thinking. Why Graph lays your notes out in layers, left to right, the way information actually moves through a knowledge base — what comes in → what it is about → what you learned → what it all adds up to — and on every link it puts the sentence in which that link was written.
Not a guess. The real line from your own note.
| What it does · the four things you get | Install · two minutes |
| First run · the wizard reads your folders | Bring your own AI · optional, and free if local |
| What it expects from your vault · read this before installing | Everything else · settings, cost, privacy, accuracy |
![]() |
![]() |
| Layers, not a hairball. You decide which folders belong to which layer. Notes inside a layer are ordered to minimise crossing lines, so the paths you see are the paths that exist. | Every link carries its reason. Either the reason you curated (- [[note]] — why) or the real sentence from the note where the link appears. Nothing is invented. |
![]() |
![]() |
| Paths. Pick two notes and read the shortest chain between them, hop by hop, with the reason for each. This is how you find out that two projects you thought were related are four hops apart. | Gaps. It compares the links that exist against the links you would expect between two topics. In my own vault it found two topics with 0 links where ~26 were expected. |
And also: a radial view that centres on one note and shows its world in rings · English and Spanish, following Obsidian's own setting · the phone, same map and touch gestures, no separate build · export to PNG, to an Obsidian Canvas you can keep editing, or to a standalone HTML page.
From the community directory — Community plugins → Browse → search Why Graph → Install → Enable.
DBB-FC/why-graph.BRAT installs it, enables it, and updates it on every release.
Download main.js, manifest.json and styles.css from the
latest release into
<vault>/.obsidian/plugins/mapa-neuronal/, then enable it in Settings → Community plugins.
Nothing else is needed: those three files are the whole plugin.
Open it with the command Open neural map (Cmd/Ctrl+P) or the brain icon in the left ribbon.
··· → Path between two notes, pick two, and read the chain.··· → Gaps between topics, to see what should be connected and is not.That's it. No configuration beyond the wizard, and no AI key required for any of the above.

Everything else lives in the tools menu — the ⋯ tools chip on the map, or the tab's own ··· menu:

The map draws the structure you already have. If your notes live in one flat folder with no topics and no reasons written down, you will see one column and little else — not a bug, just an honest picture of a vault with no layers yet.
It pays off when your vault has, or is moving towards:
notes/, but sources, projects and people, ideas, topics.
Three to five layers is the sweet spot.tema by default, any name you like). That is what gives each
note its colour and makes topics collapsible. Optional: without it the map still works, in one colour.- [[other-note]] — the reason, the
panel shows your words. When it does not, it falls back to the sentence where the link appears —
and the AI can propose the missing reason for you to approve.This plugin grew inside a vault built on the LLM wiki pattern — Andrej Karpathy's original design: immutable raw sources on one side, a curated wiki the LLM maintains on the other, and a written contract between them. It does not require that pattern, and it names no folder of its own — but that is the shape it was designed against. Any vault with a deliberate structure (PARA, Zettelkasten with MOCs, a digital garden with topic hubs) gets the same benefit.
If you run an LLM wiki, the map does something specific for you: the raw layer becomes the first column, the curated wiki the middle ones, and the syntheses the last — so you can see at a glance whether your sources are actually being distilled, or just piling up.
If your vault is flat today, the map is still useful as a diagnosis: it shows you exactly how much of your thinking is sitting in one undifferentiated pile.
The map works with no AI at all. If you connect one, it can propose reasons for links that have none, and short summaries for notes that have no description.
Supported: Anthropic (Claude), OpenAI, Google (Gemini), and any OpenAI-compatible local server (Ollama, LM Studio, LocalAI) — the local option needs no key, no internet and no cost. Reasons are written in the language of your notes, not of the interface.
Three locks apply, whatever provider you pick:
No, and no plugin can. Subscriptions (Claude Pro/Max, ChatGPT Plus) pay for the vendor's own apps; there is no public API you can authenticate with a subscription. The API is a separate product, billed per token with prepaid credit.
Three ways to deal with that:
Plugins that appear to run on "one subscription" are doing one of two things: using a local model (free, like the option above), or paying the API with the developer's own key and charging you a subscription for it — which means your notes pass through their server. This plugin has no server, so that trade is not on the table.
Four fields: pick the provider, paste your key, choose the model, and press Test the connection — one tiny call that tells you whether it answers, without sending any note. The key is stored on this device only.

Every approval is logged (date, model, quotes, resulting text) in a note under the audit folder, so you can audit or undo later.
On a real vault of 254 notes and 916 links, over a reproducible sample of 44 links reviewed blind against the source notes:
| Correct | Wrong or invented | Unverifiable (blocked) | |
|---|---|---|---|
| First attempt: small model, only the link's sentence | 48% | 16% | — |
| Current method: full notes + verified quotes + second pass | 97.7% | 0% | 2.3% |
That measurement was made with Claude Opus 5. With other models the locks still apply — a proposal without verifiable quotes still cannot be approved — but the hit rate is untested; treat it as unknown until you measure it on your own vault.

Everything above the dashed AI box happens inside your computer, with no network call at all. The
AI is reached only when you ask for a suggestion, with your key; whatever it proposes has to
survive a code check of its quotes and your approval before a single line is written back to your
note. The interactive version of this diagram is in
docs/diagramas/mapa-neuronal.html — download it and open it
in a browser.
| Setting | What it changes |
|---|---|
| Layers | One line per layer: Name | description. Three to five works best. |
| Folders | Which folder goes to which layer. The wizard writes this for you. |
| Topic property | The frontmatter property that groups and colours notes (default tema). Empty = no topics. |
| Notes visible per layer | In large vaults each layer shows its most connected notes; the rest appear when you search or open them. Default 150. |
| Source folders | One per line. If your notes cite files by path (raw/articles/x.md, a PDF, a day's folder), those files appear as sources. folder/* groups each subfolder into one node. Empty by default: with no folders, the map is the one you know. |
| Show cited sources | On demand: sources appear when you tap the note that cites them and leave with it. All: always in the first layer. Do not show. If you already had them on, you stay on All. |
| Connections section | The heading at the end of each note where approved reasons are written. |
hub: true (frontmatter) |
In the last layer, the note that carries the topic name on the map. When several notes share a topic there, only the hub is labelled with the topic; the others keep their title. Without the property, it is the first one. |
| Reload settings from data.json (command) | If you edit data.json by hand, read it again without restarting Obsidian. |
| Export data (JSON and CSV) (tools) | The graph exactly as the plugin counts it: nodes, links with reason and sentence, and the counting rules. For Python, spreadsheets or Graphify. |
| Only long-range links (tools) | Shows only the links that jump two layers or more: where two halves of the vault touch end to end. |
| External links property | Frontmatter properties holding web links (Title | https://…, https://…, user/repo). Empty = the section never appears. Only http/https are opened. |
| Last-modified property | If set, approving a reason or a summary also writes today's date in that property. Empty by default: the plugin never touches your frontmatter. |
| Animation | Light pulses travelling along the links. Only while the map is visible, and off if your system asks for reduced motion. |
A user reimplemented the engine in Python to predict the counts before touching their vault, and they matched. These are the rules, written once (they also ship inside the exported JSON):
.md file inside a folder assigned to a layer, minus the excluded ones. The most
specific folder wins. Sources cited by path do not count as notes.[[wikilink]]. A→B and B→A are one link. Self-links and links to notes off the map are ignored.- [[note]] — reason in the connections section; failing that, the first
body line where the link appears.hub: true; if none has it, the first one in that
layer with the topic declared.data.json, so they never
travel through git, Obsidian Sync or a backup.The plugin does not save tokens by itself — the structure does, and the plugin is what makes the missing pieces impossible to ignore. Its own AI feature spends tokens: about 3,900 of input per suggestion, roughly $0.04 with Claude Opus 5.
What pays off is the other direction. A reason is written once and read many times: by you, and by any agent that works against your vault. The three rows above were measured on the author's vault — 254 notes, 916 links, ~147,800 tokens of wiki — by counting characters ÷ 3.7 and comparing what each question costs to answer with and without the written structure. Your numbers will differ; the ratios are what travel.
The honest caveat is in the figure: nobody dumps a whole wiki on every question — an agent greps. The defensible comparison is the first row, reading the reason instead of opening both notes, and that one is 115×.
Only when you press Approve on an AI suggestion, and only as an appended line in the connections section of that one note. Existing text is never rewritten or reordered, and your frontmatter is not touched unless you fill in the Last-modified property setting, which is empty by default.
Everything else — layers, colours, paths, gaps, exports — is read-only. Exports are the one other write: a PNG into the folder you choose.
There is no telemetry, no analytics and no server: the plugin makes no network request except the AI call you ask for, to the provider you configured.
It does read the list of every note in your vault — a map cannot be drawn from a subset — and the release assets carry GitHub attestations, so you can verify they were built from this source:
gh attestation verify main.js --repo DBB-FC/why-graph
With any vault you see the map. If your notes also cite their sources by path — as an LLM wiki does, with its raw sources in a folder — the map also shows where each thing came from:
A citation is an explicit path: in backticks, in a [[wikilink]], in a link, or bare up to the
first space. Citing a folder is not the same as citing every file inside it.
Tested on a vault with 5,043 notes and 17,526 links. Each layer draws its most connected notes (default 150) and reveals the rest on demand, so the map stays interactive instead of drawing a grey rectangle. Radial view caps each ring at 80.
The map draws on a dark canvas in both light and dark Obsidian themes — like a night sky, so the topic colours and the light pulses along the links stay readable. The panel, the chips and the settings follow your theme.
Everything runs from src/; the release is one esbuild pass, unminified.
npm install
npm test # builds src/main.js → main.js and checks the translations
npx eslint src/ # the official Obsidian plugin linter
./instalar-en-vault.sh /path/to/your/vault
src/main.js is the source. main.js in the repository root is the build output and is not
committed — releases carry it. The build is a single esbuild pass, no minification, so the released
file stays readable.
The README animation is generated the same way, from the real plugin over a demo vault:
./pruebas/mirador/demo.sh.
MIT. Free for anything — personal or commercial — and you may fork it, change it and redistribute it, keeping the copyright notice.
The plugin itself charges nothing and has no paid tier. The Obsidian directory still labels it optional payments, because it can connect to AI services that charge you directly with your own key; the local provider (Ollama, LM Studio) costs nothing at all.
Bugs and ideas: GitHub issues. Include your Obsidian version, your platform, and the number of notes and links the map header shows.
Built by Felipe Córdova · Powered by DBB Labs
That is the company's name, not a slogan: a studio of custom systems.
Buy what is standard. Build what is strategic.
Free, MIT, no paid tier. If the map showed you something you had not seen, a beer is welcome — and if it did not, the plugin still works exactly the same.