arcbox

arcboxlabsApache-2.0活跃维护

用纯 Rust 打造的轻量微虚拟机沙箱,让 AI 代理在拥有独立内核、文件系统和网络的隔离机器上运行,启动不到 100ms,本地优先且兼容 OCI。

Run AI agents on real and isolated machines — own kernel, filesystem, and network — with <100ms boot. Local first, OCI compatible, pure Rust.

v0.11.3发布于 2026-11-03 18:48 UTC4,262star +6 / 7 天184fork同步于 2026-11-10 11:38 UTC

怎么上手

由 README 提炼,执行前请确认
brew install --cask arcboxlabs/tap/arcbox
abctl daemon start
abctl docker enable
硬件要求按 README 说明

仅支持 macOS;沙箱功能需要 Apple Silicon M3 或更新机型、macOS 15+ 且使用默认 VZ 后端;macOS 虚拟机受 Apple 许可限制,每台主机最多 2 个。README 未说明显存或 CPU 内存下限。

支持 Apple Silicon有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 Rust 从零实现的 macOS 容器与虚拟机运行时,可替代 Docker Desktop 和 OrbStack

用纯 Rust 打造的轻量微虚拟机沙箱,让 AI 代理在拥有独立内核、文件系统和网络的隔离机器上运行,启动不到 100ms,本地优先且兼容 OCI。

核心能力

  • 提供 Docker 兼容 socket,CLI、Compose、Buildx 无需改动即可使用
  • 用 Firecracker 嵌套微虚拟机隔离 AI agent 与不可信代码
  • 创建带独立内核和持久磁盘的完整 Linux 虚拟机
  • 在 Apple Silicon 上通过 FEX 运行 linux/amd64 镜像
  • 内置 k3s 本地集群,LoadBalancer 端口直通 Mac

容易踩的坑

沙箱依赖嵌套虚拟化,非 M3+/macOS 15+ 主机会直接报错;macOS 虚拟机需先拉取数 GB 基础镜像且数据目录必须在 APFS 上;machine import 要求本地 registry 中存在同版本镜像,且 clone/export 前必须先停机。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.11.3
  1. v0.11.3最新正式版2026-11-03 · 2026-11-03 18:48 UTC

    0.11.3 (2026-11-03)

    Bug Fixes

    • api: refuse sandbox control RPCs where sandboxes cannot run (e0e1561)
    • api: refuse sandbox data-plane RPCs where sandboxes cannot run (772579b)
  2. v0.11.22026-11-03 · 2026-11-03 16:05 UTC
    查看更新说明

    0.11.2 (2026-11-03)

    Features

    • vmm: give the QEMU System VM a vmnet bridge NIC (a5576df)

    Bug Fixes

    • api: refuse sandbox event subscriptions where sandboxes cannot run (add7577)
    • cli: show the backend the System VM actually runs on (90e563d)
    • daemon: stop the Kubernetes API proxy on shutdown (24b563d)
    • engine: report a bridge MAC only for a bridge NIC the VM has (8b91454)

    Code Refactoring

    • vmm: move the vmnet bridge NIC into the shared darwin_net (3ce1c4b)

    Tests

    • bench: check container IPs from the host in the QEMU acceptance run (b33d877)
    • bench: fail the QEMU acceptance run on a server drain timeout (1b507b7)
  3. v0.11.12026-11-03 · 2026-11-03 12:37 UTC
    查看更新说明

    0.11.1 (2026-11-03)

    Features

    • core: find QEMU and boot the System VM on it as the host fallback (fc71955)
    • core: run the installed QEMU build when no path is configured (18da5e8)
    • daemon: boot the System VM on QEMU without hardware virtualization (3406a30)
    • daemon: stop QEMU processes a crashed daemon left running (02da30a)
    • engine: boot the System VM on QEMU where the host cannot run VZ or HV (9c43fa2)
    • vmm: add a QMP session for the QEMU backend (7a795eb)
    • vmm: add the QEMU backend variant (5c5498e)
    • vmm: attach NIC1 to the QEMU machine (9b0c288)
    • vmm: boot QEMU with dic=off and refuse a QEMU without it (a752ec7)
    • vmm: boot the QEMU machine (1900d15)
    • vmm: lay out the vhost-user devices on the QEMU command line (b2dc63a)
    • vmm: render the QEMU command line (abd2b0f)
    • vmm: serve the QEMU machine's virtio-fs and vsock over vhost-user (bd882dc)
    • vmm: spawn and stop the QEMU child (b53a0f8)
    • vsock: serve virtio-vsock to QEMU over vhost-user (2e14ace)

    Bug Fixes

    • daemon: name why the System VM cannot start on this host (fdacf24)
    • engine: fail a QEMU boot as soon as the VM stops (972690a)
    • engine: stop a VM whose start could not be published (52d2f7e)
    • vhost-user: keep call descriptors across RESET_DEVICE (a190e2c)
    • virtio-fs: refuse requests longer than any FUSE request on HV (6b69fbc)
    • vmm: bound the wait for a QEMU that outlives SIGKILL (6423866)
    • vmm: fall back to QEMU only on Apple silicon (c48678f)
    • vmm: keep a QEMU stop reported while the VM starts (d550ebd)
    • vmm: match QMP replies to their command (81835b1)
    • vmm: never lose track of a QEMU child (04c4d67)
    • **vmm:
  4. v0.11.02026-11-03 · 2026-11-03 07:17 UTC
    查看更新说明

    0.11.0 (2026-11-03)

    ⚠ BREAKING CHANGES

    • runner: rename Fleet to ArcBox Runners

    Features

    • api: report hardware virtualization and effective backend (3e739b4)
    • api: report on-demand component downloads in SystemRuntimeStatus (c3a70dd)
    • asset: resume interrupted downloads (dca372a)
    • cli: import the QEMU build from a local archive (9d987e9)
    • daemon: download QEMU when the System VM falls back to emulation (58daac2)
    • daemon: skip System startup without hardware virtualization (a46ee2c)
    • hv: capture and restore vCPU, GIC and timer state (7ebe148)
    • image: clear quarantine and keep only the pinned QEMU build (ed80ad6)
    • image: download the QEMU build on demand (a236024)
    • image: install the QEMU build from its archive (3627ba3)
    • image: pin the QEMU build in assets.lock (e0e1cb9)
    • image: require ArcBox's code signature on the QEMU build (0c04d67)
    • net: DatapathControl for aborting and injecting TCP resets (e3c3092)
    • net: integrate IPv6 lifecycle with silent TCP rejection (a13f5c5)
    • splicetcp: abandon inspected relays without TCP close (774d027)
    • splicetcp: support silent TCP handshake rejection (fe36394)
    • vhost-user: answer feature negotiation and config requests (653baac)
    • vhost-user: framed messages with SCM_RIGHTS descriptors (b8d4d3a)
    • vhost-user: let devices register descriptors and wakers (c49b000)
    • vhost-user: map guest memory from SET_MEM_TABLE (6eccd87)
    • vhost-user: message header and request codes (0041a64)
    • vhost-user: payload codecs for rings, memory tables and config (475c493)
    • vhost-user: process rings on a kqueue worker thread (53591f1)
    • vhost-user: ring cursors, call notifiers and the device queue API (135c330)
    • vhost-user: serve virtio-fs sha
  5. v0.10.52026-10-22 · 2026-10-22 18:45 UTC
    查看更新说明

    0.10.5 (2026-10-22)

    Tests

    • e2e: read the live rootfs under ~/ArcBox/docker (05d50dc)

    Miscellaneous Chores

    • tools: bump the Docker toolchain and pin boot bundle 0.8.11 (ae01be6)

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    ArcBox

    A fast, open-source container and VM runtime for macOS.

    Built from scratch in Rust. Drop-in Docker, agent sandboxes, native Kubernetes, and full Linux and macOS VMs.

    License Rust Runtime Desktop Discord Telegram Docs

    Why ArcBox

    ArcBox is an open-source alternative to Docker Desktop and OrbStack on macOS. OrbStack set the bar for running Docker on a Mac quickly and with little overhead, but it is closed-source. ArcBox is open source under MIT/Apache-2.0 and written from scratch in Rust — its own VMM, VirtIO devices, filesystem sharing, and network datapath — and aims to match it.

    One daemon, one CLI, four kinds of workload on the same runtime:

    TierWhat it isWhere to start
    ContainersA drop-in Docker engine, plus native Kubernetesdocker …, abctl k8s
    SandboxesDisposable microVMs for AI agents and untrusted codeabctl claude, abctl sandbox
    Linux machinesFull VMs with their own kernel, disk, and distroabctl machine
    macOS guestsThrowaway macOS VMs, cloned from a base imageabctl macos

    These workloads run locally on your Mac. ArcBox does not require a Platform account or a cloud control plane. The Sandbox SDKs use the local daemon.

    ArcBox is in public beta. Join us on Discord, or open an issue.

    Quick start

    # Install with Homebrew
    brew install --cask arcboxlabs/tap/arcbox
    
    # or with the install script
    curl -fsSL https://get.arcbox.dev | bash
    
    # Start the daemon and enable Docker compatibility
    abctl daemon start
    abctl docker enable
    
    # Run a container
    docker run -d -p 8080:80 nginx
    curl http://localhost:8080
    

    Run abctl doctor to check the runtime, and abctl --help to see every command.

    Desktop stops the selected daemon before a helper update. For CLI-only updates, keep that daemon stopped during installation; see the helper installation requirements.

    Containers

    ArcBox is a drop-in Docker engine. It exposes a Docker-compatible socket and proxies to a guest dockerd, so the Docker CLI, your scripts, and your Compose files work without changes.

    abctl docker enable        # creates and activates the "arcbox" Docker context
    docker run -d -p 8080:80 nginx
    docker compose up
    docker build -t myapp .
    

    Containers, images, builds (BuildKit/Buildx), Compose, port forwarding, bind mounts, named volumes, and interactive exec all work today. abctl docker setup installs and manages the matching docker, buildx, and compose binaries for you.

    The engine is configured from ~/.config/arcbox/config.toml; a daemon restart applies it:

    [docker]
    expose_ports_to_lan = false     # -p 8080:80 binds 127.0.0.1 instead of every interface
    registry_mirrors = ["https://mirror.example.com"]   # tried before Docker Hub
    insecure_registries = ["registry.corp:5000"]
    
    [docker.engine]                 # any other dockerd daemon.json key
    max-concurrent-downloads = 6
    

    amd64 and arm64 images

    ArcBox runs linux/amd64 images on Apple Silicon next to native arm64. x86-64 is translated inside the guest by FEX, an open-source emulator, with nothing to configure.

    docker run --platform linux/amd64 alpine uname -m
    # x86_64
    

    Native Kubernetes

    A local k3s cluster, managed by the daemon, with host integration for kubectl.

    abctl k8s start
    abctl k8s enable      # installs kubectl, merges the kubeconfig, switches context
    kubectl get nodes
    

    abctl k8s kubeconfig prints the managed kubeconfig on its own, if you would rather wire it into your own tooling than let enable touch ~/.kube/config.

    A Service of type LoadBalancer answers on its port on the Mac, like a published container port, and abctl k8s status shows where each port is forwarded:

    kubectl expose deployment web --type=LoadBalancer --port=8080
    curl http://localhost:8080/
    

    Container files in Finder

    The guest's Docker data is mounted read-only on the host at ~/ArcBox/docker, served over NFSv4 through a vsock relay. Named volumes, container state, and image layers are browsable in Finder and readable by any host tool — no docker cp.

    open ~/ArcBox/docker
    grep -r "panic" ~/ArcBox/docker/volumes/my-app-data/_data
    

    Machine files in Finder

    A running Linux machine's root filesystem is mounted read-write at ~/ArcBox/machines/<name>, served over NFSv3 by the machine itself on its bridge NIC. Edit a machine's files with any Mac editor; the mount appears when the machine starts and goes away when it stops.

    abctl machine start ubuntu
    code ~/ArcBox/machines/ubuntu/root/project
    

    Files the Mac creates belong to root inside the machine, and root's files show as yours on the Mac; every other owner keeps its numeric id. ~/ArcBox itself is a plain folder; ARCBOX_HOST_MOUNT_DIR moves it.

    Live resource usage

    abctl top          # streaming CPU, memory, disk, and network for the System VM
    abctl disk usage   # Docker data image usage; `abctl disk compact [machine]` returns freed space now
                       # (it also returns on its own: idle System VM, hourly per machine)
    

    abctl top adds a per-container table — CPU, memory against the limit, disk and network rates, PIDs — whenever containers are running. The same samples feed the API and the desktop app.

    Migrate from Docker Desktop or OrbStack

    abctl migrate from orbstack --dry-run   # show the plan, change nothing
    abctl migrate from orbstack
    abctl migrate from docker-desktop
    

    Images (with every tag), named volumes, user-defined bridge networks and containers come across, and containers that were running on the source are started again at the end — pass --no-start to leave them stopped. Add --json to --dry-run for the machine-readable plan.

    Containers using --network container:<id> are reported as blocking and must be removed from the source, or migrated by hand, before the run proceeds.

    Sandboxes and coding agents

    ArcBox runs disposable microVMs — each with its own kernel, booted by Firecracker nested inside the guest — for AI agents, untrusted code, and CI jobs. abctl claude is that primitive with the ergonomics finished: it builds a sandbox from a built-in template and attaches your terminal to Claude Code inside it, with the agent's permission prompts switched off, because the microVM is the isolation boundary instead.

    export ANTHROPIC_API_KEY=sk-...
    abctl claude                    # first run builds the image; later runs start in ~1s
    abctl claude --id review        # a second, independent session
    abctl claude -- --model opus    # everything after -- goes to the agent
    

    Nothing on the host is mounted into the sandbox: /workspace starts empty, the agent clones what it needs, and you copy results back out. See docs/agent-sandbox.md.

    Build sandboxes from a template, an existing Docker image, or a Dockerfile, and snapshot a booted, idle sandbox to skip a cold boot on the next one:

    abctl sandbox templates                            # built-in images
    abctl sandbox create --from-image myapp:latest --memory 512 --ttl 3600
    abctl sandbox run <id> -- ./untrusted-binary       # or `exec` for interactive
    abctl sandbox cp <id>:/tmp/out.tgz .               # files in and out
    abctl sandbox expose <id> 8080                     # reach a sandbox port on the host
    abctl sandbox checkpoint <id> --name clean         # capture a ready snapshot
    abctl sandbox restore <snapshot-id>                # new sandbox, near-zero boot
    

    Sandboxes need nested virtualization: Apple Silicon M3 or newer with macOS 15+, on the default VZ backend. On other hosts sandbox commands fail fast with a clear error.

    Everything the CLI does is a gRPC call on the daemon socket, with server reflection enabled, so SDKs and your own tooling can drive sandboxes directly — create, exec, file transfer, port exposure, lifecycle events, snapshots. The integration reference is docs/sandbox-api.md.

    Linux machines

    When you want a complete environment instead of a container, ArcBox creates full Linux VMs, each with its own kernel, persistent disk, and a distro you choose.

    abctl machine create dev --distro ubuntu --disk 50 --mount ~/code:/code
    abctl machine start dev
    abctl machine ssh dev                   # login shell (root; -u <user> for another account)
    abctl machine exec dev -- cargo build   # one-shot command
    abctl machine default dev               # then `abctl machine exec cargo build` needs no name
    abctl machine resize dev --cpus 4 --memory 8192   # applies at the next start
    abctl machine ls
    

    Create, start, stop, inspect, directory mounts, interactive shells, and command execution work today for Alpine, Arch Linux, Debian, Fedora, and Ubuntu.

    A stopped machine clones in an instant and travels as one file:

    abctl machine clone dev dev-2            # copy-on-write: no extra space until they diverge
    abctl machine export dev dev.tar.zst     # manifest + sparse data disk; the rootfs stays an image
    abctl machine import dev.tar.zst --name dev-restored
    

    The archive names the published image the machine boots; import requires that image in the local registry at the same version, and says which one it needs when it is missing. Clone and export refuse a running machine: its data disk is a btrfs volume mounted read-write in the guest, so stop it first.

    A machine is its name: the guest's hostname is the machine name, and while it runs the Mac reaches it as <name>.machine.arcbox.local (ssh [email protected], curl http://dev.machine.arcbox.local:3000). _ and . in a name become - in the hostname (my_box.v2 answers as my-box-v2); what is left must be a DNS label of up to 63 letters, digits and hyphens. The System VM behind docker is default.machine.arcbox.local. Sandboxes use <id>.sandbox.arcbox.local. The machine and sandbox trees stay reserved when a resource stops; container aliases cannot claim these names.

    macOS guests

    On Apple Silicon, ArcBox also runs disposable macOS VMs: pull a published base image once, then copy-on-write clone it to boot clean, throwaway guests in seconds — the same "clone, use, discard" model, extended to macOS. A CoW clone of a 64 GiB disk takes microseconds on APFS.

    abctl macos image pull tahoe-base        # once (multi-GB, progress streams)
    abctl macos create ci --image tahoe-base --cpus 4 --memory 8192
    abctl macos start ci
    abctl macos ip ci --wait 30              # reach it over the network
    

    macOS guests run through Virtualization.framework only — Apple permits booting macOS no other way — need an APFS data directory, and are capped at 2 guests per host by Apple's license. Details in docs/macos-guest.md.

    Self-hosted GitHub Actions runners

    ArcBox Runners turns Macs and Linux boxes you already own into GitHub Actions runners for every organization your workspace connects. Enroll a host and it takes jobs labeled runs-on: arcbox-<os>-<arch> (for example arcbox-macos-arm64): Linux jobs run in a fresh container, macOS jobs get a fresh disposable macOS guest, and Windows jobs run through WSL interop. Each host decides per job whether it has room, and the service offers the job to the next host when it does not. Enrollment is opt-in; nothing above needs an account.

    Built from scratch

    Most of ArcBox's performance-critical code is custom rather than vendored:

    • Two hypervisor backends. ArcBox's own VMM on Hypervisor.framework, with manual vCPU execution and a device model we maintain, plus a Virtualization.framework backend through a Swift shim. Switch with abctl system backend hv|vz; size the VM with abctl system resources --cpus 4 --memory 4096.
    • VirtIO devices: virtio-net, virtio-blk, virtio-fs, virtio-console, virtio-vsock, virtio-rng, and a balloon device.
    • A userspace network datapath on macOS: DHCP, DNS forwarding, NAT and connection tracking, batched socket I/O, and userspace TCP termination that splices guest flows onto real host sockets — no pf NAT and no utun device. Containers are reachable by IP, and the daemon leases *.arcbox.local name resolution through the helper: http://<container>.arcbox.local reaches whatever port the container serves (or its dev.arcbox.http-port label), and https:// works on port 443 after macOS authorizes the local CA. Native HTTPS on 443 or 8443 keeps the application's certificate; discovery supports HTTP/1.1 and HTTP/2. Managed HTTPS forwards HTTP/1.1 with X-Forwarded-Proto: https, including streaming responses and WebSocket upgrades. Containers start without HTTPS trust. Enable local HTTPS in Desktop settings or run abctl tls trust from your login session. ArcBox reuses the trusted CA on later launches. The helper stores the name-constrained public CA in the System Keychain. The private key stays in the user's Keychain; the host signs guest-generated certificate requests. Helper installation and certificate trust require separate administrator authorization. The host verifies container DNS ownership before and after each signature. Run abctl tls status --json to inspect trust, certificate lifetime, and the public CA fingerprint without changing trust. The certificate state distinguishes expiry, renewal within 30 days, and a Mac clock before the certificate's validity period. abctl doctor includes the daemon's CA status and repair guidance. Optional HTTPS warnings do not fail the runtime health report or request authorization. Pass that fingerprint to abctl tls trust --expected-fingerprint <SHA-256> to reject a CA change between inspection and authorization. Run abctl tls repair to restore a missing or damaged public CA file from the current Keychain identity without changing trust. Repair preserves different certificates and rejects ambiguous identities. Run abctl tls rotate to replace the root through native authorization. New roots cover .local DNS names; existing roots retain their narrower scope until rotation. See local HTTPS for domain support and security boundaries. Run abctl tls untrust to revoke every root retained for this profile, including an interrupted rotation. The System VM receives the current public root automatically after startup and root replacement. CA preparation failures preserve its installed root. Open http://arcbox.local for the browser index of current service URLs. The index also supports managed HTTPS after CA authorization. See the acceptance matrix for validation status. Guest DNS follows the Mac's resolvers as they change (Wi-Fi switch, VPN up or down), and guest egress follows the Mac's proxy settings by default; proxy = "none" or a proxy URL under [network] in ~/.config/arcbox/config.toml overrides that, with proxy_exclude for hosts that stay direct. Host DNS forwarding workers do not retain the listening port after the DNS service ends.
    • VirtioFS/FUSE filesystem sharing, an NFSv4 export for ~/ArcBox/docker, and a vsock guest agent that speaks protobuf.
    • x86 translation through FEX, so linux/amd64 images run on Apple Silicon.
    • A privileged helper with code-signature-based peer authentication for the few operations that need root, so the daemon itself does not run as root.

    Measured, and documented in docs/benchmarks/network.md: single-stream host→VM throughput of 22.7 Gbps on the custom backend, about twice Apple's VirtIO-net in the same test (multi-flow saturation currently tops out at 10–12 Gbps combined).

    These are the numbers we are working toward, with OrbStack for comparison:

    MetricArcBox targetOrbStack
    Cold boot<1.5 s~2 s
    Warm boot<500 ms<1 s
    Idle memory<150 MB~200 MB
    File I/O (vs native)>90%75–95%
    Network throughput>50 Gbps~45 Gbps

    Desktop app

    ArcBox Desktop is a native SwiftUI app. It talks to the daemon over gRPC and uses the Docker-compatible API for Docker resources. It covers Docker (containers, images, volumes, networks) and Kubernetes (pods, services), and includes log streaming, a terminal, live resource monitoring, and a file browser for container, image, and volume filesystems. Source: arcboxlabs/arcbox-desktop.

    What's next

    • Sandbox SDK general availability
    • Faster x86 translation
    • Wider Docker Engine API coverage
    • Lower idle footprint

    Requirements

    • macOS on Apple Silicon. Intel support is in progress.
    • Sandboxes (and therefore abctl claude) additionally need M3 or newer on macOS 15+; macOS guests need an APFS data directory.
    • The Docker CLI. ArcBox replaces the engine, not the CLI; abctl docker setup can install it for you.

    Uninstall

    abctl uninstall                 # daemon, helper, links, integrations, data
    brew uninstall --cask arcbox    # then, if the app came from Homebrew
    

    Add --keep-data to keep containers, images and volumes for a reinstall. The command lists what it found, asks once, reports every step, and leaves anything that belongs to another tool (OrbStack's or Docker Desktop's links) alone. The full inventory of what ArcBox writes is in docs/data-directories.md.

    Contributing

    See CONTRIBUTING.md for build instructions, code standards, and development setup. The runtime is open source under MIT/Apache-2.0. Personal use is free, and commercial use is free during the public beta.

    License

    MIT OR Apache-2.0


    Website · Docs · Discord