Skip to main content
Control plane for infrastructure you own

Describe the app.
Ship the machine.

A few lines of spec become an immutable, reversible deployment on your own Incus fabric. No box to log into, no Nix to write.

kixctl.appdemo-api
kixctl.app = {
  language   = "node";
  src        = ./demo-app;
  entrypoint = "demo-api";
  port       = 8080;
};
imagedemo-api-7c1b8ad
servicesystemd · running
status● live · reachable by name
The everyday

How little it takes.

The common things — deploy, promote, roll back, spin up a box. Try the buttons; this is the shape of the real thing.

Deploy
from Forgejo · Gitea · GitHub
$ git push
→ building demo-api @ 7c1b8ad
→ launched revision · internal network
✓ update ready
Push a commit. kixctl builds an immutable image and stages the new revision beside the running one.
Promote & roll back
one action each
7c1b8ad
previous
a4d29f0
live
e91c7b2
staged
a4d29f0 is live · e91c7b2 staged
Promote when you're ready. If it goes wrong, revert — the previous revision is a whole, intact machine.
New instance
any distro, no CLI
nodepowerhouse-01
image ▾Debian 12
cpu / mem2 · 4 GiB
pick an image, then create
Pick a distribution from the live catalog, set limits, create. Then log in and run it like any cloud box.
Snapshot & restore
copy-on-write · instant
○ snapshotpre-experiment
○ snapshotclean-install
2 snapshots · newest: pre-experiment
Snapshot before you tinker, restore in seconds if it breaks. Data on attached volumes survives the revert.
Reachable by name
built-in edge · internal by default
edge Caddy  ·  resolver CoreDNS
demo-api.apps.internal  → live revision
lan off  ·  expose when you choose
Every deploy gets a stable name through kixctl's own Caddy edge and CoreDNS resolver — internal by default, on your LAN only when you opt in.
Config & secrets
encrypted at rest
DATABASE_URL••••••••••
API_KEY••••••••••
Declare once; each revision receives it as a root-only credential at launch — never baked into the image, never in the instance config.
Built to be run

Deploys you can take back.

Point kixctl at an Incus cluster and your first immutable, reversible revision is minutes away — several workloads, real isolation between them, one control plane.

Get started