How to Install Automattic/harper: A Complete Setup Guide for Every Component
You can install Automattic/harper via Cargo for the language server, npm for the JavaScript wrapper, or as pre-built desktop applications and editor plugins.
Harper is a modular, multi-language grammar-checking ecosystem built around a fast Rust core. According to the Automattic/harper source code and ARCHITECTURE.md, you can install the Automattic/harper ecosystem by choosing individual components such as harper-ls, harper.js, and the Tauri-based desktop app without compiling the entire repository. This guide walks through each installation path with exact commands and the source files that power them.
Install the Core Grammar Engine (harper-core)
You do not install harper-core directly. The Rust library is pulled in automatically as a Cargo dependency by the other packages, and it parses text, runs Brill-tagging, and applies rule sets.
If you need the library for custom Rust code, add it to your Cargo.toml as a git dependency. The public API is defined in harper-core/src/lib.rs.
[dependencies]
harper-core = { git = "https://github.com/Automattic/harper.git", rev = "master" }
Install the Language Server (harper-ls)
The harper-ls binary exposes the core over the LSP protocol for editors like VS Code, Neovim, Helix, Emacs, and Zed. Installing it from source requires only a working Rust toolchain.
cargo install harper-ls
# Verify the binary is on your PATH
harper-ls --version
The LSP server boots from harper-ls/src/main.rs, with the full implementation living in harper-ls/src/…. Editors locate the server via their standard lsp configuration entry.
Install the JavaScript and WebAssembly Package (harper.js)
The harper.js package bundles the core as a Wasm module (harper-wasm) for Node.js and browser usage. You can install it from the npm registry using your preferred package manager.
# npm
npm install harper.js
# pnpm
pnpm add harper.js
The package entry point is packages/harper.js/src/main.ts. After installation, import the LocalLinter class to lint text directly in your application.
import { LocalLinter } from "harper.js";
const linter = new LocalLinter();
const result = await linter.lint("Your text goes here.");
console.log(result);
For browser-specific integration, see the raw-web example at packages/harper.js/examples/raw-web/README.md.
Install the Desktop Application (harper-desktop)
The desktop client is a Tauri 2 + SvelteKit SPA that runs the core natively and includes a highlighter overlay. Building it requires the stable Rust toolchain and the pnpm version pinned in pnpm-workspace.yaml.
# Install the pinned toolchain and package manager
rustup toolchain install stable
pnpm i -g pnpm@10.10.0 # version pinned in pnpm-workspace.yaml
# Build shared packages and start the Tauri app
just dev-desktop # builds shared packages, then runs Tauri
The Tauri entry point is harper-desktop/src-tauri/src/main.rs. Release binaries are built by the build-desktop-linux and build-desktop-macos CI workflows and can be downloaded from the GitHub Releases page.
Install Editor Plugins
Editor extensions are thin wrappers that communicate with harper-ls or the WebAssembly bundle. Each plugin has its own installation steps in the packages directory.
- VS Code: See
packages/vscode-plugin/README.md. Install from the VS Code Marketplace, or open the extension folder and runpnpm install && pnpm run build. - Obsidian: See
packages/obsidian-plugin/README.md. Install via the Obsidian Community Plugins UI, or copy the builtobsidian-pluginfolder into your vault. - Chrome / Firefox: See
packages/chrome-plugin/README.md. Install from the Chrome Web Store or Firefox Add-ons site, or load the unpacked source withjust dev-chrome-extension.
All plugins ultimately call the same core API, so installing any one of them satisfies the grammar-checking dependency without a separate harper-core install.
Summary
harper-coreis added automatically as a Cargo dependency; referenceharper-core/src/lib.rsfor the public API.harper-lsinstalls withcargo install harper-ls; verify withharper-ls --version.harper.jsinstalls withnpm install harper.js; importLocalLinterfrompackages/harper.js/src/main.ts.harper-desktopbuilds withjust dev-desktopafter installing the stable Rust toolchain and pinned pnpm, or downloads from GitHub Releases.- Editor plugins rely on the README files in
packages/vscode-plugin,packages/obsidian-plugin, andpackages/chrome-plugin.
Frequently Asked Questions
Can I install Automattic/harper without building from source?
Yes. You can install the language server with cargo install harper-ls, the JavaScript wrapper with npm install harper.js, and the editor plugins from their respective marketplaces. Release binaries for the desktop app are also available on the GitHub Releases page, so you only need to build from source if you are modifying harper-core/src/lib.rs or the Tauri entry point in harper-desktop/src-tauri/src/main.rs.
What is the fastest way to get Harper running in my editor?
The fastest path is to install harper-ls via Cargo and then configure your editor's LSP client to point to the binary. Because the server is built from harper-ls/src/main.rs and exposes the core over standard LSP, most editors require only a minimal configuration after the binary is on your PATH.
Do I need to install harper-core separately?
No. The core engine is compiled as part of the downstream tools. If you are writing custom Rust code, you can add it as a dependency in Cargo.toml, but end users of harper-ls, harper.js, or the desktop app never need to install harper-core directly.
Which package manager does the Automattic/harper repository use internally?
The monorepo uses pnpm for its JavaScript workspace, as defined in pnpm-workspace.yaml. While end users can install harper.js with npm, yarn, or pnpm, contributors who build the desktop app or editor plugins should use the pinned pnpm version, which is currently 10.10.0.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →