Vladislav Sorokin50 downloadsCheck spelling and grammar in many languages as you type, with style suggestions on request; LaTeX formulas are left alone. Grammar by a language model, local or cloud.
Spelling and grammar checking for Obsidian by a language model, on your own computer or in the cloud (OpenAI, Anthropic, Google Gemini). It catches the errors rule-based checkers miss, as you write. Desktop only.

A spelling checker sees one word; the model reads the sentence. Here the dictionary offers don't, and the model, seeing She, gives doesn't and says why:

In Obsidian: Settings → Community plugins → Browse, search for BlueProof, install it and turn it on. Updates come through Check for updates there, though a new release may take a while to show.
Or by hand: download main.js, manifest.json and styles.css from the latest release, put them
into <your vault>/.obsidian/plugins/blueproof/, and turn on BlueProof under Settings → Community plugins.
Spelling works at once on Windows (Windows' own spell checker), in the languages installed in Windows: a note in American English needs English (United States) there, not only English (United Kingdom); Settings → BlueProof → Spelling lists the ones Windows has. On Linux and macOS, download a dictionary for your language in Settings → BlueProof → Spelling → Manage… (the system's Hunspell dictionaries count too). (Not tested on macOS yet.) A language with no dictionary gets ⚠ in the status bar.
While BlueProof checks spelling, Obsidian's own spellcheck (Settings → Editor → Spellcheck) is kept out of the
note's text, so a word is not underlined twice. That setting is not changed: turn BlueProof's spelling, checking while
typing or the plugin off, or mark a note blueproof: off, and Obsidian's is back; in a note with a language BlueProof
has no dictionary for (⚠), Obsidian's checks it meanwhile. It still checks the note's title and properties.
Grammar needs a language model. Choose where it runs:
gpt-5.4-mini: as accurate
as the best and the fastest in our tests).
claude-sonnet-5-5 found the most in our tests, claude-haiku-5-5 made no false finding and is quicker.gemini-3.8-flash found the most of all the cloud models in our tests, slower on long
paragraphs; gemini-3.5-flash-lite is the fastest and cheapest, and the one a free key allows most of (500 requests
a day, the Flash models 20). Pro and Gemma are not worth it: docs/servers.md. On the free tier
Google may use what is sent to improve its products; with billing set up it does not.ollama pull qwen3:14b.qwen3:14b from the list.
.gguf,
e.g. Qwen3 14B Q4_K_M) from Hugging Face.llama-server -m Qwen_Qwen3-14B-Q4_K_M.gguf --port 8080 -ngl 99It should work like the others, but we have not tried it yet: treat it as experimental.
A server on another computer, and which model suits which language: docs/servers.md.
The first check after a local model starts can take a minute while it loads.

Underlined words appear a moment after you stop typing. Click one to see what is wrong and pick a fix, ignore it, or add the word to your dictionary.
The status bar shows how many findings the note has (click to go to the next one) and the note's language (click to change it).

Languages. List yours in the settings (en-GB, ru-RU) or leave auto. A note can name its own in its
properties (language: de). British and American English cannot be told apart from the text, so set the one you use.
Commands (no default hotkeys; give them yours in Settings → Hotkeys): check the paragraph at the cursor, go to the next or previous finding, suggest a better wording, turn checking off for a note, find unknown words in your vault.
More: docs/usage.md.
Names and terms the spelling dictionary does not know are kept in ordinary notes in a folder, Dictionaries by
default. Add to dictionary in the popup writes to Dictionaries/Personal.md; you can add any number of notes by
subject and switch each on or off in the settings.
A dictionary note looks like this:
---
language: en
---
# Mathematics: words my spelling dictionary does not know
Euler* Lagrange* Cauchy
eigenvalue eigenvector
- isomorphism
- word) works too.Euler* stands for the word and up to four more letters: Euler's, Eulerian.# are comments. Letter case does not matter.language in the properties says which language the words count for; without it they count in every language.Find unknown words in my notes (a command) lists the unknown words of your vault, most frequent first, so you can add the right ones in one go. Examples to start from: docs/dictionaries.
api.github.com,
raw.githubusercontent.com) only when you ask, into the plugin's folder; none of your text is sent. On Linux and
macOS the system's dictionaries, outside the vault, are read too (/usr/share/hunspell, /usr/share/myspell,
~/Library/Spelling, /Library/Spelling); nothing is written there.main.js); nothing is downloaded or sent for it.MIT. Bundled: nspell with its dependencies (MIT); fastText (MIT) compiled to WebAssembly by fasttext.wasm.js (MIT), with fastText's language identification model lid.176.ftz by Facebook, under CC BY-SA 3.0, unchanged. The Hunspell dictionaries are not bundled: they are downloaded on request from LibreOffice's repository, each under its own licence (shown in the Hunspell window).