Skip to content

Protocol History

Erich Gamma edited this page Jun 24, 2016 · 8 revisions

The protocol was not created out of thin air, but it builds up on work and experiences from many others. Here is a brief history of the protocol.

Editors like vim or emacs have used language servers or demons to provide semantic auto complete support since a while.

This concept was picked up by OmniSharp. OmniSharp provides auto complete and other rich editing features for C#. Initially OmniSharp used the http protocol with a JSON payload. OmniSharp has been integrated into several editors. One of them was VS Code.

Around the same time Microsoft started the work on a TypeScript language server, with the idea to support TypeScript in editors like emacs and sublime. The TypeScript Server communicates through stdin/stdout with the server process and uses a JSON payload inspired by the V8 debugger protocol for requests and responses. This TypeScript server has been integrated into the TypeScript Sublime plugin. VS Code also integrated this language server.

After having consumed two different language servers in VS Code, we started to think about a common language-server-protocol. The idea was to simplify the consumption of language server through a common protocol. A common protocol enables to write the integration code into the host once and then to reuse for other language servers that provide the same protocol. The protocol used the TypeScript server protocol as a starting point. The goal was to make the protocol more general and also language neutral. In addition, the protocol should work with servers that support different features. Therefore, it introduced so called capabilities that enable a server to communicate its features to the host of the server. We selected JSON-RPC as the basic remote procedure call protocol.

The first consumers of this protocol were linters that were kept alive and where running as a simple language server that returns warnings or diagnostics by calling into a linter library. Later the protocol was enriched with full language features inspired by the VS Code language API.

The VS Code PowerShell extension was among the first adopters of the full language server protocol outside of the VS Code team.