Skip to main content
🀠

Corral

Alpha

One seamless fleet across QEMU, KubeVirt, Incus, libvirt, and remote Corrals.

Corral gives your laptop, hypervisors, Kubernetes clusters, and remote Corral servers one inventory. Named contexts switch as quickly as kubectx, while --context and --backend keep scripts explicit. Use the same fleet from the CLI, a fast terminal UI, or a Proxmox-style browser dashboard.

QEMU Β· KubeVirt Β· Incus Β· libvirtBackends
CLI Β· TUI Β· Web UIInterfaces
One static Go binaryBinary

See it in action

Corral multi-backend web dashboard showing the unified demo fleet
Corral multi-backend web dashboard showing the unified demo fleet
Corral terminal UI showing a searchable multi-backend fleet and selected VM details
Corral terminal UI showing a searchable multi-backend fleet and selected VM details
Corral web create wizard with image catalog choices
Corral web create wizard with image catalog choices
Corral web dashboard β€” datacenter view with VMs and a Container (CT) in the Server View tree
Corral web dashboard β€” datacenter view with VMs and a Container (CT) in the Server View tree
Live in-browser VNC console showing a bootc desktop VM
Live in-browser VNC console showing a bootc desktop VM
Container (CT) detail β€” distrobox-style persistent rootfs
Container (CT) detail β€” distrobox-style persistent rootfs
Per-VM boot options editor β€” start-on-boot, firmware, boot order
Per-VM boot options editor β€” start-on-boot, firmware, boot order
Live serial console via xterm.js
Live serial console via xterm.js
Folder View β€” VMs and Containers grouped by namespace
Folder View β€” VMs and Containers grouped by namespace
Cluster health β€” KubeVirt/CDI/storage readiness checks
Cluster health β€” KubeVirt/CDI/storage readiness checks
Corral web UI on mobile
Corral web UI on mobile

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

Build from source
git clone https://github.com/tuna-os/corral.git
cd corral
go build -o corral .
Explore without infrastructure
./corral --demo
./corral web --demo