Easy Links
approvedby Saiki77
Hide the folder path in internal links so only the file name shows, in both reading view and live preview, while keeping the link target intact. Optional smart [[ suggester floats notes from your most-used folders to the top. - This plugin has not been manually reviewed by Obsidian staff.
Easy Links
Internal links that include a folder, like [[Personal/SurfacerAI]], normally
display the whole path. Easy Links shows just the file name —
SurfacerAI — while keeping the link target untouched, so clicking still
navigates exactly where it did. Aliased links like [[Personal/SurfacerAI|Alias]]
are left alone.
Features
- Hide the folder path — un-aliased internal links show only the basename
(
A/B/Note→Note), in both reading view and live preview. Heading and block refs are preserved: only slashes in the folder path are collapsed, soA/B#Heading→B#Headingand a slash inside an anchor (Note#A/B) is left untouched. - Embeds keep their full path —
![[A/B]]is not shortened in either mode, so embed labels stay consistent between live preview and reading view. - Edit-friendly live preview — optionally reveal the full path on the line your cursor is on, so links stay easy to edit.
- Plain link color — optionally color internal links like normal text instead of the accent color.
- Smart link suggester — optionally replace Obsidian's built-in
[[popup for the plain case, floating notes from your most-used (or hand-picked) top-level folders to the top of the autocomplete. Off by default. Heading (#), block (^), and alias (|) completions still use the built-in popup.
Smart link suggester
When Smart link suggester is on, typing [[ opens a popup that ranks notes
from your priority folders first, then by fuzzy match. It matches against both a
note's file name and its frontmatter aliases, just like the built-in popup, and
inserts links using your configured link format (fileManager.generateMarkdownLink),
so wikilink-vs-markdown and shortest-path settings are respected. An empty query
(just [[) lists priority-folder notes most-recently-modified first.
Priority folders are auto-detected as the top-level folders containing the most markdown notes, recomputed as the vault changes. Set Priority folders to pin specific folders instead.
This feature only intercepts the plain [[query case (no ], #, ^, |).
Anything else falls through to Obsidian's native suggester untouched. To win
precedence over the core link popup it reorders Obsidian's internal editor-suggest
list; this is an undocumented internal API, accessed defensively and reverted
when the feature is turned off or the plugin unloads, so disabling it fully
restores the stock behavior.
Settings
- Hide folder path in reading view — shorten un-aliased link labels in reading view.
- Hide folder path in live preview — visually collapse the folder prefix in live preview.
- Reveal full path on the active line — show the full path on the cursor's line for editing.
- Plain link color — color internal links like normal text.
- Smart link suggester — float notes from your most-used folders to the top
of the
[[autocomplete (off by default). - Priority folders — comma-separated top-level folder names to float to the top, in order. Empty = auto-detect the folders with the most notes.
- Number of priority folders — how many top-level folders to auto-detect as priority (1–5; ignored when Priority folders is set).
Development
A TypeScript project bundled with esbuild (entry src/main.ts → root main.js).
The live-preview feature uses Obsidian's bundled CodeMirror 6, so
@codemirror/view and @codemirror/state are dev-only dependencies (esbuild
externalizes @codemirror/*; they are never bundled).
Obsidian declares an exact peer on @codemirror/state, while @codemirror/view
pulls a newer patch of it, so .npmrc sets legacy-peer-deps=true to let npm
resolve the tree. A package-lock.json is committed so npm ci is reproducible
in CI.
npm install # install dev dependencies (honours .npmrc legacy-peer-deps)
npm run dev # esbuild watch build (inline sourcemap, no minify)
npm run build # tsc --noEmit typecheck, then a minified production bundle
npm run lint # eslint with the Obsidian plugin-guideline rules
styles.css is hand-written at the repo root and auto-loaded by Obsidian.
main.js and styles.css are committed — they are the release assets.
Release
npm version <x.y.z> # bumps package.json, syncs manifest.json + versions.json, makes a bare tag
git push --follow-tags
Pushing the tag triggers .github/workflows/release.yml, which runs npm ci,
lints, builds, verifies manifest.json matches the tag, attests build
provenance, and publishes a GitHub release with main.js, manifest.json, and
styles.css.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.