Skip to main content

Documentation Index

Fetch the complete documentation index at: https://vorto-editor.dev/llms.txt

Use this file to discover all available pages before exploring further.

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:
FeatureDescription
DiagnosticsErrors and warnings pushed by the server appear inline as you edit
HoverShow documentation and type information for the symbol under the cursor
CompletionsIn-editor completion popup with optional auto-import edits
Signature helpParameter hints while you type a function call
Code actionsQuickfixes, refactors, and source actions (e.g. organise imports)
Goto definitionJump to the definition of a symbol
Goto declarationJump to the declaration of a symbol
Goto implementationJump to the implementation of a symbol
Find referencesList all references to a symbol
RenameRename a symbol across the workspace
Format on saveRequest textDocument/formatting from the server on save
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:
ServerRoot markers
rust-analyzerCargo.toml, rust-project.json
pyrightpyproject.toml, setup.py, setup.cfg, requirements.txt
goplsgo.mod, go.work
vtslspackage.json, tsconfig.json
typescript-language-serverpackage.json, tsconfig.json, jsconfig.json
kotlin-lspsettings.gradle.kts, settings.gradle, build.gradle.kts, build.gradle, pom.xml
clangdcompile_commands.json, .clangd, Makefile, CMakeLists.txt
jdtlspom.xml, build.gradle, build.gradle.kts, .project
marksman.marksman.toml
lua-language-server.luarc.json, .luarc.jsonc, stylua.toml
ruby-lspGemfile, .rubocop.yml
zlsbuild.zig
taplo(none — uses file directory)
bash-language-server(none — uses file directory)
vscode-json-language-server(none — uses file directory)
yaml-language-server(none — uses file directory)
vscode-html-language-server(none — uses file directory)
vscode-css-language-server(none — uses file directory)

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.
ServerLanguage(s)Binary
rust-analyzerRustrust-analyzer
pyrightPythonpyright-langserver --stdio
goplsGogopls
vtslsTypeScript, TSXvtsls --stdio
typescript-language-serverTypeScript, TSX, JavaScripttypescript-language-server --stdio
clangdC, C++clangd
jdtlsJavajdtls
kotlin-lspKotlinkotlin-lsp --stdio
taploTOMLtaplo lsp stdio
bash-language-serverBashbash-language-server start
vscode-json-language-serverJSONvscode-json-language-server --stdio
yaml-language-serverYAMLyaml-language-server --stdio
marksmanMarkdownmarksman server
vscode-html-language-serverHTMLvscode-html-language-server --stdio
vscode-css-language-serverCSSvscode-css-language-server --stdio
lua-language-serverLualua-language-server
ruby-lspRubyruby-lsp
zlsZigzls

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.
# Override an existing server's settings
[lsp.rust-analyzer]
command = "rust-analyzer"
root_markers = ["Cargo.toml"]

# Add a new server not in Vorto's built-in list
[lsp.my-custom-server]
command = "my-lsp"
args = ["--stdio"]
root_markers = ["my-project.json"]
Then associate the server with a language in [languages.<name>]:
[languages.mylang]
extensions = ["mylang"]
lsp = ["my-custom-server"]
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.