What is a Language Server? Understanding the Language Server Protocol

The Language Server Protocol (LSP) facilitates communication between a tool (the client) and a language smartness provider (the server). This integration brings features like autocomplete, go to definition, and find all references directly into your preferred tool.

Official Language Server Protocol Specification

The Language Server Protocol (LSP), pioneered by Microsoft, establishes a standardized communication method for programming language analyzers. Its aim is to enable seamless integration of rich language features across diverse development tools. Today, a consortium of industry leaders including Codenvy, Red Hat, and Sourcegraph, actively supports its advancement. The LSP ecosystem is experiencing rapid growth, with an expanding list of editors and language communities adopting the protocol. Below, you’ll find comprehensive details and links to current client and server implementations.

The Benefits of LSP

LSP revolutionizes language support by transforming the complex m-times-n problem into a simpler m-plus-n scenario. Traditionally, providing comprehensive language support for every programming language in every editor or IDE required developing individual plugins for each combination (e.g., a Python plugin for VSCode, a Python plugin for Sublime Text, a Python plugin for Vim, and so on).

Alt text: Illustration of the Matrix problem in software development, depicting a complex web of connections between different programming languages and code editors before LSP.

LSP offers a streamlined solution. Language communities can now concentrate their efforts on building a single, robust language server. This server, compatible with the LSP standard, can deliver advanced features such as code completion, hover tooltips, jump-to-definition, and find-references. Simultaneously, editor and client developers can focus on creating a unified, high-performance extension capable of communicating with any language server. This approach instantly provides deep language support across a multitude of tools.

Solving “The Matrix”: Language Servers and Clients

The traditional approach, often referred to as “The Matrix” due to its complex interconnections, is depicted below:

Programming Language Emacs Vim VSCode
Go
Java
TypeScript

This matrix illustrates the multiplicative complexity. LSP simplifies this by introducing language servers and clients:

Alt text: Diagram illustrating the Language Server Protocol solution, showing a separation between language servers and code editor clients, simplifying language support.

Now, language servers are developed independently for each language:

Language Server
Go
Java
TypeScript

And clients are developed for each editor:

LSP Client
Emacs
Vim
VSCode

This decoupling drastically reduces complexity and fosters a more efficient ecosystem.

Current Language Server Implementations

LSP adoption is rapidly expanding. Refer to the tables below for the most up-to-date information on language server and client implementations.

Microsoft maintains a parallel list of language server implementations within the core LSP repository. This website complements Microsoft’s list by providing richer details about language server capabilities and LSP clients. It aims to inform users about the features they can expect when installing a new language server or client and to guide open-source contributors on areas needing support.

Inclusion Criteria:

To be included in this list, language servers and clients must meet the following qualifications:

  1. Be fully open source.
  2. Language servers must be editor-agnostic, and clients must be language-agnostic.
  3. Implement at least one of the key methods listed below.

Key to Implementation Status:

Status Meaning
Implemented
WIP Work in Progress
Not implemented
Not applicable

Language Server Implementations Table

Language Maintainer Repository Code completion Hover Jump to def Workspace symbols Find references Diagnostics Additional capabilities
ActionScript3 Josh Tynjala github.com/BowlerHatLLC/vscode-nextgenas/tree/master/language-server
Ada AdaCore github.com/AdaCore/ada_language_server
ANTLR Ken Domino github.com/kaby76/AntlrVSIX Semantic highlighting, rename, reformat, refactoring, ANTLR 2/3/4, Bison, W3C EBNF
Apache Camel Camel Tooling github.com/camel-tooling/camel-language-server
Ballerina ballerina.io github.com/ballerina-platform/ballerina-lang/tree/master/language-server
Bash Mads Hartmann github.com/bash-lsp/bash-language-server
BibTeX Andrew Pilsch https://github.com/oncomouse/citation-langserver
C# OmniSharp github.com/OmniSharp/csharp-language-server-protocol – Runs tests – Quick fixes – Debug profiles
C# CXuesong github.com/CXuesong/LanguageServer.NET
C# Saulius Menkevičius github.com/razzmatazz/csharp-language-server – support for go-to-definition in metadata (on imported dlls)
C / C++ LLVM Team clang-tools-extra/trunk/clangd
C / C++ Jacob Dufault github.com/cquery-project/cquery
C / C++ MaskRay github.com/MaskRay/ccls
Clojure snoe github.com/snoe/clojure-lsp
Common Workflow Language (CWL) Seven Bridges/Rabix Rabix/Benten – Outline view – Javascript expression test evaluation – Preview of workflow graph – Preview of linked files
Coq Coq LSP Team coq-lsp – Outline view – Extensions: info panel request, file progress notification, performance report
Cucumber (Gherkin) Cucumber core team cucumber/language-server – Autocomplete steps – Go to step definition – Generate step definition from snippets – Syntax highlighting (semantic tokens) – Diagnostics for undefined steps – Formatting – Outline view
IBM Enterprise COBOL for z/OS IBM marketplace.visualstudio.com/items?itemName=IBM.zopeneditor – Outline view – Previewing of included copybooks on hover – Navigate to copybooks – Code template snippets – Refactoring such as “rename symbol” – Variable completion
IBM Enterprise COBOL for z/OS Broadcom github.com/eclipse/che-che4z-lsp-for-cobol – Automatic copybook resolution – Previewing of included copybooks on hover – COBOL Control Flow integration – Outline view – Code snippets support – Support for DB2, CICS and IDMS statements in Cobol – Subroutines support
CSS/LESS/SASS Microsoft github.com/Microsoft/vscode/tree/main/extensions/css
CSS/LESS/SASS DeltaEvo github.com/vscode-langservers/vscode-css-languageserver-bin
D WebFreak001 github.com/Pure-D/serve-d
Dart Dart Team github.com/dart-lang/sdk
Delphi Embarcadero Proprietary ( DelphiLSP) – No arbitrary code execution 2 – Multi-process architecture
Deno Deno Team github.com/denoland/deno/tree/master/cli/lsp
Dockerfile Remy Suen github.com/rcjsuen/dockerfile-language-server-nodejs
DreamMaker SpaceManiac github.com/SpaceManiac/SpacemanDMM/tree/master/crates/dm-langserver
Erg Shunsuke Shibayama and contributors github.com/erg-lang/erg/tree/main/crates/els
Erlang Erlang/OTPand Vlad Dumitrescu github.com/erlang/sourcer
Erlang Roberto Aloi, Juan Facorro and other contributors github.com/erlang-ls/erlang_ls
Elixir Elixir LSP github.com/elixir-lsp/elixir-ls
Elm Elm Tooling github.com/elm-tooling/elm-language-server
F# Ionide github.com/fsharp/FsAutoComplete/
Fennel XeroOl git.sr.ht/~xerool/fennel-ls
fluent-bit Seonghyeon Cho github.com/sh-cho/fluent-bit-lsp
Flux InfluxData github.com/influxdata/flux-lsp
Fortran Chris Hansen github.com/hansec/fortran-language-server
Fuzion Tokiwa Software GmbH github.com/tokiwa-software/fuzion-lsp-server Renaming, Outline, Signature Help
Gauge Gauge github.com/getgauge/gauge
Gleam Louis Pilfold github.com/gleam-lang/gleam
GLSL Sven-Hendrik Haase github.com/svenstaro/glsl-language-server
Go Archived Sourcegraph github.com/sourcegraph/go-langserver
Go Go Team github.com/golang/tools/tree/master/gopls
Grain Grain Team github.com/grain-lang/grain Code formatting
GraphQL GraphQL Foundation github.com/graphql/graphiql
Groovy Prominic github.com/prominic/groovy-language-server
Groovy Palantir github.com/palantir/groovy-language-server
Groovy VsCode Groovy Lint github.com/nvuillam/vscode-groovy-lint/tree/master/server Code Formatting Code refactoring (auto-fix errors)
Hack HHVM Team github.com/facebook/hhvm
Haskell Haskell https://github.com/haskell/haskell-language-server
Haxe Haxe Foundation github.com/vshaxe/haxe-language-server
Helm (Kubernetes) qvalentin github.com/mrjosh/helm-ls
IBM High Level Assembler Broadcom github.com/eclipse/che-che4z-lsp-for-hlasm
IBM High Level Assembler IBM marketplace.visualstudio.com/items?itemName=IBM.zopeneditor – Outline view – Previewing of copybooks on hover – Navigate to copybooks
HTML Microsoft github.com/Microsoft/vscode/tree/main/extensions/html
Imandra Protocol Language Aesthetic Integration https://github.com/AestheticIntegration/ipl-vscode
Java Eclipse Foundation, Red Hat, Microsoft github.com/eclipse/eclipse.jdt.ls
Java georgewfraser github.com/georgewfraser/vscode-javac
Java Apache NetBeans marketplace.visualstudio.com/items?itemName=ASF.apache-netbeans-java – Gradle, Maven, and mx support – Polyglot and Native Image debugging – OpenJDK sources support + jtreg
JavaScript Typefox github.com/theia-ide/typescript-language-server
JavaScript quick-lint-js github.com/quick-lint/quick-lint-js
JavaScript (Flow) Flowtype github.com/flowtype/flow-for-vscode
JSON Microsoft github.com/microsoft/vscode/tree/main/extensions/json-language-features/server
JSON Schema Microsoft github.com/microsoft/vscode/tree/main/extensions/json-language-features/server
JSON-LD Arthur Vercruysse github.com/ajuvercr/jsonld-lsp
Jsonnet Grafana Labs github.com/grafana/jsonnet-language-server
JS/TS + PHP + Python + Java SonarSource github.com/SonarSource/sonarlint-language-server
Julia David Anthoff github.com/JuliaEditorSupport/LanguageServer.jl
Kotlin fwcd github.com/fwcd/KotlinLanguageServer
Langium TypeFox github.com/langium/langium Tool for implementing a language server in any language
LanguageTool Julian Valentin github.com/valentjn/ltex-ls Checking spelling and grammar in markup languages such as LaTeX, Markdown, XHTML, …
LaTeX Eric Förster github.com/efoerster/texlab
Lua Alloyed github.com/Alloyed/lua-lsp
Lua tangzx github.com/EmmyLua/EmmyLua-LanguageServer
Lua LuaLS github.com/LuaLS/lua-language-server
Markdown Artem Pianykh github.com/artempyanykh/marksman – Support for wiki-links – Table of Contents generation – Single-file mode
MOCA Danny Glass github.com/mrglassdanny/moca-language-server Formatting, Semantic Highlighting, Signature Help, MOCA Client Capabilities
Nextflow Seqera github.com/nextflow-io/language-server Formatting, rename, semantic highlighting, visualization of code as workflow diagrams
Odin Daniel Gavin https://github.com/DanielGavin/ols
OCaml OCaml github.com/ocaml/ocaml-lsp
Nim PMunch github.com/PMunch/nimlsp
openVALIDATION openVALIDATION github.com/openvalidation/ov-language-server
Perl Gerald Richter github.com/richterger/Perl-LanguageServer – Installable via CPAN – https://metacpan.org/pod/Perl::LanguageServer – Implements Debug Adaptor Protocol
Perl Brian Scannell github.com/bscan/PerlNavigator – No external dependencies
PHP Felix Becker github.com/felixfbecker/php-language-server
PHP Dan Leech github.com/phpactor/phpactor – No arbitrary code execution 2 – Code Action – Document Highlight – Goto Implementation – Document Symbol – Has custom extensions
PHP Tom Gerrits gitlab.com/Serenata/Serenata – No arbitrary code execution 2 – Has custom extensions
PHP Hvy Industries github.com/HvyIndustries/crane/blob/master/server
PHP Matt Brown github.com/vimeo/psalm
IBM Enterprise PL/I for z/OS IBM marketplace.visualstudio.com/items?itemName=IBM.zopeneditor – Outline view – Previewing of include files on hover – Navigate to include files – Refactoring such as “rename symbol” – Variable completion
Polyglot (Java, JavaScript, Python, R, Ruby, …) GraalVM marketplace.visualstudio.com/items?itemName=oracle-labs-graalvm.graalvm – Supports polyglot programming – Based on dynamic run-time data – Supports delegation to other language servers
PowerShell Microsoft github.com/PowerShell/PowerShellEditorServices
Puppet Lingua Pupuli github.com/lingua-pupuli/puppet-editor-services
PureScript Nicholas Wolverson github.com/nwolverson/purescript-language-server
Python Microsoft github.com/microsoft/pyright
Python Archived Microsoft github.com/Microsoft/python-language-server
Python Archived Sourcegraph https://github.com/sourcegraph/python-langserver
Python python-lsp github.com/python-lsp/python-lsp-server
Python Samuel Roeca github.com/pappasam/jedi-language-server
Q# Archived Microsoft github.com/microsoft/qsharp-compiler
R REditorSupport github.com/REditorSupport/languageserver Code Formatting
Racket Conor Finegan github.com/jeapostrophe/racket-langserver
Raku Brian Scannell github.com/bscan/RakuNavigator
Red bitbegin github.com/bitbegin/redlangserver
reStructuredText swyddfa github.com/swyddfa/esbonio
Rego Styra github.com/StyraInc/regal Goto Definition Request, Code Actions, Folding Range, Formatting, Inlay Hints
Rell ChromaWay gitlab.com/chromaway/core-tools/rell-toolbox/ Goto Definition, Code Actions, Code Formatting, Signature Help, Rename, Semantic highlighting, Outline view
Robot Framework Robocorp github.com/robocorp/robotframework-lsp Code Formatting
Ruby Fred Snyder github.com/castwide/solargraph
Ruby Shopify github.com/Shopify/ruby-lsp
Rust Archived Nick Cameron and the Rust community github.com/rust-lang/rls
Rust Aleksey Kladov and contributors github.com/rust-analyzer/rust-analyzer
Scala Iulian Dragos github.com/dragos/dragos-vscode-scala
Scala Scalameta github.com/scalameta/metals
SPARQL Stardog Union github.com/stardog-union/stardog-language-servers/tree/master/packages/sparql-language-server
Smalltalk/Pharo Benoît Verhaeghe github.com/badetitou/Pharo-LanguageServer Code Formatting, Signature Help
Snyk Snyk https://github.com/snyk/snyk-ls Automatic download of Snyk CLI with custom notification of path to binary, diagnostic workspace scans over all workspace folders on startup. Supports Snyk Code, Snyk IaC and Snyk Open Source. Authentication to Snyk is supported and token returned via custom notification.
Standard ML Ariel Davis Millet Code formatting
Swift & C-family Apple Inc github.com/apple/sourcekit-lsp
Systemtap Red Hat Systemtap LSP
SystemVerilog dalance github.com/dalance/svls
Terraform Julio Tain Sueiras github.com/juliosueiras/terraform-lsp – Dynamic completion from provider binary
Terraform Hashicorp github.com/hashicorp/terraform-ls
TTCN-3 Nokia github.com/nokia/ntt
Turtle Stardog Union github.com/stardog-union/stardog-language-servers/tree/master/packages/turtle-language-server
TypeScript TypeFox github.com/theia-ide/typescript-language-server
V vlang https://github.com/vlang/v-analyzer
Vala vala-lang https://github.com/vala-lang/vala-language-server
Veryl dalance github.com/dalance/veryl/tree/master/crates/languageserver Formatting, Semantic highlighting
VimScript iamcco github.com/iamcco/vim-language-server
XML IBM github.com/microclimate-devops/xml-language-server
XML Red Hat and Angelo ZERR github.com/angelozerr/lsp4xml XML Schema validation/completion, Foldings, Rename element, Formatting, Document Link, Extensible to add custom completion, hover, etc
YAML Red Hat github.com/redhat-developer/yaml-language-server
YANG TypeFox github.com/yang-tools/yang-lsp
Xtext (Any Language) TypeFox github.com/eclipse/xtext-core
Work in Progress
Crystal Archived Ryan L. Bell and contributors github.com/crystal-lang-tools/scry
PlantUML Patrick Dewey github.com/ptdewey/plantuml-lsp
reStructuredText Archived Lex Li github.com/lextm/restructuredtext-antlr
Ruby Fumiaki MATSUSHIMA github.com/mtsmfm/language_server-ruby
TypeCobol TypeCobol Team TypeCobol Language Server
WebAssembly Archived Darin Morrison github.com/wasm-lsp/wasm-language-server
Zig zigtools and contributors github.com/zigtools/zls
Notes:

Automatic dependency management Language servers that support this feature are able to resolve / install a project’s 3rd-party dependencies without the need for a user to manually intervene. No arbitrary code execution Language servers that support this feature don’t execute arbitrary code (some language servers do this when running build scripts, analyzing the project, etc.). Tree View Protocol Language servers that support this feature are able to render tree views. See this link for more information. Decoration Protocol Language servers that support this feature are able to provide text to be displayed as “non-editable” text in the text editor. See this link for more information.

LSP Clients Table

Editor/client Maintainer Repository Code completion Hover Jump to def Find references Symbol search Diagnostics
Acme Fazlul Shahriar https://github.com/fhs/acme-lsp
BBEdit Bare Bones Software, Inc. Proprietary
C++Builder Embarcadero Proprietary
Delphi Embarcadero Proprietary
Eclipse LSP4E Eclipse github.com/eclipse/lsp4e/
Eclipse Che Eclipse, Codenvy github.com/eclipse/che/
Emacs Vibhav Pant github.com/emacs-lsp/lsp-mode
Emacs João Távora github.com/joaotavora/eglot
Emacs Andy Stewart github.com/manateelazycat/lsp-bridge
Geany Jiří Techet github.com/techee/geany-lsp
GNATStudio AdaCore https://github.com/AdaCore/gps
Helix Blaž Hrastnik https://github.com/helix-editor/helix
IntelliJ / JetBrains IDEs Ballerina-Lang Team github.com/ballerina-platform/lsp4intellij
IntelliJ / JetBrains IDEs Guillaume Tâche github.com/gtache/intellij-lsp
Kakoune Ruslan Prokopchuk github.com/ul/kak-lsp
Kate Kate Team invent.kde.org/kde/kate
Moonshine IDE Prominic github.com/prominic/Moonshine-IDE
Oni Oni github.com/onivim/oni
Qt Creator Qt Project code.qt.io/cgit/qt-creator
VSCode Microsoft github.com/microsoft/VSCode
multilspy Microsoft github.com/microsoft/monitors4codegen
vim Yegappan Lakshmanan github.com/yegappan/lsp
Neovim Neovim Team github.com/neovim/neovim
vim/neovim Nate Bosch github.com/natebosch/vim-lsc
vim/neovim Prabir Shrestha github.com/prabirshrestha/vim-lsp
vim/neovim Junfeng Li github.com/autozimu/LanguageClient-neovim
vim/neovim w0rp github.com/w0rp/ale
vim/neovim Qiming zhao github.com/neoclide/coc.nvim
Sublime Text Tom van Ommeren github.com/sublimelsp/LSP
MS Monaco Editor TypeFox github.com/TypeFox/monaco-languageclient
Work in progress
Atom GitHub github.com/atom-community/atom-languageclient
CodeMirror Wylie Conlon github.com/wylieconlon/lsp-editor-adapter
CodeMirror 6 Mahmud Ridwan github.com/FurqanSoftware/codemirror-languageserver
Emacs Corey Richardson github.com/sourcegraph/emacs-lsp
Sublime Sourcegraph github.com/sourcegraph/sublime-lsp
Theia Theia IDE github.com/theia-ide/theia
Spyder IDE Spyder IDE Dev Team github.com/spyder-ide/spyder
Ycmd Ycmd team github.com/Valloric/ycmd
Brackets Adobe github.com/adobe/brackets
JupyterLab Michał Krassowski krassowski/jupyterlab-lsp
Rapunzel Sebastiaan Mathôt opensesame-extension-language_server

Community Discussion Forums

Contact Us

Langserver.org is supported by Sourcegraph.

To suggest additions or updates to project statuses, please open issues or submit pull requests on this project at github.com/langserver/langserver.github.io

Icons are from Glyphicons Free, under CC BY 3.0.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *