The wiki reader that untangles your links.
Mermaid, DBML, backlinks and a graph — offline, from any folder.
An LLM writes [[Attention Is All You Need]]; the file is
attention-is-all-you-need.md. Detangle resolves it, tells you which
rule it used, and lists every link it couldn't.
Free · Offline · No account · MIT
[[Attention Is All You Need]] -> entities/attention-is-all-you-need.md normalized-name [[getting started#What's next?]] -> wiki/getting-started.md#whats-next case + slugified-anchor [Setup](wiki/setup) -> wiki/setup/index.md folder-index ![[diagram.png|300]] -> assets/diagram.png (width 300) extension probe [[Vaswani]] -> entities/vaswani.md note-relative path [[Transformer]] -> AMBIGUOUS: concepts/…, entities/… needs a choice [[Dose Response]] -> unresolved 3 inbound
Your links don't have to be perfect.
Every other viewer matches link text against filenames and shows you a dead link when they differ. Detangle tries thirteen rules in order, stops at the first that matches, and tells you which one fired.
1 exact vault path [[wiki/setup/index]] 2 note-relative path a sibling of this page 3 case-sensitive filename [[setup]] 4 path suffix [[setup/index]] 5 case-insensitive filename [[Setup]] 6 normalized name [[Attention Is All You Need]] 7 alias or title aliases:, title:, first H1 8 identifier id:, uid:, permalink:, slug: 9 folder index [Setup](wiki/setup) 10 encoding variant %20, NFC vs NFD 11 extension probe ![[diagram]] 12 nearest name suggested, never followed 13 placeholder reported, not hidden
-
A guess always looks like a guess.
Exact matches are drawn as ordinary links. Anything resolved by a fallback gets a dotted underline and a hover that names the rule and the file. A viewer that guesses silently is worse than one that fails loudly.
-
Ambiguity is a question, not a coin flip.
When a name matches two files, both are listed, the shortest path is used meanwhile, and your choice is remembered for that vault.
-
Frontmatter references are links.
sources:,related:,parent:and five more spellings are resolved like any other link. Dropping them is why other tools' graphs are smaller than the wiki really is. -
Anchors survive prose.
#What's next?matches the heading it names — raw text first, then the slug, then block ids, uuids, line ranges and PDF pages. A fragment that misses never costs you the page.
Mermaid and DBML, rendered offline.
No Node, no Chromium, no CDN, and no network access of any kind. Both renderers are .NET libraries running in the same process as the reader.
Mermaid
Twenty-four diagram types through a pure .NET implementation. Renders are cached beside the vault by source and theme, so re-opening a page is instant.
DBML
Parsed by a recursive-descent parser written for this app and drawn as an ER diagram. The translation is lossy, so everything it drops — defaults, notes, indexes, table groups — is listed under the picture instead.
Failures show their source
A fence that will not parse shows its text and the parser's complaint, with the line. It never renders an empty box.
It already knows what kind of wiki this is.
The conventions genuinely differ — the same link text means different things in different tools — so the folder is sniffed before it is read.
See the shape of what the model wrote.
Node size is inbound links, colour is frontmatter type, hollow means nothing links here, and a dashed outline is a page something links to that nobody wrote.
-
Missing pages are drawn.
In a wiki a model produced, they are the shape of the work left to do.
-
Local mode.
The neighbourhood of the page you were reading, N hops out, walked in both directions — a page's backlinks are as much its neighbourhood as its own links.
-
It stays interactive.
Repulsion goes through a Barnes-Hut quadtree spread across cores: about 11 ms per simulation step over a 5,000-page vault, inside a 33 ms frame. Above 1,500 nodes it folds to one node per folder, because a hairball is not a picture.
nodes 6,456 1,454 missing pages edges 21,655 41,655 links resolved layout 11.5 ms per step, 8 cores budget 33.0 ms 30 frames a second fold > 1,500 one node per folder
Find it before you finish typing.
SQLite FTS5 over the whole vault, with a field syntax for the things frontmatter actually holds — and one list of everything wrong with the links.
attention the word, ranked by bm25 "is all you need" the exact phrase type:concept frontmatter type tag:llm and everything under llm/ path:wiki/ a folder updated>2026-06-01 changed since a date
-
Every broken link, in one list.
Broken, ambiguous, non-canonical, orphaned, stale, duplicated, oversized, and malformed frontmatter — each with the file and the line.
-
Fix all safe.
Rewrites only the links that have exactly one correct answer. Ambiguous and broken links are never touched, because neither one does.
-
Or write the missing page.
One click stubs the file a broken link was pointing at, from your vault's own template, so it looks like the notes around it.
Try it without installing anything.
The real reader, compiled to WebAssembly, holding a small wiki written the way a model writes one. Open your browser's network tab: after the page loads, it stays empty.
Same renderer, same resolver, same diagrams. The desktop build adds search, the file watcher, editing and export. Jump straight to the Mermaid page or the DBML page.
Built like the tool it is.
Local-first is a set of decisions, not a slogan. These are the ones that cost something.
It does not change your files.
Unless you ask: saving, applying a fix, creating a missing note, or normalizing
links. Its index lives in a .detangle/ folder you can delete.
Exports keep the links.
Static site, one HTML file, PDF, or normalized markdown — all built from the resolved model, so a link found by an alias is a working link in the output.
MIT, and self-contained.
One binary with the runtime inside it. Nothing to install first, no version to match, and no dependency that can go missing.
Read it before you download it.
Nine pages, written for somebody deciding whether this is worth the disk space.
Point it at a folder.
Version 0.1.0. Free, MIT, and the same build on every platform.
macOS
Download Detangle-osx-arm64.dmg for Apple Silicon, or
Detangle-osx-x64.dmg for Intel, from
the latest release.
Open it and drag Detangle to Applications.
The build is not notarized, so the first launch needs one extra step: right-click the app and choose Open, then confirm. Or clear the quarantine flag yourself:
Linux
Download the AppImage from the latest release, make it executable, and run it. Nothing is installed.
Or install the .deb, which adds a desktop entry:
x64 and arm64 both build. The optional WebView diagram backend wants
libwebkit2gtk-4.1-0; nothing else does.
Windows
Download Detangle-win-x64.exe from
the latest release
and run it. There is also a portable zip if you would rather not install anything.
The build is not signed with a paid certificate, so SmartScreen will warn you the first time. Choose More info, then Run anyway.
Every release ships SHA256SUMS, so you can check what you downloaded is
what was built. Signing certificates cost money this project does not take, which is
the whole reason for the warnings above — the code is
right here if you would rather
build it: dotnet publish src/Detangle.Desktop and nothing else.