finds.dev← search

// the find

dense-analysis/ale

★ 14,011 · Vim Script · BSD-2-Clause · updated Jun 2026

Check syntax in Vim/Neovim asynchronously and fix files, with Language Server Protocol (LSP) support

ALE is a linting and LSP client plugin for Vim and Neovim that runs checkers asynchronously so your editing isn't blocked while tools run. It predates Neovim's built-in LSP by years and accumulated support for an enormous number of languages and tools as a result. Still actively maintained and the go-to choice for Vim 8 users or anyone who wants a single plugin handling both linting and fixing.

Breadth of tool support is genuinely hard to match — hundreds of linters and fixers across virtually every language you'd encounter. Zero mandatory dependencies: pure Vimscript, no Node or Python daemon required. The `g:ale_linters_explicit` mode means you can lock down exactly what runs and pay nothing for what you don't use. Integrates cleanly with Neovim's native LSP and diagnostics APIs (0.7+/0.8+) rather than fighting them, so it degrades gracefully as Neovim matures.

For Neovim users on 0.8+ with nvim-lspconfig already configured, ALE's LSP layer is largely redundant — you're loading two LSP clients for the same servers. The Vimscript codebase means contributing or debugging internals is painful compared to Lua plugins; the community has largely moved on to native LSP + nvim-lint + conform.nvim for new Neovim setups. Configuration is split awkwardly between global `g:` vars and buffer-local `b:` vars with no structured schema, so large vimrcs managing many filetypes get messy fast. Adding a new linter requires writing a Vimscript file following conventions that aren't formally documented anywhere obvious.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →