Camel Case Spellcheck
approvedby Pierson G
Spellchecks individual words in camelCase, PascalCase, and snake_case identifiers. - This plugin has not been manually reviewed by Obsidian staff.
Camel Case Spellcheck
Camel Case Spellcheck is a desktop-only Obsidian plugin that checks the words
inside camelCase, PascalCase, snake_case, and dotted.name identifiers
independently.
Obsidian normally treats a complete identifier as one spelling token. This plugin splits compound identifiers at case, underscore, and period boundaries and underlines only the component that appears to be misspelled.
| Text | Result |
|---|---|
TheseAreAllWords | No underline |
TheLastWordIsMispleled | Only Mispleled is underlined |
theLastWordIsMispleled | Only Mispleled is underlined |
the_last_word_is_mispleled | Only mispleled is underlined |
parseHTTPResponse | Checked as parse, HTTP, and Response |
source.file.input | Checked as source, file, and input |
example.com, notes.pdf | Left to Obsidian's native spellchecker |
Mispleled | Left to Obsidian's native spellchecker |
Features
- Checks components of camel case, Pascal case, snake case, dotted names such
as
source.file.input, acronyms, mixed styles, and identifiers with numeric boundaries. Hostnames and filenames such asexample.comandnotes.pdfare left to native spellcheck, which already skips them. Period splitting can be turned off in settings. - Uses a bundled US English Hunspell-compatible dictionary, so checking is local and works offline.
- Waits briefly after an edit before displaying a new underline, matching the less distracting behavior of native spellcheck.
- Places suggestions at the top of Obsidian's editor context menu and supports replacing only the misspelled component.
- Reads words already learned by Obsidian and writes Add to dictionary choices back to the same persistent desktop dictionary.
- Accepts common programming abbreviations such as
src,init,num, andJSONthat are not English words. This can be turned off in settings. - Keeps a plugin-local ignore list for words that should pass inside identifiers without being added to Obsidian's dictionary, via Ignore in identifiers on the context menu or the settings tab.
- Checks only visible editor content and skips code, comments, frontmatter, HTML, URLs, autolinks, and Markdown link syntax.
Requirements and limitations
- Obsidian 1.13.6 or newer on Windows, macOS, or Linux.
- Obsidian's Spellcheck setting must be enabled.
- Mobile is not supported because dictionary synchronization requires Electron.
- The bundled base dictionary currently supports US English only. Changing Obsidian's spellcheck language does not change the plugin's base dictionary.
- Camel Case Spellcheck operates in the Markdown editor, not Reading view.
- Obsidian's persistent dictionary is accessed through an Electron session bridge rather than the documented Obsidian plugin API. Component checking continues to work if that bridge changes, but dictionary synchronization and Add to dictionary may become unavailable.
Installation
Community plugins
Once Camel Case Spellcheck is available in the Obsidian Community directory:
- Open Settings → Community plugins.
- Select Browse and search for Camel Case Spellcheck.
- Select Install, then Enable.
Manual installation
- Download
main.js,manifest.json, andstyles.cssfrom the latest GitHub release. - Create
<vault>/.obsidian/plugins/camel-case-spellcheck/. - Copy the three downloaded files into that folder.
- Reload Obsidian and enable Camel Case Spellcheck under Community plugins.
Usage
Write camel-case, Pascal-case, or snake-case text normally. After a short pause, any misspelled component receives a red wavy underline. Right-click that component to replace it with a suggestion, ignore it inside identifiers, or add it to Obsidian's dictionary.
Ignore in identifiers affects only this plugin and only compound
identifiers; Add to dictionary changes Obsidian's native spellcheck
everywhere. Both match case-insensitively, so ignoring csae also covers
Csae and CSAE. The ignore list and the abbreviation toggle live in
Settings → Camel Case Spellcheck.
Ordinary words are deliberately left alone, so Obsidian's native spellchecker continues to handle them.
Why the plugin uses its own checker
The first implementation attempted to reuse Chromium's native spellchecker for each component. In the live Obsidian renderer, however, the exposed Electron query reported a known misspelling as accepted and returned no suggestions even while Obsidian visibly underlined the same word. The query API was therefore not connected to the useful spelling context used by the editor.
A second experiment inserted invisible CodeMirror boundary widgets between the parts of an identifier. Those widgets are decorations rather than editable document text, and Chromium continued to combine the surrounding text into one spelling token. The result was still a whole-identifier underline.
The current implementation takes the reliable route: it calculates component
ranges itself, suppresses native spellcheck only for the compound identifier,
checks each part with nspell, and adds a CodeMirror decoration around only the
misspelled range. Native spellcheck remains responsible for ordinary words.
Privacy
Camel Case Spellcheck has no telemetry, network requests, accounts, or external services. Text examined by the checker stays in memory and is not transmitted or persisted by the plugin. The only persistent data it accesses is Electron's spelling dictionary when synchronizing or adding custom words.
Development
This repository requires Node.js 22.13 or newer.
npm ci
npm run check
npm run check runs ESLint, the unit tests, TypeScript type checking, and a
production build. Use npm run dev for a watch build during development. Both
commands generate main.js; the generated bundle is intentionally ignored by
Git and is distributed through GitHub releases instead.
To test a build, copy main.js, manifest.json, and styles.css into a folder
named camel-case-spellcheck under a disposable vault's
.obsidian/plugins/ directory.
Releasing
The included GitHub Actions workflow builds a draft release whenever a version tag is pushed. To prepare a release:
- Run
npm version patch,npm version minor, ornpm version major. - Push the generated commit and version tag.
- Review the draft GitHub release and publish it.
The tag, package.json, manifest.json, and versions.json must use the same
semantic version. GitHub release assets must include main.js, manifest.json,
and styles.css. See Obsidian's
plugin submission guide
for the initial Community directory submission.
License and acknowledgements
Camel Case Spellcheck is released under the MIT License.
Spellchecking uses nspell and the
dictionary-en
US English dictionary. The nspell dependency uses
is-buffer. Their license notices are
preserved in the generated plugin bundle.
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.