Skip to main content
Vorto includes a built-in Language Server Protocol client that connects to language servers running as external processes. When you open a file, Vorto identifies the language, looks up the configured server for that language, spawns it if it isn’t already running, and begins exchanging messages over stdin/stdout using JSON-RPC. All communication happens in the background; the editor remains fully responsive.

Supported LSP features

Vorto’s LSP client implements the following capabilities: Inlay hints are not currently implemented.

How servers are started

Vorto spawns each language server lazily — the first time you open a buffer whose language has a configured server, Vorto starts that server in the background and performs the LSP initialize handshake. The server process is kept alive for the duration of the editor session and shut down gracefully when Vorto exits. If a language has multiple servers configured (for example, TypeScript has both vtsls and typescript-language-server), Vorto attempts to start each one and silently skips any whose binary is not found on PATH.
Language server binaries are not bundled with Vorto. You must install each server separately and ensure its binary is available on your PATH before Vorto can use it.

Project root detection

When starting a language server, Vorto must tell it where the workspace root is. Vorto walks up the directory tree from the opened file and stops at the first directory that contains one of the server’s configured root markers. If no marker is found, the directory of the opened file is used as the root. The root markers for each built-in server are:

Built-in LSP servers

Vorto ships with default configurations for the following language servers. Each entry corresponds to a [lsp.<name>] block that is active without any configuration on your part.

Configuring custom LSP servers

You can override any built-in server’s settings or add entirely new servers in ~/.config/vorto/config.toml using [lsp.<name>] blocks.
Then associate the server with a language in [languages.<name>]:
If you redeclare [lsp.<name>] for a built-in server, your values are merged on top of the defaults. You only need to specify the fields you want to change.