Spellchecker Plugin
Source: packages/plugins/plugin-spellchecker/src/
Manifest: id harper, version 0.30.0, min app version 1.7.7. Desktop only. Author: Elijah Potter.
This is an Obsidian-targeted package colocated in the monorepo. It provides grammar and spelling diagnostics through the Harper WASM engine.
Registration
- CodeMirror linter extension.
- Settings tab.
- Status bar dialect selector.
Linting
The package can use WorkerLinter in a Web Worker or LocalLinter on the main thread. Each diagnostic includes source ranges, severity, message, actions, and ignore state; quick-fix actions apply replacements through the active editor view.
Electron Native Evaluation
Lapis does not currently add a dedicated Electron-native Harper engine for this package. The supported execution policy remains the upstream Harper.js path: prefer WorkerLinter with inlined WASM when worker support is available, and fall back to LocalLinter only when worker execution is unavailable or explicitly disabled by settings.
The package is UI-coupled today: it registers CodeMirror lint extensions, a settings tab, and a status-bar dialect menu through the Obsidian plugin API. Moving the whole plugin into Electron main would either require tunnelling live renderer objects across IPC or weakening the plugin-host boundary. That is not allowed by the Community Plugin Host Boundary.
If a native Harper path is reconsidered later, it should be a dedicated child-process or utility-process lint engine owned by Electron main, not a LocalLinter running inside Electron main itself. Main would broker lifecycle, request timeouts, and crash recovery; the sidecar would receive structured-clone-safe text/settings payloads and return serializable diagnostics. Renderer-owned CodeMirror decorations, quick fixes, settings UI, and status affordances would remain renderer contributions. Until measurements show the renderer worker path is insufficient, there is no active follow-up to implement that split.
Settings
{
ignoredLints?: string;
useWebWorker: boolean;
dialect?: Dialect;
lintSettings: LintConfig;
userDictionary?: string[];
delay?: number;
}
The settings tab includes worker mode, dialect, lint delay, ignored-suggestion reset, and searchable rule toggles. The status bar exposes the Harper logo and dialect switching affordance.