iLSP

Language Server Proxy self-hosted

iLSP is a WebSocket gateway that exposes language server protocol (LSP) backends over a single HTTP endpoint. Editors connect via WebSocket and receive code intelligence — completions, hover, diagnostics — for Bicep, YAML pipelines, and Python, enriched with organisation-specific catalogs.

What is LSP

The Language Server Protocol is a standard protocol between editors and language analysis tools. An editor sends requests (go-to-definition, completion, hover) and receives structured responses without knowing anything about the language itself. Any editor that speaks LSP — IntelliJ, Neovim, VS Code, Helix — works with any LSP server.

iLSP wraps existing language servers (Bicep Language Server, yaml-language-server, pylsp) and injects completion items from internal catalogs before responses are returned to the editor.

Live status

27
Bicep modules
48
Pipeline templates
40
Python packages
254
AzDO tasks

Full JSON status: /health

WebSocket endpoints

EndpointLanguage serverExtra completions
wss://ilsp.i80.dk/bicep Bicep Language Server ACR module paths, versions, params
wss://ilsp.i80.dk/yaml yaml-language-server AzDO task schema (254 tasks), pipeline templates
wss://ilsp.i80.dk/python pylsp (Jedi) Internal PyPI package stubs

Editor setup

Neovim — add to your LSP config (init.lua):

-- Bicep
vim.lsp.start({
  name    = "ilsp-bicep",
  cmd     = { "websocat", "wss://ilsp.i80.dk/bicep" },
  filetypes = { "bicep" },
})

-- YAML pipelines
vim.lsp.start({
  name    = "ilsp-yaml",
  cmd     = { "websocat", "wss://ilsp.i80.dk/yaml" },
  filetypes = { "yaml" },
})

IntelliJ IDEA / Rider — install the LSP client plugin, then add a server under Settings → Languages & Frameworks → Language Servers:

Name:    iLSP Bicep
Command: websocat wss://ilsp.i80.dk/bicep
Pattern: *.bicep

Name:    iLSP YAML
Command: websocat wss://ilsp.i80.dk/yaml
Pattern: azure-pipelines.yml, *.yaml
websocat bridges a WebSocket to stdio so editors that expect a local process can connect to a remote LSP. Install with brew install websocat or cargo install websocat.

VS Code — use the LSP client or configure the built-in vscode-languageclient in a workspace extension, pointing serverOptions.command at websocat wss://ilsp.i80.dk/bicep.

Updating the catalogs

Catalogs are baked into the Docker image at build time and can also be refreshed at runtime without restarting. Run the sync scripts from the iLSP repository and call the reload endpoint:

# Sync Bicep module catalog from ACR and push
python3 scripts/sync_push_catalogs.py

# Trigger a hot reload without container restart
curl -X POST https://ilsp.i80.dk/reload