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
Full JSON status: /health
WebSocket endpoints
| Endpoint | Language server | Extra 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
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