Installation

Troubleshooting

Self-tests

Before debugging a specific sandbox, confirm the backend itself works. Each self-test creates a real guest, verifies exec end-to-end, and cleans up:

heyvm test-apple-virt         # macOS, Apple Virtualization.framework
heyvm test-firecracker        # Linux, Firecracker

A passing test-apple-virt proves the entitlement, the image, and SSH all work on your machine — which narrows any remaining failure to a specific sandbox or a specific image.

Where the logs are

Path Contents
~/.heyo/heyvm.log CLI activity
~/.heyo/heyvmd.log Daemon activity
~/.heyo/sandboxes/<id>/owner.log Per-sandbox boot diagnostics, incl. serial console
~/.heyo/images/<backend>/<name>/ Downloaded and snapshotted images
~/.heyo/settings.json Default backend and other settings

macOS

The virtualization entitlement is missing

apple_virt requires the com.apple.security.virtualization entitlement. Check whether the binary carries it:

codesign -d --entitlements - "$(command -v heyvm)"

If it is absent, re-sign with make sign from a source checkout — see Installing From Source.

The storage device attachment is invalid (VZErrorDomain Code=2)

A killed heyvm create can leave a stale VZ storage attachment behind. Restart the long-lived host process (quit and reopen the desktop app, or restart heyvmd) and create the sandbox again.

A sandbox boots but never becomes reachable

If heyvm create --backend apple_virt reports that the guest never came up on the network, check ~/.heyo/sandboxes/<id>/owner.log for the serial console output. A guest that reaches a login prompt but never acquires a DHCP lease is usually an image problem rather than a backend problem — confirm the backend itself is healthy with heyvm test-apple-virt, which uses the default alpine-3.21 image, and try that image directly:

heyvm create --name probe --backend apple_virt --image alpine-3.21

Orphaned container guests on macOS

heyvm rm now stops and deletes the underlying Apple container resource. Older versions did not, so guests could accumulate at the container layer while heyvm list showed a clean state, each still claiming CPU and memory. To clear any left over from before, audit with Apple's CLI directly:

container list -a                    # compare against `heyvm list`
container stop <id> && container delete <id>

Some stopped guests return to running, so re-run container list -a afterwards and repeat if needed.

Linux

Firecracker cannot create TAP networking

Firecracker needs passwordless sudo for ip, iptables, and sysctl. Run sudo -v first to cache credentials, or add a sudoers rule for those binaries.

mke2fs: command not found when building an image

Image builds need e2fsprogs and a working Docker runtime. Install e2fsprogs from your distribution's package manager.

See Prerequisites for the full per-backend requirements list.