What is LSP?

The Language Server protocol is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, go to definition, find all references and alike into the tool

official Language Server Protocol specification

The LSP was created by Microsoft to define a common language for programming language analyzers to speak. Today, several companies have come together to support its growth, including Codenvy, Red Hat, and Sourcegraph, and the protocol is becoming supported by a rapidly growing list of editor and language communities. See below for details on and links to current client and server implementations.


Why LSP?

LSP creates the opportunity to reduce the m-times-n complexity problem of providing a high level of support for any programming language in any editor, IDE, or client endpoint to a simpler m-plus-n problem.

For example, instead of the traditional practice of building a Python plugin for VSCode, a Python plugin for Sublime Text, a Python plugin for Vim, a Python plugin for Sourcegraph, and so on, for every language, LSP allows language communities to concentrate their efforts on a single, high performing language server that can provide code completion, hover tooltips, jump-to-definition, find-references, and more, while editor and client communities can concentrate on building a single, high performing, intuitive and idiomatic extension that can communicate with any language server to instantly provide deep language support.


The problem: "The Matrix"

Go Java TypeScript ...
Emacs
Vim
VSCode
...

The solution: lang servers and clients

Go
Java
TypeScript
...
Emacs
Vim
VSCode
...

Current implementations

LSP is growing - fast. See tables below for the latest on adoption.

Microsoft currently maintains a parallel list of language server implementations in the core LSP repository. This site is designed to operate alongside Microsoft's list by providing more information about the capabilities of language servers and LSP clients, informing users which features to expect when they download and install a new language server and/or client, and communicating where to open-source contributors where help is needed.


Qualifications:

To be included on this list, language servers and clients must:

  1. Be fully open source
  2. Be editor-agnostic for language servers or language-agnostic for clients
  3. Implement at least one of the key methods listed below

Key

Implemented
WIP
Not implemented

Language servers

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
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/mads-hartmann/bash-language-server
C# OmniSharp github.com/OmniSharp/omnisharp-node-client/blob/master/languageserver
C# CXuesong github.com/CXuesong/LanguageServer.NET
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
CSS/LESS/SASS Microsoft github.com/Microsoft/vscode/tree/master/extensions/css
CSS/LESS/SASS DeltaEvo github.com/vscode-langservers/vscode-css-languageserver-bin
D WebFreak001 github.com/Pure-D/serve-d
Dart Nate Bosch github.com/natebosch/dart_language_server
Dockerfile Remy Suen github.com/rcjsuen/dockerfile-language-server-nodejs
Erlang Erlang/OTPand Vlad Dumitrescu github.com/erlang/sourcer
Elixir Jake Becker github.com/JakeBecker/elixir-ls
Fortran Chris Hansen github.com/hansec/fortran-language-server
Gauge Gauge github.com/getgauge/gauge
GLSL Sven-Hendrik Haase github.com/svenstaro/glsl-language-server
Go Sourcegraph github.com/sourcegraph/go-langserver
  • No arbitrary code execution2
  • Files extension3
  • SymbolDescriptor extension4
GraphQL Facebook GraphQL github.com/graphql/graphql-language-service
Groovy Palantir github.com/palantir/groovy-language-server
Haskell Alan Zimmerman github.com/haskell/haskell-ide-engine
Haxe Dan Korostelev github.com/vshaxe/haxe-languageserver
HTML Microsoft github.com/Microsoft/vscode/tree/master/extensions/html
Imandra Protocol Language Aesthetic Integration https://github.com/AestheticIntegration/ipl-vscode
Java Eclipse Foundation, Red Hat github.com/eclipse/eclipse.jdt.ls
Java georgewfraser github.com/georgewfraser/vscode-javac
JavaScript Sourcegraph github.com/sourcegraph/javascript-typescript-langserver
  • No arbitrary code execution2
  • Files extension3
  • SymbolDescriptor extension4
JavaScript (Flow) Flowtype github.com/flowtype/flow-language-server
JSON Microsoft github.com/Microsoft/vscode/tree/master/extensions/json
JS + PHP + Python SonarSource github.com/SonarSource/sonarlint-core
Julia David Anthoff github.com/JuliaEditorSupport/LanguageServer.jl
Kotlin georgewfraser github.com/georgewfraser/kotlin-language-server
Lua Alloyed github.com/Alloyed/lua-lsp
OCaml + ReasonML Darin Morrison github.com/freebroccolo/ocaml-language-server
PHP Felix Becker github.com/felixfbecker/php-language-server
  • No arbitrary code execution2
  • Files extension3
  • SymbolDescriptor extension4
PHP Hvy Industries github.com/HvyIndustries/crane/blob/master/server
PureScript Nicholas Wolverson github.com/nwolverson/purescript-language-server
Python Sourcegraph https://github.com/sourcegraph/python-langserver
  • Automatic dependency management1
  • No arbitrary code execution2
  • Files extension3
  • SymbolDescriptor extension4
Python Palantir github.com/palantir/python-language-server
R REditorSupport github.com/REditorSupport/languageserver
Ruby Fred Snyder github.com/castwide/solargraph
Rust Nick Cameron and the Rust community github.com/rust-lang-nursery/rls
  • Automatic dependency management1
Scala Iulian Dragos github.com/dragos/dragos-vscode-scala
Scala Scalameta github.com/scalameta/metals
Swift Ryan Lovelett github.com/rlovelett/langserver-swift
TypeScript Sourcegraph github.com/sourcegraph/javascript-typescript-langserver
  • Automatic dependency management1
  • No arbitrary code execution2
  • Files extension3
  • SymbolDescriptor extension4
XML IBM github.com/microclimate-devops/xml-language-server
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 Ryan L. Bell and contributors github.com/crystal-lang-tools/scry
reStructuredText Lex Li https://github.com/lextm/restructuredtext-antlr
Ruby Fumiaki MATSUSHIMA github.com/mtsmfm/language_server-ruby
TypeCobol TypeCobol Team TypeCobol Language Server
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.).
Files extension
Language servers that support this feature are able to operate without sharing a physical filesystem with the client. See this link for more information.
SymbolDescriptor extension
Language servers that support this feature are able to identify symbols through SymbolDescriptors. See this link for more information.


LSP clients

Editor/client Maintainer       Repository Code completion Hover Jump to def Find references Symbol search Diagnostics
Eclipse LSP4E Eclipse git.eclipse.org/c/lsp4e/lsp4e.git
Eclipse Che Eclipse, Codenvy github.com/eclipse/che/
IntelliJ / JetBrains IDEs Guillaume Tâche github.com/gtache/intellij-lsp
VSCode Microsoft github.com/Microsoft/VSCode
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
Sublime Text 3 Tom van Ommeren github.com/tomv564/LSP
MS Monaco Editor TypeFox github.com/TypeFox/monaco-languageclient

Work in progress
Atom GitHub github.com/atom/atom-languageclient
Emacs Corey Richardson github.com/sourcegraph/emacs-lsp
Emacs Vibhav Pant github.com/emacs-lsp/lsp-mode
Sublime Sourcegraph github.com/sourcegraph/sublime-lsp
Theia Theia IDE github.com/theia-ide/theia
neovim TJ DeVries github.com/tjdevries/nvim-langserver-shim
Spyder IDE Spyder IDE Dev Team github.com/spyder-ide/spyder
Oni Oni github.com/onivim/oni

Contact us

Langserver.org is maintained by Sourcegraph.

To suggest additions or to update the status of a project, please file issues or submit PRs on this project at github.com/langserver/langserver.github.io



Icons from Glyphicons Free, licensed under CC BY 3.0.