Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.