Skip to content

What is Panix?

Panix is a stateless deployment orchestrator for Nix flake installables.

Deploying NixOS at fleet scale today means stitching together separate tools for bootstrapping bare metal and for ongoing deployment, with manual glue in between. Failures surface in scrollback logs after execution completes, and a failed phase usually means restarting the entire workflow.

  • Stateless operation: no persistent state between runs. Everything is derived from your flake, configuration file, and runtime machine inspection.
  • Phase pipeline: six phases (Inspect, Bootstrap, Build, Transfer, Secrets, Activate), each with a defined scope. See the phase pipeline.
  • Installable/machine separation: many machines can share one installable, so each closure builds once. See the configuration model.
  • Multi-flake fleets: deploy machines from multiple flakes and repositories in one run. See multi-flake deployments.
  • Multiple output types per machine: deploy a NixOS system and a home-manager profile to the same box. See custom output types.
  • Bootstrap support: convert machines to NixOS via kexec and disko, or install Nix on targets that lack it for profile deployments, with hooks and secrets at multiple stages. See the bootstrap guide.
  • Auto rollback: revert a machine to its pre-deploy generation when activation fails. See auto rollback.
  • Real-time TUI: watch each phase per machine, inspect logs, and retry failed phases without restarting the workflow. See TUI keybinds.
  • Flake-agnostic configuration: deployment configuration lives outside your flake. No flake modifications are required.

Start with the Quick Start.