Editor and tooling
The language server, package manager, and MCP server.
Beyond the compiler, NURL ships a formatter, a language server, a package manager, and a local MCP server. You can build each one separately from the repo.
Editor support
tooling/vscode-nurl/
is a VS Code extension. It also works in Cursor and Windsurf. It has
syntax highlighting and a full language server. The language server gives:
go-to-definition, hover, document outline, completion, workspace symbol
search, folding, and nurlfmt-backed formatting on save.
git clone https://github.com/nurl-lang/nurl.git
cd nurl
./install.shinstall.sh is idempotent. It is safe to re-run. It bootstraps the
compiler. It builds nurl-lsp. It symlinks it onto your PATH. It
installs the VS Code extension if code / cursor / windsurf is
available. Flags: --no-vscode, --no-path, --force, --uninstall.
The browser playground ships the same tokenizer. The playground ports it to Monaco. Syntax highlighting works there with no install.
Language server (nurl-lsp)
./tools/nurl-lsp/build.sh builds a stdio JSON-RPC server. It has
diagnostics, go-to-definition, hover, document symbols, completion,
formatting, workspace symbol search, and folding ranges. This is the
engine behind the editor extension above.
Package manager (nurlpkg)
./tools/nurlpkg/build.sh builds a Cargo-shaped package manager. It
handles path dependencies and registry dependencies. The registry is at
reg.nurl-lang.org. Manifests work in a repo
checkout and from a published tarball.
mkdir demo-app && cd demo-app
nurlpkg init demo-app # write nurl.toml
nurlpkg add http-router --path ../router --version 0.2.0
nurlpkg install # symlink deps/, write nurl.lock
nurlpkg verify # CI gate: exit 1 on lockfile drift
nurlpkg install nq # fetch + build a registry program
nurlpkg publish # pack + uploadOther subcommands: info, deps, remove, update, lock, login,
logout, search, yank / unyank, test, bench, version,
self-update.
self-update upgrades the toolchain rather than a package — normally
you spell it nurl upgrade (see Install).
nurlpkg update is a different thing entirely: it moves your project's
dependency requirements.
MCP server (nurl-mcp)
nurlpkg install nurl-mcp gives an LLM agent a local MCP server. The
server uses the installed toolchain. It can build, run, type-check,
format, and compile to WebAssembly. It also gives read access to the
installed standard library.
claude mcp add nurl -- nurl-mcpStdio is the default. The flag --http adds a token-authenticated
network transport. Code execution is gated behind --allow-run. The flag
--read-only strips everything but the analysis tools. This is the local
counterpart to the hosted MCP endpoint. That endpoint is covered in
Playground and APIs.
WebAssembly toolchain
nurlpkg install wasmbuilder # NURL → wasm32-wasi, fully local
nurlpkg install wasmtime # pure-NURL wasm runtime
wasmbuilder program.nu # → program.wasm
wasmtime run program.wasmwasmbuilder drives nurlc. It retargets the emitted IR for wasm32-wasi.
It links with a bundled zig cc. wasmbuilder --doctor diagnoses a local
setup.
Next
- Formatting — the rules
nurlfmtenforces. - Testing and benchmarking —
nurlpkg test/nurlpkg benchin full. - Platforms — where the toolchain runs and what it can target.
- Playground and APIs — the hosted equivalent of the MCP server.
Last updated on