Cua

How fast does a Cua Space start on a Mac?

On a Mac Studio (Apple M2 Max, 96 GB), a new headless Cua Space ran its first command 234.6 ms after create as a gVisor container, 341.1 ms as a microVM and 637.3 ms as a QEMU VM (p50, n = 30 each), measured 2026-10-25 on Cua Spaces 0.15.0.

Measured Build app 0.15.0, cua 0.9.0, cua-spacesd 0.8.0Raw data (CSV)

Results

Time from the create call until the Space answers its first command, one Space at a time. Lower is better.

  • gVisor container
  • microVM
  • QEMU VM
Fastest
204.8 ms
323.2 ms
576.9 ms
p50
234.6 ms
341.1 ms
637.3 ms
p90
257.7 ms
349 ms
657 ms
p99
270.1 ms
359.9 ms
674.7 ms
Slowest
270.1 ms
359.9 ms
674.7 ms
Every result on this page
ResultValueFastestp50p90p99SlowestnMeasured
gVisor container234.6 ms p50204.8 ms234.6 ms257.7 ms270.1 ms270.1 ms302026-10-25
microVM341.1 ms p50323.2 ms341.1 ms349 ms359.9 ms359.9 ms302026-10-25
QEMU VM637.3 ms p50576.9 ms637.3 ms657 ms674.7 ms674.7 ms302026-10-25

Method: gVisor container

Driver on the host: rollout_bench create (Rust SDK example built from the release tag) talks to this release's own cua daemon (isolated CUA_HOME). Workload: a gVisor container in the built-in Linux runtime VM (Lima on Virtualization.framework, default 4 vCPU / 32 GiB) Space created from ghcr.io/trycua/linux:24.04-slim with --kind container --runtime gvisor --cpus 1 --memory-mb 1024 --headless (only cua-spacesd in the guest, no desktop).

Each sample = SandboxCreateOptions create call start → the Space's cua-spacesd answers a first sh -c true with exit 0 (create + attach + first exec). n=30, serial (one at a time), each Space deleted after its sample. The warm pool is off (CUA_POOL_AUTO=off), so every sample is a real create. One warm-up create before the samples is excluded (image pull/unpack and the golden snapshot it records: 13014 ms).

Caveats

  • Headless shape (only cua-spacesd); the full desktop image starts slower.
  • Golden snapshots on (the default): the excluded first create records the snapshot that later creates restore.
  • With CUA_GVISOR_WARM=0 (no golden snapshot), n = 10: p50 257.9 ms, p95 272.9 ms.

Environment and build

MachineMac Studio, Mac14,13 (Mac Studio)
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2 (25G83)
Wherelocal
Kindgvisor
Imageghcr.io/trycua/linux:24.04-slim
Shape1 vCPU, 1 GiB, --headless
Other vms2
Networkn/a (local)
SettingsCUA_POOL_AUTO=off (no warm pool); golden snapshots at their default (on)
BuildCua Spaces 0.15.0 DMG (https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg, sha256 8725a09ba4132aa8a1667fa48c86416c91d5dec0d3c7dc93f88f5f3e29e0aba0): bundled cua 0.9.0, Helpers/cua-spacesd 0.8.0, cua-vz
App0.15.0
cua0.9.0
cua_spacesd0.8.0

Reproduce

# On an Apple silicon Mac (macOS 26), with Rust (rustup) and git:
curl -fLO https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg
hdiutil attach -nobrowse -mountpoint /tmp/cua-dmg cua-spaces-0.15.0-darwin-universal.dmg
mkdir -p ~/bench && ditto "/tmp/cua-dmg/Cua Spaces.app" ~/bench/"Cua Spaces.app" && hdiutil detach /tmp/cua-dmg
git clone --depth 1 --branch cua-spaces-v0.15.0 https://github.com/trycua/cua ~/bench/cua
(cd ~/bench/cua/libs/cua && cargo build --locked --release -p cua-sdk --example rollout_bench --example channel_bench)
export PATH="$HOME/bench/Cua Spaces.app/Contents/MacOS:$PATH" CUA_HOME=~/bench/home DO_NOT_TRACK=1 CUA_TELEMETRY=0
RB=~/bench/cua/libs/cua/target/release/examples/rollout_bench
cua daemon start --foreground &   # with CUA_POOL_AUTO=off in its environment
IMG=ghcr.io/trycua/linux:24.04-slim
$RB create --prefix warm- --n 1 --image $IMG --kind container --runtime gvisor --cpus 1 --memory-mb 1024 --headless   # excluded warm-up
$RB create --prefix cold- --n 30 --conc 1 --image $IMG --kind container --runtime gvisor --cpus 1 --memory-mb 1024 --headless   # one JSON line per sample (ready_ms)

Method: microVM

Driver on the host: rollout_bench create (Rust SDK example built from the release tag) talks to this release's own cua daemon (isolated CUA_HOME). Workload: a microVM, runtime vz (cua-vz, Virtualization.framework, one VM per Space, guest kernel 6.1.155) Space created from ghcr.io/trycua/linux:24.04-slim with --kind microvm --cpus 1 --memory-mb 1024 --headless (only cua-spacesd in the guest, no desktop).

Each sample = SandboxCreateOptions create call start → the Space's cua-spacesd answers a first sh -c true with exit 0 (create + attach + first exec). n=30, serial (one at a time), each Space deleted after its sample. The warm pool is off (CUA_POOL_AUTO=off), so every sample is a real create. One warm-up create before the samples is excluded (image pull/unpack and the golden snapshot it records: 435 ms).

Caveats

  • Headless shape (only cua-spacesd); the full desktop image starts slower.
  • Golden snapshots on (the default): the excluded first create records the snapshot that later creates restore.
  • A start without the golden snapshot was not measured.

Environment and build

MachineMac Studio, Mac14,13 (Mac Studio)
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2 (25G83)
Wherelocal
Kindmicrovm
Imageghcr.io/trycua/linux:24.04-slim
Shape1 vCPU, 1 GiB, --headless
Other vms2
Networkn/a (local)
SettingsCUA_POOL_AUTO=off (no warm pool); golden snapshots at their default (on)
BuildCua Spaces 0.15.0 DMG (https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg, sha256 8725a09ba4132aa8a1667fa48c86416c91d5dec0d3c7dc93f88f5f3e29e0aba0): bundled cua 0.9.0, Helpers/cua-spacesd 0.8.0, cua-vz
App0.15.0
cua0.9.0
cua_spacesd0.8.0

Reproduce

# On an Apple silicon Mac (macOS 26), with Rust (rustup) and git:
curl -fLO https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg
hdiutil attach -nobrowse -mountpoint /tmp/cua-dmg cua-spaces-0.15.0-darwin-universal.dmg
mkdir -p ~/bench && ditto "/tmp/cua-dmg/Cua Spaces.app" ~/bench/"Cua Spaces.app" && hdiutil detach /tmp/cua-dmg
git clone --depth 1 --branch cua-spaces-v0.15.0 https://github.com/trycua/cua ~/bench/cua
(cd ~/bench/cua/libs/cua && cargo build --locked --release -p cua-sdk --example rollout_bench --example channel_bench)
export PATH="$HOME/bench/Cua Spaces.app/Contents/MacOS:$PATH" CUA_HOME=~/bench/home DO_NOT_TRACK=1 CUA_TELEMETRY=0
RB=~/bench/cua/libs/cua/target/release/examples/rollout_bench
cua daemon start --foreground &   # with CUA_POOL_AUTO=off in its environment
IMG=ghcr.io/trycua/linux:24.04-slim
$RB create --prefix warm- --n 1 --image $IMG --kind microvm --cpus 1 --memory-mb 1024 --headless   # excluded warm-up
$RB create --prefix cold- --n 30 --conc 1 --image $IMG --kind microvm --cpus 1 --memory-mb 1024 --headless   # one JSON line per sample (ready_ms)

Method: QEMU VM

Driver on the host: rollout_bench create (Rust SDK example built from the release tag) talks to this release's own cua daemon (isolated CUA_HOME). Workload: a full Linux VM, runtime qemu (QEMU 10.2.2 on HVF, Homebrew build found by the runtime check), image resolves to linux:24.04-slim-disk Space created from ghcr.io/trycua/linux:24.04-slim with --kind vm --cpus 1 --memory-mb 1024 --headless (only cua-spacesd in the guest, no desktop).

Each sample = SandboxCreateOptions create call start → the Space's cua-spacesd answers a first sh -c true with exit 0 (create + attach + first exec). n=30, serial (one at a time), each Space deleted after its sample. The warm pool is off (CUA_POOL_AUTO=off), so every sample is a real create. One warm-up create before the samples is excluded (image pull/unpack and the golden snapshot it records: 1699 ms).

Caveats

  • Headless shape (only cua-spacesd); the full desktop image starts slower.
  • Golden snapshots on (the default): the excluded first create records the snapshot that later creates restore.
  • A start without the golden snapshot is not published.

Environment and build

MachineMac Studio, Mac14,13 (Mac Studio)
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2 (25G83)
Wherelocal
Kindvm
Imageghcr.io/trycua/linux:24.04-slim
Shape1 vCPU, 1 GiB, --headless
Other vms2
Networkn/a (local)
SettingsCUA_POOL_AUTO=off (no warm pool); golden snapshots at their default (on)
BuildCua Spaces 0.15.0 DMG (https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg, sha256 8725a09ba4132aa8a1667fa48c86416c91d5dec0d3c7dc93f88f5f3e29e0aba0): bundled cua 0.9.0, Helpers/cua-spacesd 0.8.0, cua-vz
App0.15.0
cua0.9.0
cua_spacesd0.8.0

Reproduce

# On an Apple silicon Mac (macOS 26), with Rust (rustup) and git:
curl -fLO https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg
hdiutil attach -nobrowse -mountpoint /tmp/cua-dmg cua-spaces-0.15.0-darwin-universal.dmg
mkdir -p ~/bench && ditto "/tmp/cua-dmg/Cua Spaces.app" ~/bench/"Cua Spaces.app" && hdiutil detach /tmp/cua-dmg
git clone --depth 1 --branch cua-spaces-v0.15.0 https://github.com/trycua/cua ~/bench/cua
(cd ~/bench/cua/libs/cua && cargo build --locked --release -p cua-sdk --example rollout_bench --example channel_bench)
export PATH="$HOME/bench/Cua Spaces.app/Contents/MacOS:$PATH" CUA_HOME=~/bench/home DO_NOT_TRACK=1 CUA_TELEMETRY=0
RB=~/bench/cua/libs/cua/target/release/examples/rollout_bench
cua daemon start --foreground &   # with CUA_POOL_AUTO=off in its environment
IMG=ghcr.io/trycua/linux:24.04-slim
$RB create --prefix warm- --n 1 --image $IMG --kind vm --cpus 1 --memory-mb 1024 --headless   # excluded warm-up
$RB create --prefix cold- --n 30 --conc 1 --image $IMG --kind vm --cpus 1 --memory-mb 1024 --headless   # one JSON line per sample (ready_ms)

Cua commands use the published Cua Spaces 0.15.0 release and the public trycua/cua repository at the tag cua-spaces-v0.15.0. Downloads: samples (CSV), result (JSON), this page as Markdown.

Questions

What does the time include?

From the create call until the Space's cua-spacesd answers a first `sh -c true`: create, attach and the first command. The warm pool was off, so every sample is a real create. One warm-up create, which pulls the image and records the golden snapshot, is excluded.

Is this the full desktop?

No. These Spaces are headless: only cua-spacesd runs in them. The full desktop image starts slower and is not measured here.

Can I run this myself?

Yes. The commands under Reproduce use the published Cua Spaces 0.15.0 release and the public trycua/cua repository at the tag cua-spaces-v0.15.0. A `cua bench run` command that wraps them is coming; it isn't in a release yet.

Checked 2026-10-25. Sources: the samples and result files above, measured by Cua. All benchmarks.

Open in your browser to continue

Sign-in often fails inside this app's built-in browser. Open this page in Safari or Chrome to continue.