Skip to content

Releases: Benehiko/vee

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 14:29
v0.3.0
0c4d1ee

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 binary

Windows (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 running

After 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

Choose a tag to compare

@github-actions github-actions released this 15 Jul 10:19
v0.2.0
79df060

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 qmp command 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 ~/.bashrc

macOS (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 ~/.zshrc

Windows (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 running

After 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

Choose a tag to compare

@github-actions github-actions released this 15 Jul 14:17
6db872f

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

Choose a tag to compare

@github-actions github-actions released this 14 Jul 16:58
v0.1.0
f86789d

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 pull to 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)
    -...
Read more