# How to Install Automattic/harper: A Complete Setup Guide for Every Component

> Install Automattic harper easily using Cargo, npm, or pre built desktop apps. Get the complete setup guide for every component here.

- Repository: [Automattic/harper](https://github.com/Automattic/harper)
- Tags: how-to-guide
- Published: 2026-07-27

---

**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`](https://github.com/Automattic/harper/blob/main/ARCHITECTURE.md), you can install the Automattic/harper ecosystem by choosing individual components such as `harper-ls`, [`harper.js`](https://github.com/Automattic/harper/blob/main/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`](https://github.com/Automattic/harper/blob/main/Cargo.toml) as a git dependency. The public API is defined in [`harper-core/src/lib.rs`](https://github.com/Automattic/harper/blob/main/harper-core/src/lib.rs).

```toml
[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.

```bash
cargo install harper-ls

# Verify the binary is on your PATH

harper-ls --version

```

The LSP server boots from [`harper-ls/src/main.rs`](https://github.com/Automattic/harper/blob/main/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`](https://github.com/Automattic/harper/blob/main/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.

```bash

# npm

npm install harper.js

# pnpm

pnpm add harper.js

```

The package entry point is [`packages/harper.js/src/main.ts`](https://github.com/Automattic/harper/blob/main/packages/harper.js/src/main.ts). After installation, import the `LocalLinter` class to lint text directly in your application.

```typescript
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`](https://github.com/Automattic/harper/blob/main/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`](https://github.com/Automattic/harper/blob/main/pnpm-workspace.yaml).

```bash

# 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`](https://github.com/Automattic/harper/blob/main/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`](https://github.com/Automattic/harper/blob/main/packages/vscode-plugin/README.md). Install from the VS Code Marketplace, or open the extension folder and run `pnpm install && pnpm run build`.
- **Obsidian:** See [`packages/obsidian-plugin/README.md`](https://github.com/Automattic/harper/blob/main/packages/obsidian-plugin/README.md). Install via the Obsidian Community Plugins UI, or copy the built `obsidian-plugin` folder into your vault.
- **Chrome / Firefox:** See [`packages/chrome-plugin/README.md`](https://github.com/Automattic/harper/blob/main/packages/chrome-plugin/README.md). Install from the Chrome Web Store or Firefox Add-ons site, or load the unpacked source with `just 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-core` is added automatically as a Cargo dependency; reference [`harper-core/src/lib.rs`](https://github.com/Automattic/harper/blob/main/harper-core/src/lib.rs) for the public API.
- `harper-ls` installs with `cargo install harper-ls`; verify with `harper-ls --version`.
- [`harper.js`](https://github.com/Automattic/harper/blob/main/harper.js) installs with `npm install harper.js`; import `LocalLinter` from [`packages/harper.js/src/main.ts`](https://github.com/Automattic/harper/blob/main/packages/harper.js/src/main.ts).
- `harper-desktop` builds with `just dev-desktop` after 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`, and `packages/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`](https://github.com/Automattic/harper/blob/main/harper-core/src/lib.rs) or the Tauri entry point in [`harper-desktop/src-tauri/src/main.rs`](https://github.com/Automattic/harper/blob/main/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`](https://github.com/Automattic/harper/blob/main/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`](https://github.com/Automattic/harper/blob/main/Cargo.toml), but end users of `harper-ls`, [`harper.js`](https://github.com/Automattic/harper/blob/main/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`](https://github.com/Automattic/harper/blob/main/pnpm-workspace.yaml). While end users can install [`harper.js`](https://github.com/Automattic/harper/blob/main/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`.