Native
Northplane can run straight on the host, which suits setups where Headscale already runs there, usually under systemd. It's built from source once, then runs on Node.js.
Prerequisites
- Linux
- Headscale and a Northplane config file, as described in Before installing
- To build: Go matching the
godirective ingo.mod, and pnpm>=10.4 <11 - To run: Node.js
>=24.2 <25
Go and pnpm are only needed to build. The result runs on Node.js alone.
Building
# Optionally check out a release tag first
git clone https://github.com/tale/headplane.git
cd headplane
./build.shbuild.sh installs locked dependencies and builds the web UI, the Browser SSH
module, the agent and the healthcheck binary. The agent
lands in build/hp_agent. Copy it to /usr/libexec/headplane/agent to
use it, or see the agent page
for another location.
Running
Create the data directory from server.data_path (/var/lib/headplane by
default) and make it writable by the user that runs Northplane:
sudo mkdir -p /var/lib/headplane
sudo chown -R headplane:headplane /var/lib/headplaneThen start Northplane from the repository directory, so it can find build/:
node build/server/index.jsIt reads /etc/headplane/config.yaml unless HEADPLANE_CONFIG_PATH points
elsewhere. Open http://localhost:3000/admin once it's up.
systemd
Save this as /etc/systemd/system/headplane.service, adjusting the user and
paths, then run sudo systemctl daemon-reload and
sudo systemctl enable --now headplane:
[Unit]
Description=Northplane
# Use headscale.service here instead if Headscale runs under systemd
After=network.target
[Service]
Type=simple
User=headplane
WorkingDirectory=/opt/headplane
ExecStart=/usr/bin/node /opt/headplane/build/server/index.js
Restart=on-failure
RestartSec=5s
# Environment=HEADPLANE_CONFIG_PATH=/path/to/config.yaml
[Install]
WantedBy=multi-user.targetSigning in
Until SSO or proxy authentication is set up, sign in with a Headscale API key:
headscale apikeys create --expiration 90dSee API keys for how keys and sessions work.
Custom path prefix
To serve Northplane somewhere other than /admin, set server.base_path. See
A different path.
Next steps
- To edit DNS and sign-in restrictions from the UI, set up the proc integration.
- Put Northplane behind a reverse proxy.
- See After installing for the rest.