Skip to content

The language server

nexus-lsp speaks the Language Server Protocol over stdio, so any editor with LSP support gets live diagnostics, completion, and hover for .flow.md files — not only VS Code. It parses with the same code the compiler does, so a file that shows no diagnostics parses.

Diagnostics

The document is parsed on open and on every change, and two kinds of problem are reported in place.

Parse errors — the wrong fence language, a malformed step header, an unterminated front matter. The position comes from the parser’s own span, so it points at the character that failed rather than at the line. Parsing is resilient: a broken step does not suppress the diagnostics on the steps around it.

Semantic warnings on the steps that did parse, anchored on the ## Step: line:

What it catches Severity
A step with no body, no effects and no save_body:/restore_body: — a no-op, silently skipped warning
An empty ntd template or an empty xslt stylesheet — produces null at runtime warning
A route fence with no arms — always fails with NoRouteMatch error
A route arm with no call target, or a route with no otherwise fallback warning
A condition fence in a flow with no async configuration — see ADR-023 in Conditions warning
A validate fence on the input of an async flow — nothing upstream called out, so a failed validation would retry to the DLQ with the same message. A validate placed after an http_egress or grpc_egress step is reading the backend’s answer and is not flagged warning
effects: [http_egress] with no endpoint: warning

If the parser itself ever panics, the server publishes that as a diagnostic rather than dying — an editor whose language server has died shows no diagnostics at all, which looks like a clean file.

Completion

Context-aware:

Where you are What is offered
Between the --- delimiters Front-matter keys
Just after ``` Fence languages
After a ## Step: header, before the first fence Step keys
Inside a ## Fault: section Additionally the deprecated fault_status: and fault_header_*:, offered nowhere else and labelled as deprecated with the current name

Triggered by :, space and `, as well as on request.

Hover

Hovering inside a step shows its name, its kind and the effects it declares — useful in a long file where the fence that defines a step’s behaviour has scrolled away.

What it does not catch

The diagnostics above are the whole semantic list; everything else is a compile-time check and surfaces elsewhere. nexus validate runs the whole compiler, so it is where most of them appear: an unknown step key, an unresolvable sub-flow reference, a timestamp rendered as text, a header field read with an underscore instead of brackets, a ctx. name that nothing declares, a response_status: outside 100–599, and a response header the platform reserves. Only one check needs more than the file: a message ceiling above what the installation allows is refused by nexus deploy, because the threshold it is compared against is a setting of the installation. Run at least nexus validate before deploying.

Running it standalone

Terminal window
$ nexus-lsp

Advertised capabilities:

Capability Detail
Text document sync Full document on every change
Completion Triggered by : and space
Hover Plain support

Configure your editor to launch nexus-lsp for .flow.md files. There are no command-line options and no configuration file — the server takes the document from the client and needs nothing else, so it does not read your registry and does not need the platform running.

The binary ships built, in the delivery bundle, next to the two .vsix files and the script that installs all three — see the VS Code extensions. It goes anywhere on your PATH.