Skip to main content

vulkro lsp

Runs Vulkro as a Language Server Protocol server, so any editor with an LSP client shows findings inline.

vulkro lsp

The command is the server: it speaks JSON-RPC 2.0 over stdin and stdout with standard Content-Length framing. There are no flags beyond --offline.

When it scans​

  • didOpen: the first open in a workspace runs a full project scan. Later opens reuse the cached result.
  • didSave: re-analyses only the saved file, or the whole project when the file takes part in a cross-file finding.
  • didChange: accepted, but does not scan (Vulkro reads from disk).

Each diagnostic has the finding's line, severity (Critical and High are errors, Medium is a warning), the finding id as code, and vulkro as source. Code actions: Suppress (inserts a vulkro:disable-next-line comment) and Explain. The server never edits your code on its own.

Without a licence the server starts but does not scan: it shows a visible "no licence" notice and never publishes empty diagnostics as if a file were clean.

Editor setup​

Neovim (nvim-lspconfig):

local lspconfig = require('lspconfig')
local configs = require('lspconfig.configs')
if not configs.vulkro then
configs.vulkro = { default_config = {
cmd = { 'vulkro', 'lsp' },
filetypes = { 'python', 'javascript', 'typescript', 'go' },
root_dir = lspconfig.util.root_pattern('.git', 'package.json', 'pyproject.toml', 'go.mod'),
} }
end
lspconfig.vulkro.setup({})

Helix (languages.toml):

[language-server.vulkro]
command = "vulkro"
args = ["lsp"]

[[language]]
name = "python"
language-servers = ["pyright", "vulkro"]

Emacs eglot, Zed and Sublime LSP: register the command vulkro lsp. Run it next to your normal language server. For VS Code, Cursor and Windsurf use the VS Code extension.

Options​

initializationOptions: minConfidence (high, medium default, low), saveScope (file default, project), watch.

VariableEffect
VULKRO_LSP_LOG=1Trace lines on stderr.
VULKRO_LSP_DEBOUNCE_MS=<N>didChange debounce (default 300, range 50 to 5000).
VULKRO_LSP_INCREMENTAL=0Rescan the whole project on every save.

Other VULKRO_* scan variables apply too.

Exit codes​

0 clean shutdown. 2 IO failure, malformed framing or a bad argument.