See it in action











Features
One multi-context fleet
Aggregate local QEMU, several KubeVirt clusters, Incus remotes, libvirt URIs, and remote Corral peers without flattening their identities.
Containers (CT) β distrobox on k8s
Proxmox-style pet pods alongside VMs. Privileged CTs seed a persistent, mutable root filesystem onto their volume and chroot into it β package installs and dotfiles survive Stop/Start, like a real distrobox container.
Proxmox-style web UI
Dark dashboard with datacenterβnodeβVM/CT tree (Server View and Folder View), live status, create wizards, in-browser VNC and serial consoles, a per-VM boot/options editor, and ISO/template upload.
SSH that just works
Public key injected at create time. Corral picks the right path: K8s tunnel for cluster VMs, Tailscale port-forward for local ones.
VMs join your tailnet
Drop a Tailscale auth key and every cloud-init VM registers itself β MagicDNS name and all.
Backend-aware doctor
Runs scoped diagnostics for QEMU, KubeVirt, Incus, and libvirt, while preserving healthy inventory when another context is unavailable.
Scheduled backups
corral backup schedule runs entirely in-cluster via CronJobs β export, upload to any rclone remote (S3/R2), and prune old backups on a schedule, with no workstation required.
Plugin marketplace
Extensions ship as plugins β browse, install, and run from CLI or web UI. bootc plugin builds OS disks on-cluster from container images; corral-windows sets up UEFI/TPM/virtio for Windows guests.
Context-switching TUI
Search the whole fleet, cycle contexts with Tab, inspect canonical identity and capabilities, run doctor, and launch lifecycle or console actions without leaving the terminal.
One static binary
No daemons, no controllers, no client-side K8s SDK. Drives kubectl/virtctl/systemctl β the tools you already trust.
Get started
git clone https://github.com/tuna-os/corral.git
cd corral
go build -o corral ../corral --demo
./corral web --demo