The Language Server Protocol (LSP) is a specification that standardizes how editors and IDEs communicate with language-smart backends over JSON-RPC. It defines capabilities such as completion, hover information, signature help, go-to definition, find references, diagnostics, code actions, formatting, rename, semantic tokens, and more. By decoupling tooling from individual editors, a single language server can power multiple clients, dramatically reducing duplicated effort across ecosystems. The protocol negotiates capabilities at startup so clients and servers can evolve independently while maintaining compatibility. Extensions and proposals cover advanced scenarios—like call hierarchies, inlay hints, notebooks, and workspace symbols—allowing incremental adoption as needs grow. In practice, LSP has become the backbone for modern language tooling, enabling consistent developer experiences across VS Code, Neovim, Eclipse, JetBrains IDEs (via plugins), and many others.
Features
- Defines common message formats for language services such as completion, hover, go-to-definition, diagnostics, workspace symbols, code actions, formatting
- Supports exchange over stdin/stdout, sockets, named pipes, or IPC
- Vendor-neutral, open standard originally from Microsoft, and supported by many companies (Red Hat, Codenvy, Sourcegraph)
- Broad editor and IDE support: VS Code, IntelliJ Ultimate + JetBrains IDEs, Eclipse Che, Atom, Sublime via plugin, GNU Emacs (Eglot, LSP Mode)
- Allows reuse of language servers across multiple editors, reducing duplication of effort
- Multiple licensing (CC-BY-4.0 for spec, MIT for code) and community-driven development