What is Panix?
Panix is a stateless deployment orchestrator for Nix flake installables.
The Problem
Section titled “The Problem”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.
What Panix Provides
Section titled “What Panix Provides”- 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.