Jordan Vasu3 downloadsBulk-link all unlinked mentions of the active note (and its aliases) across the vault.
Scans the active note for plain-text mentions of other notes' titles and aliases, then converts them to wikilinks in one click.
Warning: This operation modifies the active note in-place. It is irreversible without a vault backup. Back up your vault before using this plugin.
When invoked on a note, the plugin:
aliases from frontmatter.[[Target Note]] (exact case) or [[Target Note|matched text]] (alias or differing case).Internal Validity beats Validity at the same position.\p{L} lookarounds, not \b, so Café and similar terms match correctly.# Install dependencies
npm install
# Development build (watch mode)
npm run dev
# Production build
npm run build
# Run tests
npm test
The production build outputs main.js in the project root.
https://community.obsidian.md/plugins/link-unlinked-mentions
npm run build to produce main.js.<vault>/.obsidian/plugins/link-unlinked-mentions/
main.jsmanifest.jsonstyles.cssCtrl/Cmd + P) and run "Link mentions of other notes in current note", or click the link icon in the left ribbon.A notice confirms how many mentions were linked.
The following regions in the active note are never modified:
| Zone | Example |
|---|---|
| YAML frontmatter | --- … --- at file start |
| Fenced code blocks | ``` … ``` and ~~~ … ~~~ |
| Inline code | `code` |
| Math blocks | $$ … $$ |
| Inline math | $ … $ |
| Existing wikilinks | [[Note]], [[Note|alias]] |
| Markdown links | [text](url) |
| HTML comments | <!-- … --> |
| Tags | #tag |
Aliases are read from frontmatter via Obsidian's metadata cache. All three forms are recognised:
# Bare string
aliases: My Alias
# Block array
aliases:
- My Alias
- Another Alias
# Flow array
aliases: [My Alias, Another Alias]
Tests live in src/matcher.test.ts and use Vitest. The src/matcher.ts module has no Obsidian imports and runs entirely in Node.js.