The Plugin Server Protocol (PSP) defines the protocol used between an editor or IDE and a plugin server that provides features extending or communicating with said IDE. The goal of the Plugin Server Protocol is to declare a generalized superset of the Language Server Protocol (LSP) for plugin contexts.


The plugin Server Protocol is directly based on the Language Server protocol (LSP), created by Microsoft for Visual Studio Code.


What is the Plugin Server Protocol?

Extending IDEs and editors such as VsCode, Atom, Vim or Emacs can be a hassle. While there is a common denominator for language servers using the Language Server Procol (LSP), there is no consensus for plugins. Traditionally once a plugin is done for a specific editor, the work has to be repeated for each development tool, as each tool provides different APIs for implementing the same feature.

A Plugin Server is meant to provide the fancy cool features and communicate with development tools over a protocol that enables inter-process communication geared toward plugin needs, based on LSP.

The idea behind the Plugin Server Protocol (PSP) is to standardize the protocol for how such servers and development tools communicate. This way, a single Plugin Server can be re-used in multiple development tools with minimal effort.

The idea behind using LSP as a basis is to extend an already successfull generalized approach to language server, and bring the benefits to all plugins.

PSP is a win for both plugin providers and tooling vendors!


Overview

The protocol defines the format of the messages sent using JSON-RPC between the development tool and the language server. LSIF defines a graph format to store information about programming artifacts.

Specification

The latest version of the LSP specification is version 3.17. There is now also a specification for the upcoming language server index format (LSIF).

Implementations

The LSP has been implemented for many languages and many development tools are integrating these language servers.