26 releases (7 breaking)

0.8.3 Mar 25, 2024
0.7.6 Mar 8, 2024

#121 in Text editors

Download history 3/week @ 2024-01-17 26/week @ 2024-01-24 1/week @ 2024-01-31 10/week @ 2024-02-07 128/week @ 2024-02-14 540/week @ 2024-02-21 349/week @ 2024-02-28 544/week @ 2024-03-06 246/week @ 2024-03-13 107/week @ 2024-03-20 49/week @ 2024-03-27 47/week @ 2024-04-03

489 downloads per month




harper-ls is the Language Server Protocol frontend for Harper. Out of the box, it has built-in support for parsing the comments of most programming languages, as well as any and all markdown files.


How you choose to install harper-ls depends on your use-case. Right now, we only directly support usage through nvim-lspconfig. Refer to the linked documentation for more information.

If you happen to use mason.nvim, installation will be pretty straightforward. harper-ls is in the official Mason registry, so you can install it the same way you install anything through Mason.

If you don't install your LSPs through Mason, we also have binary releases available on GitHub.

Finally, if you have Rust installed, you're in luck! To install harper-ls, simply run:

cargo install harper-ls --locked


harper-ls has three kinds of dictionaries: user, file-local, and static dictionaries.

User Dictionary

Each user of harper-ls has their own dictionary, located in the following directories on each operating system:

Operating System Location
Linux $XDG_CONFIG_HOME/harper-ls/
MacOS $HOME/Library/Application Support/harper-ls/
Windows {FOLDERID_LocalAppData}/harper-ls/

This dictionary is a simple word list in plain-text. You can add and remove words at will. You can add to the user dictionary with code actions on misspelled words.


You don't have to stick with the default locations (listed above). If you use Neovim, you can set the location of the dictionary with the userDictPath key:

lspconfig.harper_ls.setup {
  settings = {
    ["harper-ls"] = {
      userDictPath = "~/dict.txt"

You can also toggle any particular linter. The default values are shown below:

lspconfig.harper_ls.setup {
  settings = {
    ["harper-ls"] = {
      linters = {
        spell_check = true,
        spelled_numbers = false,
        an_a = true,
        sentence_capitalization = true,
        unclosed_quotes = true,
        wrong_quotes = false,
        long_sentences = true,
        repeated_words = true,
        spaces = true,
        matcher = true

By default, harper-ls will mark all diagnostics with HINT. If you want to configure this, refer below:

lspconfig.harper_ls.setup {
  settings = {
    ["harper-ls"] = {
        diagnosticSeverity = "hint" -- Can also be "information", "warning", or "error"

File-Local Dictionary

Sometimes, you'll encounter a word (or name) that is only valid within the context of a specific file. In this case, you can use the code action that adds the word to the file-local dictionary. Any words added to this dictionary will, like the name implies, only be included in the dictionary when performing corrections on the file at that specific path.

You can find the file-local dictionaries in the following directories on each operation system:

Operating System Location
Linux $XDG_DATA_HOME/harper-ls/file_dictionaries or $HOME/.local/share/harper-ls/file_dictionaries
MacOS $HOME/Library/Application Support/harper-ls/file_dictionaries
Windows {FOLDERID_LocalAppData}/harper-ls/file_dictionaries

The format of these files is identical to user dictionaries.

Static Dictionary

The static dictionary is built into the binary and is (as of now) immutable. It contains almost all words you could possibly encounter.

I do take pull requests or issues for adding words to the static dictionary. It is composed of two files: harper-core/dictionary.dict and harper-core/dictionary.dict


~4M SLoC