OS images, Linux agent builds, and operator tools. Every version stays listed. Release notes included.
AlmaLinux 10.1 bootc for UEFI x86-64-v2 thin clients, mini-PCs, and POS terminals. Pull the signed OCI image or boot the ISO and enter your VelaOS code.
2026-04-19 · x86-64-v2 + aarch64 · ~1.8 GB
ghcr.io/vela-hq/velaos-linux:26.04.1
sudo podman run --privileged --pid=host \ -v /dev:/dev -v /var/lib/containers:/var/lib/containers \ ghcr.io/vela-hq/velaos-linux:26.04.1 \ bootc install to-disk /dev/sdaReplace
/dev/sda with your target disk. This wipes the disk..raw.zst image that you decompress and flash to USB. No live-Linux intermediate. The direct bootc install path works on any UEFI x86-64-v2 device with ≥ 4 GB RAM and ≥ 32 GB storage.Pick the path that matches your starting point. All three land you at the same place: a fully-signed VelaOS device on first boot showing the 6-digit enrolment code.
dd on Linux/macOS.You have a thin client or PC you want to turn into a VelaOS device. Wipes the target disk completely and lays down VelaOS as the new OS.
dd:sudo dd if=AlmaLinux-10.1-live.iso of=/dev/sdX bs=4M status=progress oflag=sync
lsblk. It's usually /dev/sda (SATA) or /dev/nvme0n1 (NVMe).sudo podman run --privileged --pid=host \ -v /dev:/dev -v /var/lib/containers:/var/lib/containers \ ghcr.io/twittermail/velaos-linux:stable \ bootc install to-disk /dev/sdaThis pulls the signed bootc image (~1.8 GB), verifies its cosign signature, wipes the target disk, writes the VelaOS rootfs, and installs a bootloader. Takes 4–8 minutes on a gigabit link.
The device is already running a bootc-compatible host (AlmaLinux 10 bootc, Fedora bootc, RHEL 10 image-mode, etc.). One command rebases to VelaOS in place. No USB, no reinstall — the next reboot switches OS.
sudo bootc switch ghcr.io/twittermail/velaos-linux:stableThis only works on a bootc host. On a traditional package-mode AlmaLinux install, use Method A instead.
/var and /home is preserved — only / is replaced.A single velaos-installer-<sha>.raw.zst you decompress and flash to USB. Skips the live-Linux step entirely. Cosign-signed, SHA-256 checksummed.
.raw.zst + its .sig, .pem, and .sha256 sidecars from GitHub Releases.cosign verify-blob \ --certificate velaos-installer-*.raw.zst.pem \ --signature velaos-installer-*.raw.zst.sig \ --certificate-identity-regexp 'https://github.com/twittermail/vela/' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ velaos-installer-*.raw.zst
zstd -dc velaos-installer-*.raw.zst | \ sudo dd of=/dev/sdX bs=4M status=progress oflag=syncReplace
/dev/sdX with your USB device (lsblk to list). On Windows, decompress with zstd.exe then flash the resulting .raw with Rufus in DD mode.For zero-touch fleet rollouts, inject the tenant enrolment code so the device auto-enrols on first boot instead of waiting for a manual entry. The agent checks these sources in order:
VELA_ORG_CODE env var (dev / systemd override)vela.org_code=ACME-1234 — add via GRUB, PXE, or a one-shot USB with an edited /boot/loader/entries/*.conf/etc/vela/enrollment-code.txt — baked into a per-tenant bootc image/boot/vela-enrollment.txt — written by a USB installer helperEvery VelaOS image is cosign-signed (keyless OIDC, sigstore transparency log), carries an SPDX SBOM, and an OpenVEX statement. Before running bootc install you can verify the chain end-to-end.
cosign verify \ --certificate-identity-regexp 'https://github.com/twittermail/vela/.github/workflows/velaos-linux.yml@' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ ghcr.io/twittermail/velaos-linux:stable
cosign verify-attestation --type spdxjson \ --certificate-identity-regexp 'https://github.com/twittermail/vela/' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ ghcr.io/twittermail/velaos-linux:stable | jq '.payload | @base64d | fromjson'
cosign verify-attestation --type openvex \ --certificate-identity-regexp 'https://github.com/twittermail/vela/' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ ghcr.io/twittermail/velaos-linux:stable | jq '.payload | @base64d | fromjson'
UEFI boot priority. Enter firmware setup (F2 / Del / Esc at power-on), put the USB device above the internal disk in the boot order, and disable Legacy/CSM. VelaOS requires UEFI — it won't install on BIOS-only firmware.
bootc installfails with "cannot pull image"Live USB has no network. Bring the interface up before running bootc install: sudo nmcli device wifi connect "SSID" password "PASSWORD" for Wi-Fi, or plug in Ethernet and run sudo dhclient. GHCR is a public container registry; no auth needed for the VelaOS image on a public channel.
GNOME Kiosk didn't start. Switch to a TTY (Ctrl+Alt+F2), log in as root (no password — locked), and run systemctl status gdm. Most common cause is a missing GPU driver on exotic hardware. Open a ticket at /support with the output of lspci -v | grep -A 3 VGA.
VelaOS uses MQTT on TCP port 8883 (TLS). Outbound 8883 must be open. Check firewall / corporate proxy. On the device, switch to a TTY and run journalctl -u vela-agent -f to see connection attempts and the specific error.
CLI, imaging tool, and provisioning config generator.
Generate a bootstrap JSON + QR code for bulk device enrolment. Available in the console dashboard.
Open in console96 endpoints. OpenAPI 3.1 spec. Automate your fleet from CI/CD or AI assistants.
View OpenAPI specThe getting started guide walks through flash, boot, enrol, and first policy push.