A powerful Obsidian plugin that helps you fix dangling links (wikilinks to non-existent notes) by finding them and redirecting all references to existing notes.
When writing notes in Obsidian, you sometimes create a link to a note that doesn't exist yet like [[dangling-link]]. Obsidian helpfully shows this as an option when searching and lets you create it. But what if you just misspelled the link and a note like [[this-dangling-link]] already exists? You now have to create dangling-link and merge it with this-dangling-link to "repair" the references.
Link Updater makes this process simple:
- Invoke the "Update dangling link" command
- Select a dangling link from the list (with reference counts)
- Choose an existing file to redirect the references to
- All references across your entire vault are updated automatically
- Find Dangling Links: Automatically scans your vault for wikilinks that don't resolve to existing files
- Reference Counts: Shows how many references exist for each dangling link (e.g., "my-note (5 references)")
- Vault-Wide Updates: Updates ALL references across all files in your vault at once
- Preserve Display Text: Maintains link aliases like
[[old-link|Custom Display]]→[[new-link|Custom Display]] - Folder-Aware: Respects folder paths -
[[folder/note]]is treated differently from[[note]] - Smart Caching: Uses intelligent caching with auto-invalidation for performance
- Safe Updates: Uses Obsidian's native file modification API (fully compatible with Obsidian's undo)
- Download the latest release from the Releases page
- Extract the files
main.jsandmanifest.jsonfrom the zip - Create a folder named
obsidian-link-updaterin your vault's.obsidian/plugins/directory - Copy
main.jsandmanifest.jsoninto the new folder - Reload Obsidian
- Go to Settings → Community plugins → Installed plugins
- Enable "Link Updater"
If you want to build from source or contribute to development:
# Clone the repository
git clone https://github.com/felixscherz/obsidian-link-updater.git
cd obsidian-link-updater
# Install dependencies
npm install
# Build the plugin
npm run build
# Or run in development mode (watches for changes)
npm run dev
# Symlink to your vault for testing
./symlink-plugin.sh /path/to/your/vaultAfter symlinking, enable the plugin in Obsidian's settings and reload (Cmd/Ctrl+R) after making code changes.
-
Open the Command Palette (
Cmd+Pon Mac,Ctrl+Pon Windows/Linux) -
Search for "Update dangling link" and select it
- Alternatively, you can set a custom hotkey in Settings → Hotkeys
-
Select a Dangling Link
- The modal shows all dangling links with reference counts
- Example:
my-misspelled-note (3 references) - Use the search box to filter links
- Navigate with arrow keys, select with Enter
-
Choose a Target File
- The second modal shows all existing files in your vault
- Search and select the file you want to redirect to
- Navigate with arrow keys, select with Enter
-
Done!
- All references are updated instantly
- You'll see a confirmation: "Updated X references from [[old]] to [[new]]"
Let's say you have these files:
project-notes.mdcontains:See [[poject-notes]] for more infoideas.mdcontains:Link to [[poject-notes]]
Notice the typo: poject-notes instead of project-notes.
Using Link Updater:
- Run "Update dangling link" command
- See
poject-notes (2 references)in the list - Select it
- Choose
project-notesfrom the file list - Both files are updated to reference
[[project-notes]]
The plugin handles various wikilink formats:
| Original Link | Target | Result |
|---|---|---|
[[old-note]] |
new-note |
[[new-note]] |
[[old-note|Display Text]] |
new-note |
[[new-note|Display Text]] |
[[folder/old-note]] |
folder/new-note |
[[folder/new-note]] |
[[folder/old|Custom]] |
other/new |
[[other/new|Custom]] |
Note: The plugin only updates wikilink format [[link]]. Markdown links [text](link.md) are not currently supported.
The plugin respects folder paths explicitly:
[[folder/note]]only matches files in that specific folder path- Uses Obsidian's built-in link resolution for accuracy
- Handles relative and absolute paths correctly
- Caching: Dangling links are cached after the first scan
- Auto-Invalidation: Cache automatically refreshes when files change
- Debouncing: Batch file changes are handled efficiently (500ms debounce)
- Large Vaults: Tested and optimized for vaults with hundreds of files
- Minimum Obsidian Version: 0.15.0
- Desktop & Mobile: Works on both desktop and mobile platforms
- Safe: Uses Obsidian's native APIs - fully compatible with:
- Obsidian's undo/redo
- Git version control
- Sync plugins
- Backup systems
If you expect to see dangling links but the plugin says "No dangling links found":
- Make sure you're looking for wikilinks
[[link]], not markdown links[text](link.md) - Check if the links actually don't resolve (they show in purple in Obsidian)
- Try reloading Obsidian to refresh the cache
If links aren't being updated:
- Ensure the files aren't read-only
- Check the console (Cmd/Ctrl+Shift+I) for errors
- Try reloading Obsidian
If the plugin is slow:
- The initial scan of a large vault may take a few seconds
- Subsequent operations use caching and should be fast
- Check the console for any errors
obsidian-link-updater/
├── src/
│ ├── main.ts # Plugin entry point
│ ├── components/
│ │ ├── DanglingLinkModal.ts # First modal: select dangling link
│ │ └── TargetFileModal.ts # Second modal: select target file
│ ├── services/
│ │ ├── LinkCollector.ts # Finds dangling links
│ │ ├── LinkUpdater.ts # Updates wikilinks
│ │ └── VaultCache.ts # Caching layer
│ └── utils/
│ ├── LinkParser.ts # Wikilink parsing utilities
│ └── types.ts # TypeScript type definitions
├── manifest.json # Plugin manifest
├── package.json # NPM configuration
└── README.md # This file
# Install dependencies
npm install
# Development build (watches for changes)
npm run dev
# Production build
npm run buildContributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Future enhancements being considered:
- Support for markdown links
[text](link.md) - Batch operations (update multiple dangling links at once)
- Preview changes before applying
- Settings panel (exclude folders, etc.)
- Undo functionality (beyond Obsidian's built-in undo)
- Statistics dashboard
MIT License - see LICENSE file for details.
Created by Felix Scherz
Inspired by the workflow challenges of maintaining a large Obsidian vault with many interconnected notes.
If you encounter issues or have feature requests:
- Open an issue on GitHub
- Check existing issues first to avoid duplicates
If you find this plugin useful, consider:
- Starring the repository on GitHub
- Sharing it with other Obsidian users
- Contributing improvements
Happy note-taking!