Remi HOEPPE125 downloadsSyncs a markdown word list from your vault into Obsidian's custom spellcheck dictionary.
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.
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.
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.
vault-not-a-typo folder into your vault's .obsidian/plugins/ directoryCreate 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:
Baldur's Gate) — write it the way you read it. Under the hood each entry is split into its component words and registered individually.# are treated as section headers and ignored- word and **word** markers are stripped automaticallyBaldur's, Faerûn-born); each word is registered in its original, lowercase, and capitalized forms so it's accepted regardless of casingdictionary.md and re-syncs a moment after you save. No restart needed.dictionary.md and takes effect immediately. If the file doesn't exist yet, adding a word creates it.Available from the command palette:
Disabling the plugin leaves registered words in place; use Remove all managed words first if you want a clean removal.
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 |
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.
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.
MIT