A management console for Canton Network validator nodes. NodePilot handles the parts of running a validator that are tedious to do by hand: provisioning a host, installing the Splice stack, wiring up Keycloak and TLS, and keeping an eye on the node once it is live.
It runs two ways. Point it at a plain Linux box over SSH and it drives Docker Compose for you, or hand it a kubeconfig and it deploys the same stack with Helm. Either way you work from one dashboard instead of a pile of shell scripts.
- Connect to a remote host over SSH and install a Canton validator end to end
- Deploy to Kubernetes through Helm when you'd rather run on a cluster
- Switch between DevNet, TestNet and MainNet without rebuilding config by hand
- Track CPU, memory, disk and network for each node from the validator detail page
- Configure the public-facing domain, run DNS checks and request Let's Encrypt certs
- Stand up Keycloak for validator authentication and rotate the operator secrets
- Store SSH passwords, private keys and onboarding secrets encrypted at rest
- Node.js 20 or newer
- pnpm 9+
- A target host you can reach over SSH, or a Kubernetes cluster and its kubeconfig
pnpm install
cp .env.example .envOpen .env and set AUTH_SECRET to a random value before you start:
openssl rand -base64 32Then apply the database schema and start the dev server:
pnpm prisma migrate deploy
pnpm devThe app is served at http://localhost:3000.
Registration is open only until the first account exists. Create your account on the register page, and from that point the endpoint closes itself. Manage the instance with that first user.
All runtime settings live in .env. The defaults in .env.example use a local
SQLite file, which is fine for a single operator. For a shared deployment, point
DATABASE_URL at PostgreSQL and run the migrations again.
| Variable | Purpose |
|---|---|
DATABASE_URL |
Prisma connection string (SQLite by default) |
AUTH_SECRET |
Signing key for NextAuth sessions — required |
AUTH_TRUST_HOST |
Set to true when running behind a proxy |
Secrets that belong to a validator (SSH credentials, onboarding secret, Keycloak
passwords) are encrypted with a key derived from SECRET_ENCRYPTION_KEY, falling
back to AUTH_SECRET if that isn't set.
Next.js 16 (App Router) and MUI 7 on the front end, NextAuth v5 for sessions,
Prisma for storage, ssh2 for the Compose path and @kubernetes/client-node
for the Helm path.
The UI layer is built on top of the Materio Free MUI Next.js Admin Template by ThemeSelection, used under the MIT License.
See CHANGELOG.md for release history and ROADMAP.md for what's planned next. Current release: v1.1.0.
NodePilot is built and maintained in the open. If it saves you time, you can support its development on the Canton Network by sending to our party:
b2a11d907944-askardex::1220bd53dd8475646097f233957b61695a91e2b5a1882e393337e321f9e89097a96f
Released under the MIT License. See LICENSE.