Bruno Ribeiro2k downloadsShows where a hovered link points in Live Preview and source mode.
Link Tooltip is a lightweight Obsidian plugin that shows where a hovered link points, in Live Preview and source mode.
A tooltip appears for any link that hides its destination behind a label: every Markdown link [label](destination) — an external URL or an internal note path — and aliased wikilinks [[target|alias]]. Bare links already show their destination as text (a raw URL, or an unaliased [[Note]]), so by default they get no tooltip. Optionally, internal links can show the file they point to in the vault (e.g. Projects/2026/Note.md), which gives unaliased wikilinks a tooltip too when their folder isn't visible.
Obsidian already shows native browser-style tooltips for real <a href> elements in Reading mode, so Reading mode is intentionally out of scope. This plugin targets the editor, where links are rendered by CodeMirror as spans and the destination is not available as an href attribute.
loadData() / saveData() plugin data APIs.Projects/2026/Note.md#Heading) instead of the target as written. Also adds tooltips to links without an alias when their path isn't already visible. A link to a note that doesn't exist shows its target with "not created yet". Off by default; shown while internal tooltips are on.Every setting shows up in Obsidian's settings search. Requires Obsidian 1.13 or later.
For local testing, use the deploy script. It builds the plugin, creates the plugin folder if needed, and copies main.js, manifest.json, and styles.css.
npm install
npm run deploy -- --vault "/path/to/Vault"
You can also target the plugin folder directly:
npm run deploy -- --plugin-dir "/path/to/Vault/.obsidian/plugins/link-tooltip"
For repeated local deploys, set OBSIDIAN_VAULT or OBSIDIAN_PLUGIN_DIR in your shell and run npm run deploy.
After deploying, restart Obsidian or reload plugins, then enable Link Tooltip in Obsidian's Community plugins settings.
Open Obsidian's developer console with Ctrl+Shift+I on Windows/Linux or Cmd+Option+I on macOS, then check the Console tab.
If the plugin enabled but hover display is not working:
link-tooltip, with the log level set to include Verbose.When debug logging is enabled, Obsidian should show a small notice and the console should show console.debug entries prefixed with [link-tooltip]. Chromium hides debug entries at the default log level, so pick Verbose in the console's level dropdown.
The hover diagnostics include the hovered position and the parsed link (its range, destination, kind, and whether it is aliased).
npm install.npm run build.link-tooltip inside your vault's .obsidian/plugins/ directory.main.js, manifest.json, and styles.css into .obsidian/plugins/link-tooltip/.Install directly from Obsidian:
To test a pre-release build with BRAT:
brunoribeiro2k/obsidian-link-tooltip.Install dependencies once with npm install, then use the npm scripts below. A Makefile wraps them (make lists the targets), and adds make open to open the generated test vault in Obsidian (the first run registers the vault, which needs Obsidian closed).
npm run dev — esbuild in watch mode (rebuilds main.js on change, inline sourcemaps).npm run build — the done-gate: typecheck (tsc), lint (eslint), then the production bundle.npm run lint — ESLint on its own, with the official eslint-plugin-obsidianmd rules the community review applies.npm test — the node --test unit tests (isExternalUrl, repeatsVisibleText).npm run setup-vault — build, then generate the gitignored test-vault/ from the committed fixtures with the plugin deployed and enabled. Open it in Obsidian to verify hover detection, which has no automated coverage (it needs a live editor).npm run deploy -- --vault "/path/to/Vault" — build and copy the plugin into a vault for local testing.Work on a feature branch (or directly on a release branch) and open PRs against main. CI runs lint, build, and tests on every pull request.
Releases are PR-driven, and tagging plus the GitHub release draft are automated — you only prepare the version bump.
main (git checkout main && git pull --ff-only), run npm run release -- <patch|minor|major>. It refuses to run anywhere but the tip of origin/main, so the release carries exactly what was merged. This bumps the version (manifest.json, package.json, versions.json) without creating a git tag, lands it on a release/<version> branch, commits, pushes, and opens a PR to main. If you've already created a release branch for this version with a descriptive suffix (e.g. release/1.0.0-first-final) at that same commit, run the command from that branch and it's kept as-is rather than switched to the bare release/<version>.main.v prefix), and creates a draft GitHub release with main.js, manifest.json, and styles.css attached. It links the draft from a comment on the merge commit and from the workflow run summary.The workflow is the sole creator of git tags (so a tag always points at the merged main commit), which is why npm version is configured never to tag here (git-tag-version=false in .npmrc).