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
Debian 12
Ubuntu 24.04
Alma 9
Fedora 40 · VM
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.