Vault - Not A Typo

by Remi HOEPPE
5
4
3
2
1
Score: 30/100

Description

Obsidian plugin — suppress spellcheck underlines for proper nouns by maintaining a word list inside your vault

Reviews

No reviews yet.

Stats

1
stars
169
downloads
0
forks
71
days
62
days
62
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
1
total issues
1
open issues
0
closed issues
7
commits

Latest Version

2 months ago

Changelog

Reworks the spellcheck mechanism so custom words reliably stop being underlined on macOS (and Windows/Linux), and adds multi-word entries plus a right-click capture flow.

Highlights

  • New mechanism: registers words directly into the OS spellchecker dictionary via session.addWordToSpellCheckerDictionary, replacing the old webFrame.setSpellCheckProvider path that had no effect against native macOS underlines.
  • Multi-word entries: write proper nouns as you read them (e.g. Baldur's Gate); each entry is split into clean, NFC-normalized tokens under the hood. Internal apostrophes/hyphens are preserved, and each word is registered in original, lowercase, and capitalized forms.
  • Auto-sync: changes to dictionary.md take effect automatically (debounced watcher); no restart needed.
  • Right-click capture: selection-aware smart toggle to add/remove the selected word or phrase, creating the file if missing.
  • Set-diff reconciliation: tracks its own additions in data.json, so words you learned by hand are never removed. Persists on unload, with a Remove all managed words command for explicit cleanup.

Notes

  • Desktop only.
  • Registered words are stored in the OS spellchecker dictionary, which is a single per-user store — they are system-wide and persist across restarts (accepted trade-off; the plugin makes the source list portable, not the effect isolated).

README file from

Github

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)

  1. Open Settings → Community Plugins → Browse
  2. Search for Vault - Not A Typo
  3. Click Install, then Enable

Manual install

  1. Download the latest release from the Releases page
  2. Unzip and copy the vault-not-a-typo folder into your vault's .obsidian/plugins/ directory
  3. 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 - word and **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.md and 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.md and 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