Vault - Not A Typo
approvedby Remi HOEPPE
Syncs a markdown word list from your vault into Obsidian's custom spellcheck dictionary. - This plugin has not been manually reviewed by Obsidian staff.
Vault - Not A Typo
An Obsidian plugin that reads a markdown word list from your vault and injects it into Obsidian's spellchecker — so proper nouns like character names, place names, and invented words stop being flagged as errors.
Desktop only. Mobile is not supported.
The problem
Obsidian's spellchecker flags proper nouns as errors. The only native fix is to right-click each word and add it individually, which doesn't travel with your vault if you move or share it.
The solution
Keep a plain dictionary.md file inside your vault. This plugin reads it and registers every word with your operating system's spellchecker — the same store used by right-click → Add to dictionary — so the underlines disappear, including on macOS where a custom JS provider has no effect. The word list is the source of truth: it travels with your vault (git, Obsidian Sync, sharing), and on any machine with the plugin installed the words are re-registered from the file.
Note: because the OS spellchecker dictionary is a single per-user store, registered words are system-wide and persist across restarts (visible to other apps while present). This is an accepted trade-off — the plugin makes the source list portable, not the effect isolated.
Installation
From the Obsidian community plugin browser (once listed)
- Open Settings → Community Plugins → Browse
- Search for Vault - Not A Typo
- Click Install, then Enable
Manual install
- Download the latest release from the Releases page
- Unzip and copy the
vault-not-a-typofolder into your vault's.obsidian/plugins/directory - Open Settings → Community Plugins and enable Vault - Not A Typo
Setup
Create a file called dictionary.md in your vault root (or any path you prefer — you can change it in settings):
# Place names
Phandalin
Faerûn
Neverwinter
# Factions
Zhentarim
Lionshield
# Characters
Gundren
Sildar
Format rules:
- One entry per line. An entry can be a single word or a multi-word proper noun (e.g.
Baldur's Gate) — write it the way you read it. Under the hood each entry is split into its component words and registered individually. - Lines starting with
#are treated as section headers and ignored - Blank lines are ignored
- List prefixes like
- wordand**word**markers are stripped automatically - Internal apostrophes and hyphens are preserved (
Baldur's,Faerûn-born); each word is registered in its original, lowercase, and capitalized forms so it's accepted regardless of casing
Usage
- On startup: the plugin reads your word list and registers it with the spellchecker.
- After editing the word list: changes take effect automatically — the plugin watches
dictionary.mdand re-syncs a moment after you save. No restart needed. - Right-click to capture: select a word or phrase (or just place the cursor in a word) and right-click. If it isn't in your dictionary you'll see Add to vault dictionary; if it already is, you'll see Remove from vault dictionary. The entry is appended to (or removed from)
dictionary.mdand takes effect immediately. If the file doesn't exist yet, adding a word creates it.
Commands
Available from the command palette:
- Vault - Not A Typo: Sync now — force a re-sync manually.
- Vault - Not A Typo: Remove all managed words — un-register every word this plugin added and clear its record. Words you learned by hand (via Obsidian's own right-click) are never touched.
Disabling the plugin leaves registered words in place; use Remove all managed words first if you want a clean removal.
Settings
Open Settings → Vault - Not A Typo to configure:
| Setting | Default | Description |
|---|---|---|
| Dictionary file path | dictionary.md | Path to your word list, relative to the vault root |
How it works
Obsidian runs on Electron. This plugin registers your words directly into the OS spellchecker dictionary via Electron's session.addWordToSpellCheckerDictionary (reached through the remote bridge Obsidian keeps available to plugins). This is the only layer that controls the native macOS underlines, which a custom JS spellcheck provider cannot override.
Syncing is a reconciliation: the plugin computes the full set of words your dictionary should register, diffs it against the set it previously added (tracked in data.json), and only adds or removes the difference. A word shared by two entries stays registered as long as any line still produces it, and words you added by hand are left alone. If the remote/session bridge can't be reached, the plugin shows a notice and does nothing rather than failing.
Words take effect immediately after syncing; no Obsidian restart is required.
Compatibility
- Obsidian: 1.0.0 and above
- Platform: Desktop only (macOS, Windows, Linux)
- Mobile: Not supported
Contributing
Pull requests and issues are welcome.
git clone https://github.com/remihoeppe/vault-not-a-typo
cd vault-not-a-typo
main.js is the artifact Obsidian loads and is committed to the repo. main.ts is the parallel TypeScript source, kept in sync by hand — there is no build step. When changing behavior, edit both files identically. Drop the plugin folder into a vault's .obsidian/plugins/ directory to test.
License
MIT
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.