Brood Box supports macOS on Apple Silicon (M1+) via Hypervisor.framework, using the same go-microvm framework that powers the Linux backend.
- Apple Silicon Mac (M1, M2, M3, M4)
- macOS 11 (Big Sur) or later
- Homebrew libkrun and libkrunfw (for building go-microvm-runner)
- Go 1.26+ (matching
go.mod) - Task runner
brew tap slp/krun
brew install libkrun libkrunfwThis installs the shared libraries that go-microvm-runner links against via CGO.
The default build embeds the go-microvm runtime into bbox:
task buildThis downloads the pinned runtime artifacts via gh and produces a self-contained
bin/bbox (pure Go, no CGO) that does not depend on Homebrew libkrun.
Firmware (libkrunfw) is not embedded. It is downloaded at runtime and cached
under ~/.cache/broodbox/firmware/, with a system fallback if the download is
unavailable.
task build-dev-system-darwinThis:
- Builds the
bboxbinary (pure Go) - Builds
go-microvm-runnerfrom the pinned go-microvm module version (CGO, links libkrun) - Code-signs
go-microvm-runnerwith Hypervisor.framework entitlements
The resulting binaries are in bin/.
bin/bbox claude-code --workspace /path/to/projectgo-microvm auto-discovers go-microvm-runner next to the bbox binary (both in bin/)
when using the system build.
| Feature | Linux | macOS |
|---|---|---|
| Hypervisor | KVM (libkrun) | Hypervisor.framework (libkrun) |
| Build task | task build |
task build |
| libkrun install | libkrun-devel (system package) |
brew install libkrun |
| Code signing | Not required | Required (entitlements.plist) |
| Library path | LD_LIBRARY_PATH |
DYLD_LIBRARY_PATH |
| Workspace COW | FICLONE ioctl |
clonefile(2) |
| Guest arch | Matches host | Always aarch64 |
If you see EXC_BAD_ACCESS or killed when running go-microvm-runner, the binary
likely lacks Hypervisor.framework entitlements:
codesign --entitlements assets/entitlements.plist --force -s - bin/go-microvm-runnerThe task build-dev-system-darwin command does this automatically.
Verify your Mac supports hardware virtualization:
sysctl kern.hv_support
# kern.hv_support: 1If this returns 0, your hardware does not support Hypervisor.framework.
If go-microvm-runner fails to find libkrunfw at runtime, ensure Homebrew libraries are on the dynamic linker path:
export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATHAlternatively, pass a LibDir when constructing the runner via the SDK:
deps := runtime.NewDefaultSandboxDeps(runtime.DefaultSandboxDepsOpts{
LibDir: "/opt/homebrew/lib",
})macOS may block Hypervisor access for unsigned or ad-hoc signed binaries in certain security contexts. Ensure:
- The binary is signed with the entitlements plist (
task build-dev-darwinhandles this) - Your terminal app has Full Disk Access if running from a sandboxed environment
- SIP (System Integrity Protection) is enabled (required for Hypervisor.framework)