README file from
GithubAt Link
A small Obsidian plugin that opens an internal-link autocomplete when you type @ in the editor.
Companion to PhraseSync — PhraseSync handles mid-sentence linking, while At Link provides an explicit @ trigger for when you deliberately want to insert a wikilink.
Behavior
- Type
@at the start of a line or after whitespace → suggestion popup opens. - Characters you type after
@become the query. - Suggestions are drawn from:
- Vault markdown files (matched on basename)
- Headings from
app.metadataCache - Blocks that already have a
^id
- Selecting a suggestion replaces
@querywith a proper wikilink:- File →
[[Note Title]] - Heading →
[[Note Title#Heading]] - Block →
[[Note Title#^blockid]]
- File →
- Typing a space or pressing
Esccloses the popup and leaves the@intact. @inside an email address (e.g.foo@bar) does not trigger — only@at line start or after whitespace fires.
Ranking: exact prefix → case-insensitive prefix → fuzzy subsequence. Capped at 20 results.
Build
npm install
npm run dev # watch build
npm run build # one-shot production build
The build produces main.js at the project root.
Install in your vault
Copy these three files into your vault's plugin folder:
main.js
manifest.json
styles.css
Destination: <your-vault>/.obsidian/plugins/at-link/ — create the at-link/ folder if it doesn't exist.
Then in Obsidian: Settings → Community plugins → Installed plugins → enable "At Link".
If community plugins are off, toggle "Restricted mode" off first.
Iterating
While npm run dev is running, the esbuild watcher rebuilds main.js on every source change. After each rebuild, either:
- Copy
main.jsover to the vault plugin folder, or - Symlink the vault plugin folder to this project directory so it picks up rebuilds directly.
Reload the plugin in Obsidian (Settings → Community plugins → toggle off/on, or use the Hot Reload plugin).
Scope
Not in v1:
- Tags
- Auto-creating block IDs on selection (only existing
^idblocks appear) - Settings tab
- Suppressing the trigger inside code blocks
- Alias-aware matching