Skip to main content

user guide

Welcome to the comprehensive user guide for Corral β€” the unified management platform for virtual machines, pet-pod containers, and local hypervisors.

Backends, contexts, and peers​

corral config set-default-backend incus makes unqualified creates use Incus. corral context list|set|get switches Corral's context without mutating kubectl or the Incus CLI; --context is a one-shot override.

Libvirt URIs make remote QEMU a normal backend, for example: corral context set qemu+ssh://hypervisor/system.

A local dashboard can aggregate an in-cluster Corral without a local kubeconfig: corral peer add homelab https://corral.example.ts.net. Console routing tries the VM's advertised direct address first and relays through the peer only when direct access is unavailable.


1. Overview & Architecture​

Corral brings together diverse virtualization and container workloads under a single interface, CLI, and Tailscale network.

flowchart TD
User([User / CLI / Web UI]) --> Corral[Corral Core]

subgraph Backends
Corral --> QEMU[QEMU / KVM Local]
Corral --> KubeVirt[KubeVirt / Kubernetes]
Corral --> CT[Pet-Pod CT / K8s]
Corral --> Incus[Incus / LXC and VMs]
Corral --> Libvirt[libvirt local or SSH URI]
Corral --> Peer[Remote Corral peer]
end

subgraph Access Layer
QEMU --> Tailnet[Tailscale Tailnet]
KubeVirt --> Tailnet
CT --> Tailnet
Incus --> Tailnet
Libvirt --> Tailnet
Peer --> Tailnet
end

Supported Compute Backends​

BackendScopeTech StackUse Case
QEMULocal HostQEMU / KVM + systemdFast, local ephemeral or dev VMs on your workstation
KubeVirtClusterKubeVirt + KubernetesProduction VMs with live migration, PVC storage, and scaling
Container (CT)ClusterKubernetes Pod + PVC"Pet Pods" β€” persistent Linux containers (Distrobox on K8s)
IncusLocal or remoteIncus remoteContainers and VMs managed through existing Incus trust
libvirtLocal or remotelibvirt URI / OpenSSHExisting domains and remote QEMU hypervisors

2. Interactive Interfaces​

Web Dashboard​

Access the Proxmox-style Web UI at http://localhost:8006 or via corral web.

Automated unified fleet capture

Datacenter View

Features:​

  • Datacenter Tree: Navigate through all VMs, CTs, and Incus instances across local and cluster nodes.
  • Live CPU & Memory Sparklines: Real-time load monitoring per VM.
  • Tag Filtering: Filter instances by custom tags (prod, dev, desktop).
  • Mobile Responsive: Manage your VM fleet from your mobile browser.
  • Theme & Branding: Customize accent colours, header branding, and inject custom CSS β€” via CLI flags, config file, or the built-in Settings page.

Mobile Dashboard

Theme & Branding​

Corral's web UI accent colour, header branding, and custom CSS are fully customizable β€” no source-code changes needed.

CLI flags (highest priority, override everything):

corral web --accent \"#3b82f6\" --brand-title \"My Lab\" --brand-emoji \"⚑\" --brand-subtitle \"Engineering\"

Config file (~/.config/corral/config.yaml, loaded on startup):

web:
accent: \"#22c55e\" # CSS hex colour
accent_2: \"#16a34a\" # hover/active variant
brand_title: \"My Lab\"
brand_emoji: \"⚑\"
brand_subtitle: \"Engineering\"
custom_css: |
.btn.primary { border-radius: 20px; }
.card { background: var(--panel-2); }

Settings page (web UI β†’ Settings in the sidebar):

  • Colour picker with preset swatches (Orange, Blue, Green, Purple, Red, Amber)
  • Brand title, emoji, and subtitle fields with live header preview
  • Custom CSS textarea that injects styles immediately as you type
  • Save button persists to config.yaml

Precedence: CLI flags > config.yaml > built-in defaults (🀠 Corral, orange accent).


Terminal UI (TUI)​

Launch the interactive Bubble Tea TUI by running corral with no arguments (or explore in demo mode with corral --demo).

Automated Corral TUI capture

The left side is a unified, searchable fleet. Wide terminals add a details pane with canonical ID, backend/context, placement, address, resources, and available operations. Failed remotes appear as partial-fleet warnings without hiding healthy instances.

TUI keyboard shortcuts and features​

  • / fuzzy-searches names, canonical IDs, backends, contexts, nodes, and IPs.
  • Tab, [ and ] cycle between the complete fleet and named contexts.
  • Enter opens a capability-aware action menu; unsupported operations are absent rather than failing after selection.
  • s and x quickly start or stop the selected VM; r refreshes every backend.
  • d runs scoped QEMU, KubeVirt, Incus, and libvirt diagnostics.
  • ? opens the in-app command deck.
  • QEMU, KubeVirt, Incus, libvirt, and pet-pod CTs share the inventory without losing their backend-specific capabilities.

3. Core Feature Walkthrough​

1. Instance Lifecycle Management​

Create and manage instances across any backend with identical commands:

# Create local QEMU VM
corral create dev-vm --iso https://example.com/ubuntu.iso --disk 40G

# Create KubeVirt cluster VM
corral create prod-vm --kubevirt --image fedora

# Create on an existing Incus remote
corral create fast-ct --backend incus --context lab --image images:ubuntu/22.04

# Universal operations
corral start dev-vm
corral stop dev-vm
corral delete dev-vm

2. Remote Access: VNC, RDP & TTY​

Corral provides single-command remote access to guest displays and shells:

In-Browser & Local VNC​

VM Summary & VNC

  • VNC Display: corral viewer <vm-name> opens a VNC session. In the Web UI, noVNC provides zero-install browser display access.
  • Interactive TTY / SSH: corral ssh <vm-name> or corral tty <ct-name> connects your terminal directly into guest shell namespaces (via SSH, virtctl console, or incus exec).

Local VM Framebuffer


3. Bootable Container Images (bootc)​

Boot containers directly as VMs using the bootc plugin:

corral plugin install bootc
corral bootc create my-node --image quay.io/centos-bootc/centos-bootc:stream9
  • Builds a bootable OS disk on-cluster using bootc install to-disk.
  • Upgrade guest OS images using corral bootc upgrade <vm-name>.

4. Proxmox VE API Compatibility Layer​

Corral includes a Proxmox VE REST API emulation layer (/api2/json/...), allowing Terraform (bpg/proxmox), Ansible, and Proxmoxer tools to manage KubeVirt and Incus instances natively.

corral plugin install proxmox
corral proxmox serve --addr :8006

5. Plugin Marketplace​

Expand Corral with lightweight marketplace plugins:

# Browse marketplace
corral plugin search

# Installed plugins
corral plugin list

# Plugin management
corral plugin install <name>
corral plugin remove <name>

Available Plugins:​

  • bootc: Bootable container image VM builder.
  • proxmox: Proxmox VE REST API compatibility server.
  • backup: S3/R2 VM disk backup & restore.
  • snapsched: Automated VM snapshot schedules with retention rules.
  • schedule: VM autostart and shutdown cron windows.
  • gpu: GPU / PCI passthrough device plugin discovery.
  • windows: First-class Windows VM creation (UEFI, TPM, virtio drivers).
  • vdi: Virtual Desktop Infrastructure desktop pools.

4. Diagnostics & Troubleshooting​

Run corral doctor to diagnose cluster capabilities, hypervisor support, and storage drivers:

corral doctor

In a multi-context setup it diagnoses every configured QEMU, KubeVirt, Incus, and libvirt target. Use corral doctor --context NAME for one target. The complete capability matrix and direct-versus-relayed networking behavior are documented in backend-support.md.

βœ“ KubeVirt installed (v1.8.2)
βœ“ CDI containerized data importer available
βœ“ Default StorageClass supports volume expansion
βœ“ VolumeSnapshotClass available for backups
βœ“ QEMU KVM hardware acceleration (/dev/kvm) accessible
βœ“ Incus daemon socket (/var/lib/incus/unix.socket) active

Reproducible screenshots​

Documentation captures use the real built-in demo fleet. They are automated for both Chromium and the Bubble Tea TUI:

npm install --prefix e2e
node scripts/capture-docs.mjs docs/screenshots/generated

The same command can target the TunaOS site checkout: node scripts/capture-docs.mjs ../docs/static/img/screenshots/corral.