Skip to content

Install

JasperNode runs on Linux (2 cores and 2 GB of RAM at least) or in a Linux container with Docker on macOS, Windows or Linux. There is one install line per shape.

In JasperX, open a project and choose Add controller → Do you have your own hardware? → Generate a code. JasperX shows the install line for that controller, with its claim code in it, and the local web interface password, once. Run the line on the machine; the controller installs, claims itself into the project and receives its password. The Docker installer ends with:

Open https://app.jasperx.io; the controller appears there within a minute.

The lines look like this, with your own code in place of JX-ABC123:

Terminal window
# Docker on Linux or macOS
curl -fsSL https://dl2.jasperx.io/jn/docker.sh | JX_CLAIM=JX-ABC123 bash
Terminal window
# Docker Desktop on Windows (PowerShell)
$env:JX_CLAIM="JX-ABC123"; irm https://dl2.jasperx.io/jn/docker.ps1 | iex
Terminal window
# Linux, natively, as a service that starts with the computer
curl -sL https://dl2.jasperx.io/jn/install.sh | JX_CLAIM=JX-ABC123 sudo -E bash -

A code works once and for 15 minutes. A JasperMate is claimed from the link on its sticker instead.

The same lines without JX_CLAIM= install a controller that is not claimed. It starts and runs, and the Docker installer ends with the next step:

Open https://app.jasperx.io; if this controller is not there yet, add it and run the line JasperX gives you.

Until it is claimed once, its local web interface answers nothing: the password is set from JasperX.

OptionEffect
JX_CLAIM=JX-…Claims the controller into JasperX as it starts
JN_CHANNEL=beta-v2Follows the beta channel instead of stable
CNTR=modbus,s7Installs these connectors as it starts (install.sh); names as in the Connector catalog

Each controller lives in one folder, ~/jaspernode/<name> (%USERPROFILE%\jaspernode\<name> on Windows). The installer asks for a name and a port (Return takes the port it offers) and prints the commands for that folder:

Terminal window
cd ~/jaspernode/<name> && docker compose logs -f # the log
cd ~/jaspernode/<name> && docker compose pull && docker compose up -d # update

Without the installer, with a claim code from JasperX’s Add controller:

Terminal window
docker run -d --name jaspernode --restart unless-stopped -p 9009:9009 \
-e JX_CLAIM=JX-ABC123 \
-v jaspernode-data:/var/lib/jaspernode \
jaspernode/jaspernode:latest-v2

The claim is used once, on the first start that finds it; later starts ignore it. To claim a container started without one, generate a fresh code, docker rm -f jaspernode, and run the line above again with the same volume: the controller keeps its data. --restart unless-stopped is needed: the controller restarts by exiting. Port 9009 is the local web interface.

In a container, network connectors (Modbus TCP, MQTT, S7, InfluxDB, Modbus Server) work as they do natively. EtherCAT and LiDAR need Linux hardware; serial devices need a network-serial gateway or a port passed into the container.

install.sh installs JasperNode as a systemd service under its own unprivileged user, and adds jnsm to manage it (jnsm status, jnsm logs-follow, jnsm restart). Re-running the line updates it.