Stop typing [[. Write a word, press Space — the wikilink is already there.
You type: Tokyo and back.
Your note says: [[Tokyo]] and back.
Works on desktop and mobile. Runs entirely offline. Zero setup: install, write, watch your vault connect itself.
Linkosaurus watches the words you finish and links them the instant you hit Space, Enter, or punctuation — ) . , ! ? : ;. You never stop writing.
| You type | Linkosaurus writes |
|---|---|
Tokyo |
[[Tokyo]] |
ML |
[[Machine Learning|ML]] |
Berlin. |
[[Berlin]]. |
(Paris) |
([[Paris]]) |
T-Rex - Facebook |
[[T-Rex]] - [[Facebook]] |
The word on the page isn't the note's name? Slip in an alias without breaking flow — // for one word, /// for phrases:
trip//Tokyo → [[Tokyo|trip]]
///cherry blossoms///Tokyo → [[Tokyo|cherry blossoms]]
And you don't even have to remember the note's name. Start typing the target and a popup floats in beside your cursor, fuzzy-matched from your note names, keywords, and frontmatter aliases:
trip//T▌
┌──────────────────┐
│ 🔗 Tokyo │
│ 🔗 T-Rex │
└──────────────────┘
Enter or Tab drops the finished link — [[Tokyo|trip]], fully formed. (Choose wisely; a trip to the T-Rex is a very different itinerary.)
Some notes can't be reached by typing alone — T-Rex - Feeding Schedule never gets a chance, because T-Rex links first. So summon the search: type ;; and the popup lists everything linkable in your vault, filtering as you type. Spaces are fine:
;;T-Rex - F▌
┌──────────────────────────────┐
│ 🔗 T-Rex - Feeding Schedule │
└──────────────────────────────┘
One keypress replaces the whole search — trigger and all — with [[T-Rex - Feeding Schedule]]. Too lazy to type the full name? ;;feed gets you there too. It's fuzzy.
Plain web addresses become clean Markdown links on their own:
| You type | Linkosaurus writes |
|---|---|
https://www.github.com |
[github.com](https://www.github.com) |
github.com |
[github.com](https://github.com) |
https://shop.example.com/p?id=1 |
[shop.example.com/p](https://shop.example.com/p?id=1) |
- Smart undo — with
OpenandOpen Sourcein your list, typingOpen S…quietly unlinks[[Open]]and waits for the longer match. You always get the most specific link. - Separators stay intact —
T-Rex - Facebook→[[T-Rex]] - [[Facebook]]. The dinosaur keeps its link, the platform gets its own (your T-Rex has social media, no judgement). - It learns your vault — every note name becomes linkable the moment the note exists; frontmatter
aliases:too. - Paste & dictation — pasted or dictated text arrives pre-linked in a single pass.
- Periodic auto-relink — optionally re-scan your vault on a schedule so old notes catch up with new keywords.
- Bulk commands — link a whole note or the whole vault in one go.
- Private by design — everything runs on your device. No network requests, ever.
When one keyword is the beginning of a longer one, Linkosaurus waits a beat to see where you're going.
With both Open and Open Source in your list:
Open→[[Open]]- You type
S→ Linkosaurus realisesOpen S…might becomeOpen Source, quietly undoes the link →Open S - You type
ource→[[Open Source]]
If your next character can't continue the longer term (Open H…), the original [[Open]] link simply stays. You never have to think about it.
The suggestion popup only appears inside the alias syntax (// and ///, including custom delimiters) — normal typing stays popup-free. Keep typing to narrow the list (Tky still finds Tokyo), press Esc to dismiss without a trace, or finish the alias by hand; the popup never picks for you. Both accept keys have their own toggle: turn Enter off to keep it for line breaks and link with Tab alone, or the other way around.
The search only starts when you mean it: the trigger does nothing mid-word, doubled up, or followed by a space — so if you change it to * (it's configurable), your bullet lists and bold text stay popup-free. While a search is active the auto-linker stays out of its way, and Esc always dismisses cleanly. Mappings behave exactly like the auto-linker: picking ML inserts [[Machine Learning|ML]].
The display text strips the protocol, www., query string, fragment, and trailing slash; the link target keeps the full URL. Bare domains are only linked when their top-level domain is in your allowlist (defaults: de com org net io shop app dev — editable). Toggleable.
Linkosaurus reads the aliases: field from your YAML frontmatter. If Tokyo.md lists Edo as an alias, typing Edo links straight to [[Tokyo|Edo]]. Toggleable.
tokyo, Tokyo, and TOKYO all resolve to the same note. Toggleable.
New keywords don't reach back in time on their own — a note created today won't have its name linked in a note you wrote last week. Turn on periodic auto-relink and Linkosaurus re-scans the vault on a schedule (1–60 minutes), converting matches it finds in plain text. It also fires automatically (debounced) when you create or rename a note. Notes you have open are skipped so your cursor never jumps, and every existing rule is respected — blocklist, code blocks, frontmatter, URLs, and self-links.
Off by default; turn it on if you like your whole vault kept in sync.
| Command | What it does |
|---|---|
| Auto-link keywords in current note | Links every matching keyword in the note you're in, in one pass |
| Auto-link keywords in all notes | A one-shot sweep across the whole vault (open notes are skipped) |
| Link selection and add to keyword list | Links the selected word and remembers it as a keyword — assign a hotkey for the fastest possible workflow |
It deliberately does nothing:
- Inside existing
[[wikilinks]] - Inside
[markdown](links) - Inside fenced or inline code blocks
- Inside URLs (unless URL auto-linking is on)
- Inside YAML frontmatter
You keep your own keywords in the plugin settings, one entry per line:
# Comments start with #
London
Tokyo
# Alias mapping: keyword = target note
ML = Machine Learning
London— keyword and target are the same →[[London]]ML = Machine Learning—MLis what you type,Machine Learningis the note it links to →[[Machine Learning|ML]]- Lines starting with
#are comments; empty lines are ignored - Manual entries always take priority over auto-detected vault keywords
Linkosaurus ships with more knobs than most people will ever need — every option has a plain-language explanation, so browse the settings tab and the thing you're looking for is probably already there.
| Setting | Description |
|---|---|
| Keyword list | Your manually defined keywords |
| Case-insensitive matching | Ignore case when matching |
| Single-word alias delimiter | Inline alias delimiter for single-word display text (default //) |
| Multi-word alias delimiter | Inline alias delimiter for multi-word display text (default ///) |
| Alias target suggestions | Autocomplete popup for the target part of an alias (on by default) |
| Note search popup | The ;; quick search across everything linkable (on by default) |
| Search trigger | Characters that open the note search (default ;;) |
| Accept suggestion with Enter | Enter links the highlighted suggestion (on by default) |
| Accept suggestion with Tab | Tab links the highlighted suggestion (on by default) |
| Auto-detect vault links | Use every note name in the vault as a keyword |
| Include frontmatter aliases | Use aliases: fields from frontmatter as keywords |
| Minimum keyword length | Floor for auto-detected keyword length (0 = no limit) |
| Blocklist | Keywords excluded from auto-linking (e.g. Home, Inbox, Daily) |
| Folder filter mode | Include or exclude folders |
| Folder filter | Folders to filter from vault scanning |
| Enable periodic auto-relink | Periodic vault scan that retroactively links keywords (off by default) |
| Relink interval (minutes) | How often to scan (1–60 minutes, default 5) |
| Auto-link website URLs | Convert http(s)://… and bare domains to Markdown links (on by default) |
| URL top-level domains | TLDs recognised for bare domains (one per line) |
Privacy is the default, not a feature. Linkosaurus runs entirely on your device — no notes, keywords, or URLs ever leave your vault, and the plugin makes no network requests of any kind. The only thing hosted anywhere is the open-source code, right here on GitHub.
- Open Settings → Community plugins → Browse
- Search for Linkosaurus
- Click Install, then Enable
- Download
main.jsandmanifest.jsonfrom the latest release - Drop them into
<vault>/.obsidian/plugins/autolink-keywords/ - Enable Linkosaurus under Settings → Community plugins
I built Linkosaurus because I wanted linking to disappear as a task — in a good vault the connections are the whole point, and stopping to type brackets pulls you out of writing every single time. It's a small, one-person project, meant to stay quiet and fast: a plugin you forget is running until you notice your notes are all connected.
If you hit a bug, want a feature, or just want to tell me how you use it, head over to GitHub — I read everything, and it's what keeps the plugin moving.
Happy linking. 🦕