Releases: Benehiko/vee
Release list
v0.3.0
What's changed
Commits since v0.2.0:
- feat(qemu): fix all vee-qemu build legs and activate managed QEMU download (#34) (0c4d1ee)
- docs: var-free install snippets via stable latest-download URLs (#33) (6db872f)
- docs(windows): match docs-site RAM default to 8G (#32) (a450055)
- fix(templates): lower default RAM to 8G for passthrough and windows (#31) (c49c924)
- docs: document all new vee commands, templates, and host platforms (#30) (104b272)
- ci(docs): deploy docs site to Cloudflare Workers static assets (#29) (877edcd)
- ci(docs): deploy documentation site to Cloudflare Pages (#28) (80dc180)
- feat(firmware): ship OVMF firmware in x86_64 vee-qemu bundles (#27) (d91ebf9)
- fix(firmware): probe distro OVMF layouts + document prebuilt install (#26) (d6110b0)
Full changelog: v0.2.0...v0.3.0
Install
Download the asset for your platform, verify the checksum, and put vee on your PATH. vee drives QEMU, so install your host's QEMU packages too — see the Installation guide.
Linux
curl -LO https://github.com/Benehiko/vee/releases/download/v0.3.0/vee-v0.3.0-linux-amd64.tar.gz # or linux-arm64
curl -LO https://github.com/Benehiko/vee/releases/download/v0.3.0/vee-v0.3.0-linux-amd64.tar.gz.sha256
sha256sum -c vee-v0.3.0-linux-amd64.tar.gz.sha256
tar xzf vee-v0.3.0-linux-amd64.tar.gz
install -Dm755 vee "$HOME/.vee/bin/vee"macOS (Apple Silicon)
curl -LO https://github.com/Benehiko/vee/releases/download/v0.3.0/vee-v0.3.0-darwin-arm64.tar.gz # Intel: darwin-amd64
curl -LO https://github.com/Benehiko/vee/releases/download/v0.3.0/vee-v0.3.0-darwin-arm64.tar.gz.sha256
shasum -a 256 -c vee-v0.3.0-darwin-arm64.tar.gz.sha256
tar xzf vee-v0.3.0-darwin-arm64.tar.gz
install -Dm755 vee "$HOME/.vee/bin/vee"
xattr -d com.apple.quarantine "$HOME/.vee/bin/vee" 2>/dev/null || true # unsigned binaryWindows (PowerShell)
iwr https://github.com/Benehiko/vee/releases/download/v0.3.0/vee-v0.3.0-windows-amd64.tar.gz -OutFile vee.tar.gz
tar xzf vee.tar.gz
New-Item -ItemType Directory -Force "$HOME\.vee\bin" | Out-Null
Move-Item -Force vee.exe "$HOME\.vee\bin\vee.exe"Verify the install: vee --help
Run as a daemon (Linux)
The daemon autostarts VMs on boot and stops them cleanly on host shutdown:
vee daemon install # writes /etc/systemd/system/vee.service, enables + starts it
sudo systemctl restart vee # after upgrading the vee binary in place
sudo systemctl status vee # check it's runningAfter upgrading, restart the daemon so it runs the new binary. If the new binary lands at a different path, re-run vee daemon install.
v0.2.0
What's changed
Commits since v0.1.0:
- feat(virtiofsd): checksum-verify source + build in a VM when no container runtime (#25) (79df060)
- docs(windows): record that WHPX cannot accelerate nested guests (#24) (65f23c9)
- feat(qmp): add
vee qmpcommand with daemon-routed QMP client tooling (#23) (4622ae1) - fix(windows): make WHPX guests boot (irqchip + docker SSH hostfwd) (#22) (2ef5dfc)
- fix(windows): tear down install scratch disk + anchor template disks under VM dir (#21) (9aaf62f)
- fix(windows): install Windows 11 24H2 end-to-end via writable scratch disk (#17) (#20) (56ba90e)
- fix(config): anchor relative config paths under ~/.vee (#19) (dc6f19c)
- ci: bump action-gh-release to v3.0.2 (61ac865)
Full changelog: v0.1.0...v0.2.0
Install
Download the asset for your platform, verify the checksum, and put vee on your PATH. vee drives QEMU, so install your host's QEMU packages too — see the Installation guide.
Linux
VEE_VERSION=v0.2.0
ASSET="vee-${VEE_VERSION}-linux-amd64" # or linux-arm64
BASE="https://github.com/Benehiko/vee/releases/download/${VEE_VERSION}"
curl -LO "${BASE}/${ASSET}.tar.gz"
curl -LO "${BASE}/${ASSET}.tar.gz.sha256"
sha256sum -c "${ASSET}.tar.gz.sha256" # must print: OK
tar xzf "${ASSET}.tar.gz"
install -Dm755 vee "$HOME/.vee/bin/vee"
export PATH="$HOME/.vee/bin:$PATH" # add to ~/.bashrcmacOS (Apple Silicon)
VEE_VERSION=v0.2.0
ASSET="vee-${VEE_VERSION}-darwin-arm64" # Intel: darwin-amd64
BASE="https://github.com/Benehiko/vee/releases/download/${VEE_VERSION}"
curl -LO "${BASE}/${ASSET}.tar.gz"
curl -LO "${BASE}/${ASSET}.tar.gz.sha256"
shasum -a 256 -c "${ASSET}.tar.gz.sha256" # must print: OK
tar xzf "${ASSET}.tar.gz"
mkdir -p "$HOME/.vee/bin" && install -m755 vee "$HOME/.vee/bin/vee"
xattr -d com.apple.quarantine "$HOME/.vee/bin/vee" 2>/dev/null || true # unsigned binary
export PATH="$HOME/.vee/bin:$PATH" # add to ~/.zshrcWindows (PowerShell)
$Version = "v0.2.0"; $Asset = "vee-$Version-windows-amd64"
$Base = "https://github.com/Benehiko/vee/releases/download/$Version"
Invoke-WebRequest "$Base/$Asset.tar.gz" -OutFile "$Asset.tar.gz"
Invoke-WebRequest "$Base/$Asset.tar.gz.sha256" -OutFile "$Asset.tar.gz.sha256"
$expected = (Get-Content "$Asset.tar.gz.sha256").Split()[0].ToLower()
$actual = (Get-FileHash "$Asset.tar.gz" -Algorithm SHA256).Hash.ToLower()
if ($expected -ne $actual) { throw "checksum mismatch" }
tar xzf "$Asset.tar.gz"
New-Item -ItemType Directory -Force "$HOME\.vee\bin" | Out-Null
Move-Item -Force vee.exe "$HOME\.vee\bin\vee.exe"Verify the install: vee --help
Run as a daemon (Linux)
The daemon autostarts VMs on boot and stops them cleanly on host shutdown:
vee daemon install # writes /etc/systemd/system/vee.service, enables + starts it
sudo systemctl restart vee # after upgrading the vee binary in place
sudo systemctl status vee # check it's runningAfter upgrading, restart the daemon so it runs the new binary. If the new binary lands at a different path, re-run vee daemon install.
vee-qemu 10.0.2-vee1
Custom QEMU 10.0.2 build for vee.
Linux (x86_64): OpenGL · virglrenderer · SDL2 · GTK3 · SPICE · USB redir · KVM · slirp
macOS (aarch64, Apple Silicon): self-contained bundle with cocoa · OpenGL · virglrenderer (ANGLE/Metal) · MoltenVK (Venus) · HVF, code-signed with the hypervisor entitlement
Windows (x86_64): WHPX · slirp, MinGW-cross-built with bundled runtime DLLs (accelerated CPU + 2D; the GL/SPICE stack is not yet cross-built for Windows)
Assets are bundles (bin/, lib/, share/) extracted into ~/.vee by vee's qemubin package. Each bundle ships QEMU's datadir under share/qemu, including the edk2/OVMF UEFI firmware (decompressed to plain .fd), so no distro OVMF package or Homebrew QEMU is required.
License
QEMU is licensed under the GNU General Public License, version 2
(GPLv2-only). Each bundle ships the full license text and a
corresponding-source pointer under share/licenses/qemu/
(COPYING + SOURCE.txt). The complete corresponding source is the
upstream tarball https://download.qemu.org/qemu-10.0.2.tar.xz
plus any patches noted in SOURCE.txt, reproducible via the build
scripts in this repository. Written offer: for three years the
vee maintainers will, on request (open a GitHub issue), provide the
complete corresponding source for the cost of distribution.
After publishing this release, update internal/qemubin/version.go:
const PinnedVersion = "qemu-10.0.2-vee1"
var Checksums = map[string]string{
"linux-amd64": "<sha256 from qemu-system-x86_64-linux-amd64.tar.gz.sha256>",
"linux-arm64": "<sha256 from qemu-system-x86_64-linux-arm64.tar.gz.sha256>",
"darwin-arm64": "<sha256 from qemu-system-aarch64-darwin-arm64.tar.gz.sha256>",
"windows-amd64": "<sha256 from qemu-system-x86_64-windows-amd64.tar.gz.sha256>",
}v0.1.0
What's changed
Commits in this release:
- docs(windows): document the guest ISO pipeline and the 24H2 install limitation (#18) (f86789d)
- fix(windows): transform WinRE into a Setup boot.wim for install-capable media (#16) (63615a3)
- fix(windows): export Setup WinPE to sources/boot.wim so install media boots (#14) (5845c7a)
- feat(qemu-release): Windows WHPX bundle + GPLv2 compliance for all bundles (#13) (20caae4)
- feat(platform): native Windows (WHPX) host support (#12) (5bffe53)
- feat(cloudinit): hdiutil fallback so macOS needs no xorriso (#11) (7d9bee7)
- ci: add release workflow for v* tags (#10) (5f9a063)
- feat: macOS (Apple Silicon) host support with GPU-accelerated guests (#4) (2498941)
- fix(vm): strip legacy media=cdrom installer disks and skip missing ISOs (#9) (edb36b3)
- ci: bump actions to Node 24 versions (e588975)
- chore: adopt strict golangci-lint, Go 1.26.5, and CI format gate (acbf4e2)
- fix(windows): integrate CAB packages and apply setup media so ISO builds (bfb5c1d)
- fix(windows): disk-backed scratch dir and full-image UUP build selection (5952463)
- fix(images): repair broken download URLs across distros (5145e0b)
- fix(images): alpine download uses sha512 and skips the metal variant (01c652a)
- feat(cli): add
vee pullto pre-fetch base images (d5a14ea) - docs: modernize README, clean prerequisites, add THIRD_PARTY_LICENSES (73311e1)
- fix(virtiofsd): build with glibc, not musl (fixes segfault) (#8) (783238b)
- feat(windows): fully unattended Windows 10 install (#7) (17801c5)
- fix(windows): SMM + Hyper-V enlightenments so Windows actually boots (#6) (7d29d16)
- feat(windows): unattended install + working virtiofs (#5) (293b587)
- fix: break systemd ordering cycle on NFS/SMB automount units (aa19425)
- fix: don't set runner.env write_files Owner before runner user exists (7bc3cdb)
- test: update user-mode NIC tests for -netdev/-device split form (5768b47)
- ci: bump Go to 1.26 to match vendored x/crypto requirement (79164e2)
- feat: provision GitHub SSH keys for self-hosted runners (92a967f)
- ci: use golangci-lint-action v9 with v2 linter and lower go directive to 1.24 (f1f6dde)
- ci: bump CI Go to 1.26 and add tracked pre-commit hook (031b9e3)
- feat: persist runner credentials with age and add disk GC timer (7ee3b84)
- fix: don't pin github-runner UID — collides with admin user (d486748)
- fix: skip per-user primary group in cloud-init users block (3a75aeb)
- feat: install host build toolchain in github-runner template VMs (a4927c6)
- fix: correct rootless setup tool name and add AppArmor profile (655584a)
- feat: add rootless container stack to github-runner template (15e3eb4)
- fix: reduce audio crackling in gaming-arch passthrough VMs (bfd217c)
- feat: add konsole to gaming-arch template (aeb7bd3)
- docs: rewrite gpu-passthrough-gaming.md and add Vulkan vee-check (1885570)
- feat: add driver rebind reset for AMD GPUs without FLR support (d0eab9b)
- fix: force GPU connectors enabled and add VAAPI adapter in gaming-arch template (4180373)
- feat: add rom_bar config option for VFIO GPU passthrough (fcd9ab0)
- fix: correct SDDM session name, add libva-mesa-driver, fix sunshine web UI port (3fd3eda)
- fix: add video/render/input groups and correct sunshine web UI port (e0fbc10)
- fix: scrub stale known_hosts entry before ssh connect (d881aee)
- feat: add --reinstall flag to vee create (77f1a47)
- feat: install yay + sunshine in gaming-arch template with vee tunnel support (8558e09)
- fix: QGA fallback for SSH IP resolution and correct VFIO sibling addr format (98dcf97)
- fix: ssh-copy-id host:port format and key injection error handling (d996f62)
- feat: SSH connection bootstrap for non-template VMs (d644bff)
- fix: --template flag default was shadowing empty-template detection (114617d)
- fix: bare VM boot from existing disk without --template or --no-auto-install (43e93bd)
- fix: --boot-disk implies --data-disk, no need to specify both (9138e86)
- feat: add boot disk selection for data-disk passthrough VMs (4b41de6)
- fix: skip ISO download and hide template fields when --no-auto-install is set (88372a0)
- feat(tui): replace ctrl+enter with C shortcut and confirm popup (0123173)
- feat(tui): add [ Create ] button and ctrl+enter shortcut (2871428)
- fix(tui): embed dir picker as overlay instead of sub-program (169e5ad)
- feat(tui): add host dir picker for Virtiofs Dir field (4c90535)
- refactor(tui): clean up create form fields and visibility logic (b197faa)
- feat(create): disk content warnings and --no-auto-install flag (b7b0632)
- feat(blockdev): richer device descriptions for shell completion (b067e50)
- feat(create): autocomplete --data-disk with unmounted block devices (283b251)
- feat(create): add --user/--password flags and TUI fields (ef60149)
- fix(gaming): skip kasmvnc, surface real QGA errors in vee check (71d8f20)
- test(e2e): tighten gaming-arch timeouts to 5/15 minutes (3b590e6)
- feat(vee-check): add svc_oneshot_check for marker-gated oneshot units (e85c294)
- fix(gaming): wire QGA + serial console + heredoc the boot-order script (2b7925f)
- fix(hostname): use sudo -n so missing credentials fail fast (df5f968)
- fix(qga): bound execute with 3s read/write deadline (f9f5428)
- fix: preserve autostart intent when daemon stops VMs at host shutdown (0e3d0c5)
- fix: disable os-prober in grub-mkconfig to prevent hang inside VM (22a76ac)
- fix: guard efibootmgr boot-order script against unbound grub_num (c0cbe56)
- test(e2e): bump gaming-arch install timeout to 90/100 min (16b011f)
- feat: live install progress — serial streaming + fine-grained phase banners (4d4978d)
- fix: enable ssh and vee-ssh-agent in github-runner template (2343fea)
- feat: add github-runner template for self-hosted Actions runners (50e1751)
- test(e2e): strengthen gaming-arch health checks and second-boot assertions (f2f784a)
- fix: UEFI boot-order + PXE suppression for SPICE gaming VMs (9496021)
- fix: install-pass lifecycle + SPICE gl=off for virtio gaming VMs (69e3471)
- fix: don't error in WaitReadyWithPhases when install pass already completed (2e47eb6)
- fix: treat guest poweroff during install pass as success in WaitReadyWithPhases (81256ac)
- fix: always configure SPICE for gaming-arch VMs (f544459)
- fix: strip ANSI escape codes from vee tunnel serial output (98433b1)
- feat: vee tunnel serial — stream serial console log (c0406bd)
- feat: vee-check post-install health checks + vee check command (9bebec9)
- fix: vee ssh uses vee-managed known_hosts to avoid stale key conflicts (4719519)
- fix: skip kasmvnc gracefully when no matching AUR package exists (fa2a760)
- feat: gaming-arch e2e test + headless/user-mode NIC support (675472a)
- fix: only inhibit host shutdown while VMs are running (0925244)
- feat: run vee daemon as a system service so host shutdown waits for VMs (93e1aee)
- fix: bound QMP command time so a wedged guest cannot hang vee stop (06ee994)
- feat: respect user intent in daemon autostart loop (73988c2)
- refactor: jellyfin template uses 1 core / 2 SMT threads instead of 2 cores (5b3c824)
- refactor: lower jellyfin template default memory from 4G to 1G (1a8f540)
- feat: jellyfin template with media.Source abstraction for NFS/SMB/host-dir/block/USB (ec83b84)
- refactor: group nic/gpu mode name vars in tui/create.go (6f50e40)
- feat: block host shutdown until running VMs gracefully stop (654867e)
- feat: host-side pacman mirror cache (pacoloco) (6910f05)
- fix: refuse to start VMs whose VFIO devices are stuck in D3cold (c6e77f8)
- fix: colocate VFIO sibling functions on the same PCIe root port (f746597)
- fix: bypass HTTP_PROXY for image downloads (3df5cf5)
- fix: harden gaming-arch install.sh against early-boot races (e7d4142)
- feat: add vee version subcommand (4437c4a)
- fix: also attach GPU sibling functions outside the IOMMU group (be9ed1a)
- refactor: unify vee create flag and TUI paths through internal/vm/build (3ddcba8)
- fix: route VM recovery hints through vee subcommands instead of raw shell (54555e4)
- feat: track and surface VM boot phase via serial-log watcher (717815a)
- feat: capture guest serial console to /serial.log (b8400d8)
- feat: hide info logs by default behind a global --verbose flag (f3d408e)
- feat: run reflector before pacstrap to select fastest mirror (34df927)
- fix: rewrite gaming-arch install to use pacstrap instead of cloud-init packages (0daa7c7)
- fix: use pure-Go ICMP echo for ARP stimulation instead of exec ping (1cac5ed)
- fix: ping broadcast subnets to populate ARP before MAC→IP resolution fails (ee61b82)
- feat: show 'installing' status and cloud-init progress in vee status (2a40237)
- fix: persist running state in foreground mode so vee tunnel/ssh work (e6566b5)
- feat: write vfio-pci enable_runtime_pm=0 modprobe conf in daemon install; document D3cold quirk (6d16e18)
- fix: wake D3cold GPU via power/control before VFIO open (efabe0b)
- fix: ide interface for cidata ISO; re-allocate SPICE port if already in use (ca18206)
- fix: use ide interface for install CDROM; don't markReady during pending install (5f28fc1)
- fix: add Arch ISO as install CDROM in gaming-arch template; TUI wizard for vee create (fd4fa62)
- feat: auto-launch SPICE client when connecting to a SPICE service (e8e450f)
- fix: show accurate service URLs for bridge vs user-mode VMs in tunnel menu (61069a9)
- refactor(vm): DB-only config/state; all cmd paths go through Manager (a1ef4a5)
- feat(daemon): auto-enable systemd linger on vee daemon install (c01ffa2)
- feat(daemon): add vee daemon with systemd user service and vee autostart command (7d5fca9)
- fix(manager): WaitReady use QGA socket for guest-ping; skip probe when no SSH/QGA configured (8c79e02)
- fix(nic): switch bridge multiqueue to -netdev tap split form; probe bridge-helper path (18fa642)
- feat(cmd): rewrite vee tunnel with service menu; add VM name completion to vee config (6f8b9ad)
- feat(tui): disk mode/size/passthrough selection in create wizard and config editor (ccafee7)
-...