Free tool · works now
Vault Health Inspector
Find broken wikilinks, ambiguous note targets, missing headings, and unresolved attachments before you move notes.
This is a website utility, not an app feature. It inspects Markdown notes and attachments in this browser tab, uploads nothing to any server, and never modifies your files.
9 files scanned (8 notes, 1 attachment) · 10 links parsed · 4 issues flagged (1 broken, 1 ambiguous, 1 missing heading, 1 missing attachment)
- Ambiguous target
Projects/Beta.md(line 3)[[Overview]]Multiple files match "Overview": Projects/Overview.md, Archive/Overview.md.
Suggested action: Specify the full relative path (e.g. [[Projects/Overview]]) to prevent unpredictable resolution.
- Broken link
Daily/2026-10-08.md(line 10)[[Roadmap 2027]]Target note "Roadmap 2027" does not exist in the vault.
Suggested action: Create the missing note or update the wikilink target.
- Missing heading
Notes/Meeting.md(line 4)[[Projects/Alpha#Budget]]Heading "#Budget" was not found inside "Projects/Alpha.md".
Suggested action: Verify the heading exists in "Projects/Alpha.md" or update the anchor text.
# Vault Health Inspection Report Checked: 2026-10-08 ## Summary - **Files scanned:** 9 (8 Markdown, 1 attachments) - **Links parsed:** 10 (6 valid, 4 issues flagged) - **Broken links:** 1 - **Ambiguous short targets:** 1 - **Missing headings:** 1 - **Unresolved attachments:** 1 - **Casing mismatches:** 0 ## Issues Detected | Source file | Line | Reference | Type | Explanation & Action | |---|---|---|---|---| | `Projects/Beta.md` | 3 | `[[Overview]]` | ambiguous-target | Multiple files match "Overview": Projects/Overview.md, Archive/Overview.md. **Action:** Specify the full relative path (e.g. [[Projects/Overview]]) to prevent unpredictable resolution. | | `Daily/2026-10-08.md` | 10 | `[[Roadmap 2027]]` | broken-link | Target note "Roadmap 2027" does not exist in the vault. **Action:** Create the missing note or update the wikilink target. | | `Notes/Meeting.md` | 4 | `[[Projects/Alpha#Budget]]` | missing-heading | Heading "#Budget" was not found inside "Projects/Alpha.md". **Action:** Verify the heading exists in "Projects/Alpha.md" or update the anchor text. | | `Notes/Design.md` | 4 | `![[wireframe-v1.png]]` | unresolved-attachment | Attachment "wireframe-v1.png" was not found in the vault. **Action:** Add the file to the vault attachments folder or verify the filename. | --- *Generated in-browser by Vault Health Inspector. No files were modified.*
"Source File","Line","Reference","Issue Type","Target","Heading","Explanation","Recommended Action" "Projects/Beta.md",3,"[[Overview]]","ambiguous-target","Overview","","Multiple files match ""Overview"": Projects/Overview.md, Archive/Overview.md.","Specify the full relative path (e.g. [[Projects/Overview]]) to prevent unpredictable resolution." "Daily/2026-10-08.md",10,"[[Roadmap 2027]]","broken-link","Roadmap 2027","","Target note ""Roadmap 2027"" does not exist in the vault.","Create the missing note or update the wikilink target." "Notes/Meeting.md",4,"[[Projects/Alpha#Budget]]","missing-heading","Projects/Alpha","Budget","Heading ""#Budget"" was not found inside ""Projects/Alpha.md"".","Verify the heading exists in ""Projects/Alpha.md"" or update the anchor text." "Notes/Design.md",4,"![[wireframe-v1.png]]","unresolved-attachment","wireframe-v1.png","","Attachment ""wireframe-v1.png"" was not found in the vault.","Add the file to the vault attachments folder or verify the filename."
Every cell is quoted. Leading characters such as =, +, -, and @ are prefixed with an apostrophe to guard against spreadsheet formula execution. The .csv download includes a UTF-8 BOM for cross-platform compatibility.
How link resolution works across Markdown tools
Markdown note applications use different conventions for connecting notes together. Standard CommonMark relies strictly on explicit file path targets (such as [Project Plan](docs/plan.md)), whereas modern knowledge base systems frequently use wikilinks (such as [[Plan]]).
Wikilinks offer speed when writing, but create portability pitfalls when collections grow or move between applications. When a link omits the containing folder, the application must search the vault for a note matching that name. If two folders have notes with identical names, different software resolves the link differently:
- Shortest path: Resolves to the first match found or the shortest relative distance from the active file.
- Root-first: Resolves to notes sitting at the vault root before looking inside nested subdirectories.
- Strict relative: Rejects links without explicit paths, treating unrouted wikilinks as missing files.
This inspector resolves targets deterministically. When a target matches multiple files in distinct directories, it marks the link as ambiguous rather than guessing which file the writer intended.
The core health checks
Every check evaluates structural integrity and portability without interpreting opinions or rewriting your files.
| Check code | Condition detected | Recommended remediation |
|---|---|---|
broken-link | A wikilink or markdown link points to a note that does not exist in the selected vault. | Create the target note or correct the destination filename. |
ambiguous-target | A short wikilink matches multiple notes in different folders. The tool lists all candidates. | Add an explicit relative path to the wikilink target (e.g. [[Projects/Doc]]). |
missing-heading | A link targets a specific heading anchor (#Heading), but that heading does not exist in the target note. | Add the missing heading to the destination file or update the anchor. |
unresolved-attachment | An embedded file or image (![[image.png]]) was not found in the selected vault folder. | Restore the media file into your vault attachments folder. |
external-skipped | Web links (http/https) are left untouched and are not pinged over the network. | No action needed; external web URLs are intentionally not pinged. |
code-block-ignored | Links and wikilink syntax inside fenced code blocks or inline code are treated as code examples and ignored. | No action needed; code examples are protected from link scanning. |
Why ambiguous short links happen
When you start a personal vault, filenames are usually unique. Over months of note-taking, project names repeat. You might have an Overview.md in Projects/Alpha/ and another Overview.md in Archive/Beta/.
If a third note contains [[Overview]], the link is ambiguous. While your current editor might happen to open one of them, exporting the vault to another application or publishing it as a website can break the connection or point to the wrong document. Disambiguating by adding the containing folder (e.g. [[Projects/Alpha/Overview|Overview]]) guarantees that every Markdown reader resolves the correct note.
Preflight checklist and safe migration workflow
- Back up before inspecting: Create an archive copy of your entire folder before running any tools or edits.
- Run the browser inspection: Select your vault directory above to catalog all references, headings, and attachments.
- Disambiguate duplicate targets first: Update ambiguous links so every wikilink names a distinct path.
- Repair broken notes and anchors: Create missing notes or update obsolete filenames. Ensure heading anchors match actual section headers.
- Export your audit report: Download the Markdown report or CSV inventory to verify all issues are resolved.
What this tool never does
- It never uploads, transmits or stores your files. Inspection runs entirely in your browser.
- It never mutates, renames or rewrites your files. It produces a diagnostic report, not automated edits.
- It never chooses arbitrarily when a short link is ambiguous. It flags every candidate path for human review.
- It does not use AI or external services. All link resolution uses deterministic path and heading indexing.
Its limits, printed
This utility operates entirely within your browser's local sandbox. It inspects up to 2,500 files and 5,000,000 characters of text per run. Individual notes exceeding 500,000 characters are flagged for review.
It does not execute external HTTP requests to verify web links, parse proprietary binary canvas schemas, or decrypt encrypted vaults. Link syntax located inside fenced code blocks or backtick spans is strictly protected and ignored. If your vault relies on daily meeting recordings and speech transcripts, the desktop app handles on-device call transcription in plain local Markdown.
The Vault Health Kit
Five portable reference files for auditing, repairing, and preparing Markdown notes. Copy and use them freely in your favorite editor.
readme.mdWhat the files are and how vault health checks work.migration-checklist.mdPreflight checklist for preparing notes before a migration.sample-vault-manifest.mdInventory of files and intentional reference defects in the sample vault.example-health-report.mdThe Markdown report generated from the sample vault.example-health-report.csvThe issues CSV export with formula guards and quoted fields.
The example reports in the kit are generated directly from the same deterministic engine that powers this page (pnpm kit:vault).
Questions
Related: opening an Obsidian vault in the app and local-only privacy architecture.
Do my vault files get uploaded anywhere?
No. Every check runs locally in your browser tab using the File System and Web APIs. Neither your note text, filenames, nor directory structures are ever transmitted over the network or saved to a server. Close the tab and all in-memory file indexes vanish.
Does this tool modify, rename, or delete any of my notes?
No. This is strictly a diagnostic inspector. It opens files in read-only mode in your browser memory and outputs an inspection report. It never rewrites wikilinks, touches file contents, moves assets, or mutates your local storage.
What is an ambiguous target?
Wikilinks allow short references like [[Overview]] without directory paths. If your vault has both Projects/Overview.md and Archive/Overview.md, an application cannot know which note was intended. This inspector flags every duplicate and lists the candidate paths so you can disambiguate them manually.
Why are code blocks and inline code ignored?
Notes frequently include documentation or code snippets with markdown syntax or bracket pairs (like [[example]] in a tutorial or array syntax in programming). Treating code snippets as real note links creates false positives. The inspector strips fenced blocks and inline code before parsing links.
Can it check whether external web links (http/https) are broken?
No, by design. Pinging external URLs from your browser would leak the URLs in your notes across the network and trigger CORS blockages. This tool inspects only the internal health and graph consistency of your local files.
Is this the same thing the desktop app does?
Related, but distinct. The Mac app is an invite-only Markdown editor with on-device meeting transcription and live graph features. This browser tool is a standalone utility that anyone can use right now in any browser to audit their notes before migrating or reorganizing them.
Notes that remain readable across decades.
Free during the private beta. Apple silicon Macs, macOS 14 or later.