# typos-lsp puts a low false-positive spell checker inside your editor

> typos-lsp is a Language Server Protocol server and Visual Studio Code extension that exposes the typos spell checker to editors, so misspelled identifiers get a diagnostic and a Quick Fix rather than a squiggle with no suggestion. It suits a developer who wants a spell checker that understands source code, and it changes three typos settings whether you like it or not.

**tekumara/typos-lsp** — Source code spell checker for Visual Studio Code, Neovim and other LSP clients

- Repository: https://github.com/tekumara/typos-lsp
- Website: https://marketplace.visualstudio.com/items?itemName=tekumara.typos-vscode
- Stars: 592 · Forks: 14
- Language: Rust
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/tekumara-typos-lsp

## Why an LSP wrapper rather than an editor extension

The premise is stated in one sentence. typos is a low false-positive source code spell checker, and this project exposes typos via a Language Server Protocol server and a Visual Studio Code extension to provide a fast, low memory, in-editor spell checker. The reason to wrap it in LSP rather than to write editor plugins for each one is coverage. The install list runs to five editors. Neovim installs it with mason. Vim uses vim-lsp-settings and there is a specific Vim install document. VS Code installs the Typos spell checker from the VS Code Marketplace, VSCodium installs it from the Open VSX Registry, and Zed installs it from Zed's extension marketplace. Each of those editors speaks LSP, so one server serves all of them, and the per-editor work is confined to a configuration document, of which there are five, one each for Helix, Neovim, VS Code, Vim and Zed. The claimed benefits of fast and low memory come from the underlying tool rather than from the wrapper, since typos-lsp is essentially a thin protocol adapter.

## Getting the binary and the extension

The server itself is distributed through the usual channels. Homebrew users install it with:

```
brew install typos-lsp
```

and users of cargo-binstall get it with:

```
cargo binstall typos-lsp
```

For Linux users the README points at Cargo:

```sh
cargo install --locked typos-lsp
```

Other package managers are listed through repology, and there is also a manual option, downloading typos-lsp from the releases page. The editor side is separate from the server side. The VS Code extension is published as tekumara.typos-vscode, and the package manifest shows the settings that matter. typos.path takes a path to the typos-lsp binary, and if it is empty the bundled binary will be used, which means the extension ships its own server so most users never need the package manager route at all. typos.config takes a path to a custom config file. typos.diagnosticSeverity is an enum of Error, Warning, Information and Hint, mapping to the red, yellow, blue and dotted squiggles, and the default is Information, which is the quietest option. There is also a typos.restart command under the Typos category, and the extension activates on onStartupFinished.

## Three typos settings the server overrides

The config file support section is where the interesting behaviour is, because the server deliberately changes how three typos options work and the reason is that an editor has different needs from a command line run. The server supports the config fields in typos.toml, _typos.toml or .typos.toml, except for three. files.ignore* has no effect, because the editor decides which files to open rather than the tool deciding which to walk. default.check-filename is overridden so that file names are never spell checked, which is a difference from the command line behaviour where a misspelled file name is a legitimate finding. And default.check-file is overridden so that files are always checked, because in an editor a file you opened is a file you want checked. The binary rules follow the same reasoning, since *.binary means binary files are always checked. So a project that relies on typos.toml to skip a directory of generated code will find that setting ignored, which is the kind of thing to discover before a reviewer complains about it.

## Config discovery, precedence and the restart requirement

The rules for finding a config are precise, and the precedence has two layers. Config files are read from the workspace folder or its parents, and if there is no workspace folder then no config file is read and the typos defaults are used. You can also provide an explicit custom config file, set with typos.config in VS Code and with initializationOptions.config in other LSP clients. This custom config is used together with any config file found from the workspace folder or its parents, and it takes precedence for settings declared in both. If there is no workspace folder, the explicit custom config is still used. The last line of that section is the operational catch: restart the server after changing either the workspace config file or the explicit custom config file for the new changes to take effect. That is not unusual for LSP servers, but it is worth knowing before you edit a config, save it, and conclude the setting did not work.

## Two caveats, and why some words are not corrected

The caveats list has two entries. Unlike typos, file names are not spell checked, which repeats the config override from the other side and is the one users notice first. And the server does not spell check toggleterm.nvim terminals, with a link to the toggleterm.nvim issue 653 for the detail. The second is a narrow edge case but it explains a class of confusion in Neovim, where a terminal buffer inside the editor looks like a file but is not one. The other question the README answers is why misspellings are not being corrected, and the answer is about false positives. To minimise false positives, typos only suggests corrections for known misspellings, rather than unknown words like a traditional spell-checker. So a word that is not a dictionary entry is left alone, and only a word that is in the known misspellings list gets a suggestion. That is the deliberate trade, and it is the difference between a spell checker that is useful in source code and one that drowns you in false positives on every domain term, identifier or acronym in the project.

## Repository shape and release cadence

The repository is a Cargo workspace with the crates directory as the member glob and resolver 2, so the Rust server code lives in crates/ and the top level also holds src/, which is the TypeScript extension. The extension has its own package.json, package-lock.json, tsconfig.json and an eslint.config.mjs, and the workspace also carries a .vscode/ directory for development, a .vscodeignore and a .prettierignore. The release tooling is release-please, with a .release-please-manifest.json and a release-please-config.json, and the GitHub Actions workflows are separate for CI and for releases. The repository also has a .typos.toml of its own, which is a small joke that is also a reasonable demonstration of the tool. The version numbers tell the release story. The extension and the server share a version, v0.1.57 published on 2026-10-12, with v0.1.56 on 2026-09-01 and v0.1.55 on 2026-08-07, so the cadence is a release every few weeks at a pre-1.0 version number. The last push was on 2026-10-12 and the licence is MIT.

## Conclusion

Adopt typos-lsp when you want spell checking inside the editor that understands identifiers and does not flag names from your own project, and you are willing to change the typos configuration that governs file checking. Do not adopt it expecting a traditional dictionary spell checker, because it only corrects known misspellings rather than unknown words, and expect file names to go unchecked. Verify first that your editor has a configuration path for the server, that the typos.toml in your repository is one you control rather than one your build generates, and that you have read the three config fields the server overrides before you merge it into a project with strict linting.

## FAQ

### What does typos-lsp do and what is it built on?

It exposes the typos low false-positive source code spell checker through a Language Server Protocol server and a VS Code extension, giving a fast, low memory in-editor spell checker that identifies misspellings and offers a Quick Fix with the suggested correction.

### How do I install typos-lsp in my editor?

For Neovim, install it with mason. For Vim, use vim-lsp-settings as described in docs/vim-lsp-settings.md. For VS Code and VSCodium, install the Typos spell checker extension from the Marketplace or Open VSX. For Zed, install it from the extension marketplace. The server binary itself comes from brew install typos-lsp, cargo binstall typos-lsp, cargo install --locked typos-lsp, or the releases page.

### Which typos config options does the LSP server ignore?

Three. files.ignore* has no effect because the editor decides which files to open. default.check-filename is overridden so file names are never spell checked. default.check-file is overridden so files are always checked, and binary files are always checked for the same reason.

### Why is a misspelling in my code not being corrected?

To minimise false positives, typos only suggests corrections for known misspellings rather than unknown words like a traditional spell-checker. So a word that is simply not in the dictionary is left alone, and only words on the known misspellings list get a suggestion. You also need to restart the server after changing a config file for the change to take effect.

## Sources

- [License: MIT](https://github.com/tekumara/typos-lsp/blob/main/LICENSE)
- [Project website](https://marketplace.visualstudio.com/items?itemName=tekumara.typos-vscode)
- [README](https://github.com/tekumara/typos-lsp/blob/main/README.md)
- [Releases](https://github.com/tekumara/typos-lsp/releases)
- [tekumara/typos-lsp on GitHub](https://github.com/tekumara/typos-lsp)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/tekumara-typos-lsp
