What is LSP?

From the official Language Server Protocol specification:

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

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. Check here 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 that list, to provide one more level of information about the capabilities of language servers and LSP clients, to help users figure out what they can look forward to when they download and install a new language server or client, and to help interested developers quickly determine how they can pitch in! We have mapped out what we consider to be the most important features and functionality of both LSP language servers and LSP clients, to provide a quick-reference check for each language and client community to use.


Qualifications:

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

  1. be fully open source
  2. be editor- or language-agnostic (for language servers and clients, respectively)
  3. implement at least one of the key methods listed below

Think we're missing something? Let us know!


Key

Implemented
WIP
Other/unknown

Language servers

Language Maintainer       Repository Code completion Hover Jump to def Find references Workspace symbols VFS extension1 Isolated2 Parallel3
C# OmniSharp github.com/OmniSharp/omnisharp-node-client/blob/master/languageserver
CSS Microsoft github.com/Microsoft/vscode/tree/master/extensions/css
Go Sourcegraph github.com/sourcegraph/go-langserver
GraphQL Facebook GraphQL github.com/graphql/graphql-language-service
Groovy Palantir github.com/palantir/groovy-language-server
Haxe Dan Korostelev github.com/vshaxe/haxe-languageserver
Java Gorkem Ercan
Red Hat
github.com/gorkem/java-language-server
Java georgewfraser github.com/georgewfraser/vscode-javac
JavaScript Sourcegraph github.com/sourcegraph/javascript-typescript-langserver
JSON Microsoft github.com/Microsoft/vscode/tree/master/extensions/json
Julia David Anthoff github.com/JuliaEditorSupport/LanguageServer.jl
O'Caml + ReasonML Darin Morrison github.com/freebroccolo/ocaml-language-server
PHP Felix Becker github.com/felixfbecker/php-language-server
PHP HvyIndustries github.com/HvyIndustries/crane/blob/master/server
Python Palantir github.com/palantir/python-language-server
Rust Jonathan Turner
Mozilla
github.com/jonathandturner/rls
Scala Iulian Dragos github.com/dragos/dragos-vscode-scala
Swift Ryan Lovelett github.com/rlovelett/langserver-swift
TypeScript Sourcegraph github.com/sourcegraph/javascript-typescript-langserver

Works in progress

1 The Virtual File System (VFS) extension allows a language server to operate without sharing a physical file system with the client. This provides deployment benefits and security enhancements in multi-tenant environments.
2 A language server can be run without running local executables or interacting with the local file system.
3 A single language server can service multiple simultaneous workspace sessions independently.


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/
VSCode Microsoft github.com/Microsoft/VSCode
neovim Junfeng Li github.com/autozimu/LanguageClient-neovim

Works in progress
Emacs Corey Richardson github.com/sourcegraph/emacs-lsp
Sublime Sourcegraph github.com/sourcegraph/sublime-lsp
Vim TJ DeVries github.com/tjdevries/nvim-langserver-shim

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.