Every device in your fleet, one click away.
See what each device reports, get alerted when something breaks, and open a shell on any of them, even behind NAT, without opening a port on the device.
Nixstasis is a server you run and a small agent on each Linux device.
- Checking in
- Waiting for your approval
- Alerting
- Gone quiet
- Open in your browser
Approve
Nothing joins your fleet on its own.
Each device registers with an identity tied to the MAC address of the interface that reaches your server. It stays pending until you approve it.
Watch
Find out when something breaks.
Every check-in carries telemetry from built-in inventory and the Starlark scripts you install. Your rules turn it into alerts, a device that goes quiet raises one too, and alerts reach you by email or webhook.
Organize
Find the devices you mean.
Put devices in groups, filter the fleet down to the ones you care about, and build reports from their telemetry.
Script
Change devices without handing out a shell.
Push Starlark scripts to devices and run them. A script can only run commands on an allowlist you control, and you can push a new allowlist from the server.
Reach
A shell when you need one, and only then.
Open a device and you get an SSH terminal in your browser. The tunnel behind it exists only while you have the device open.
No way in but yours
- No inbound ports to open on your devices. The agent and the tunnel both connect out, so devices work behind NAT and firewalls that only allow outbound traffic.
- No shell commands from the server. The agent accepts a fixed set of actions, and scripts can only run the commands you allowed.
- No shortcuts on TLS. The agent always checks the server's certificate and never follows a redirect, so it only talks to the address you configured.
- Single sign-on with your identity provider. Operators sign in through any OpenID Connect or OAuth 2.0 provider, such as Microsoft Entra ID, Google, GitHub, GitLab, Okta, or Meta, and you decide who is a viewer, operator, or admin. The server ignores identity headers that don't carry the gateway's shared secret.
From clone to first device
You need a host with Docker for the server, and Linux devices on amd64 or arm64 with systemd, or Nix.
-
Run the server
In a clone of the repository, copy the environment template and fill in every required value. Then run the migrations and start the stack.
cd deploy/compose cp .env.example .env docker compose --env-file .env run --rm nixstasis /app/bin/migrate docker compose --env-file .env up -d nixstasis caddy frps postgres -
Install the agent
Grab the package for your device from the latest release. It bundles
frpc, and the.deband.rpmpackages pull in OpenSSH andsudo. Before using the.runinstaller, install OpenSSH andsudoyourself and start the SSH server.# Debian, Ubuntu sudo apt install ./nixstasis_<version>_amd64.deb # Fedora, RHEL sudo dnf install ./nixstasis-<version>-1.x86_64.rpm # Any other Linux with systemd sudo sh nixstasis-<version>-linux-amd64.runOn arm64, use the arm64 or aarch64 file. With Nix, run
nix build .#client. -
Point it at your server and approve it
Set your server's address in
/etc/nixstasis/config.yaml. The agent retries registration every two minutes, or you can restart it now.api: url: "https://nixstasis.example.com" frp: server_addr: "nixstasis.example.com"sudo systemctl restart nixstasis-registration.serviceThe device shows up waiting for approval. Approve it, and it starts checking in.