kineuroExperimental Neuroradiology Research
Karolinska Institutet

Install the desk

Take the release, or build the front end and the binary that serves it.

The wizard does this for you. This page is what it does, for when you would rather do it yourself.

The desk is one binary, nils-desk, and one configuration file. It serves the web application, holds the session, and is the only thing a browser talks to: the engine, the model gateway and the assistant stay on the loopback behind it.

Install the engine first. The desk is useless without one, and says so plainly when it cannot reach one.

Take the release

v=v1.0.0-beta.1           # the newest tag on the releases page
os=linux; cpu=x86_64      # or macos, and arm64
base=https://github.com/kineuro/nils-desk/releases/download/$v
curl -fsSLO $base/nils-desk-$os-$cpu
curl -fsSL $base/SHA256SUMS | grep " nils-desk-$os-$cpu$" | sha256sum -c -
sudo install -m 755 nils-desk-$os-$cpu /usr/local/bin/nils-desk
nils-desk --version

Name the version rather than saying latest. GitHub’s latest skips a prerelease, and until 1.0.0 that is all there is, so a latest/download/... URL answers 404. The releases page has the newest tag.

The desk’s version numbers are its own and need not match the engine’s. Which desk runs beside an engine is decided by the contracts: every desk release publishes a contracts.json naming the engine contracts it speaks and the lowest it starts against, and nils setup and nils update take the newest desk release whose floor the engine meets. A newer desk that needs an engine contract the engine does not speak yet waits, and is not installed. Installing by hand, check the pair with nils-desk check before you start it.

The web application is inside the binary, so there is nothing else to fetch. There is a container image as well.

Build

Build it yourself when you want a change of your own, or for a platform the release does not carry. The binary embeds the web application, so the front end is built first.

git clone https://github.com/kineuro/nils-desk
cd nils-desk/web && npm ci && npm run build
cd ../desk && cargo build --release
sudo install -m 755 target/release/nils-desk /usr/local/bin/nils-desk
nils-desk --version

Node 22 and the Rust toolchain the repository pins, nothing else.

What it needs at run time

Nothing but its configuration file, a directory it may write (its SQLite store and, in local mode, its signing key), and an engine to reach.

~/nils/desk/nils-desk.toml      the configuration
~/nils/desk/nils-desk.sqlite    sessions, people and groups, the record of runs
~/nils/desk/nils-desk.key       local mode only, made at first start, mode 600

The commands

Command What it does
nils-desk serve --config FILE serve the desk
nils-desk check --config FILE check the engine’s contract versions against this desk’s, and exit
nils-desk contracts print the engine contracts this desk speaks and the lowest it starts against, as JSON: the release’s contracts.json
nils-desk user ... the people: add and password in local mode, list and access in both
nils-desk group ... the groups: list, add, set, remove
nils-desk register --authentik ... register this desk at an identity provider

Next: the configuration file.

Updated 17 October 2026