Cua

How long does a Space take to start in your own cloud?

From a client Mac, a Space on a new cloud machine ran its first command 105 s after the request on AWS, 194 s on Google Cloud and 164 s on Hetzner (p50, n = 10 each, 2026-10-24). On a machine already running it took 2.03 s on AWS and 3.78 s on Hetzner (p50, n = 12 each, 2026-10-25).

Measured 2026-10-24 to 2026-10-25Build app 0.15.0, cua 0.9.0Raw data (CSV)

Results

p50 time from the create command until the first command returns, one Space at a time. Lower is better.

AWS, new machine (2026-10-24)
105 s
Google Cloud, new machine (2026-10-24)
194 s
Hetzner, new machine (2026-10-24)
164 s
AWS, machine running (2026-10-25)
2.03 s
Hetzner, machine running (2026-10-25)
3.78 s
Every result on this page
ResultValuenMeasured
AWS, new machine105 s p50102026-10-24
Google Cloud, new machine194 s p50102026-10-24
Hetzner, new machine164 s p50102026-10-24
AWS, machine running2.03 s p50122026-10-25
Hetzner, machine running3.78 s p50122026-10-25

Method: AWS, new machine

Released cua 0.9.0 CLI, isolated signed-in CUA_HOME, cua cloud connect aws then cua cloud budget --max-per-hour 3 --monthly 20 --autoscale off. Serial; per sample: t0 before cua sb create linux --on aws --name cb-<label>-<i> --json; value = when cua sb exec <name> -- echo ok has returned 'ok' (machine boot, Docker, image pull and relay join included; no warm host, no prewarm). Then cua sb rm <name> --force (not timed). Two batches of 5 (cold-*, cold2-*), all samples kept.

Caveats

  • Includes the cloud's VM boot and the image pull on a new VM. The client is a Mac on a home network in California; API calls go to the cloud, and the first command goes through relay.cua.ai.
  • The machine type is the one cua 0.9.0 picks for the default `linux` image: t4g.medium.

Environment and build

MachineMac Studio (the client), Mac14,13
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2
Whereclient in the San Francisco Bay Area, home network; Space reaches the client via relay.cua.ai
Kindcontainer (Docker on a new cloud VM, one VM per Space)
Cloudaws
Regionus-west-2
Machine typet4g.medium
Usd per hour listed by cua0.0419
Imageghcr.io/trycua/linux:24.04 (cua's default `linux`)
Warm hostfalse
Autoscaleoff (`cua cloud budget --autoscale off`: each Space gets a new machine of its own)
Load avg before1.46
Other vmsother sessions' VMs on the client Mac (not on the path)
Buildcua CLI bundled in Cua Spaces 0.15.0 DMG (GitHub release cua-spaces-v0.15.0, published 2026-10-24T19:42Z; dmg sha256 8725a09b...aba0), Contents/MacOS/cua, `cua --version` = cua 0.9.0
App0.15.0
cua0.9.0

Reproduce

# Cua Spaces 0.15.0 from cua.ai/download (its cua CLI is cua 0.9.0)
curl -fLO https://cua.ai/benchmarks/cloud-first-space-time/files/cloud_start.py
cua auth login
cua cloud connect aws --profile <aws-profile> --region us-west-2 --ttl-hours 2
cua cloud budget --max-per-hour 3 --monthly 20 --autoscale off
for b in 1 2; do python3 cloud_start.py aws 5 cold$b-aws; done   # create, then exec, then rm
cua cloud sweep --all --delete

Method: Google Cloud, new machine

Released cua 0.9.0 CLI, isolated signed-in CUA_HOME, cua cloud connect gcp then cua cloud budget --max-per-hour 3 --monthly 20 --autoscale off. Serial; per sample: t0 before cua sb create linux --on gcp --name cb-<label>-<i> --json; value = when cua sb exec <name> -- echo ok has returned 'ok' (machine boot, Docker, image pull and relay join included; no warm host, no prewarm). Then cua sb rm <name> --force (not timed). Two batches of 5 (cold-*, cold2-*), all samples kept.

Caveats

  • Includes the cloud's VM boot and the image pull on a new VM. The client is a Mac on a home network in California; API calls go to the cloud, and the first command goes through relay.cua.ai.
  • The machine type is the one cua 0.9.0 picks for the default `linux` image: e2-medium.

Environment and build

MachineMac Studio (the client), Mac14,13
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2
Whereclient in the San Francisco Bay Area, home network; Space reaches the client via relay.cua.ai
Kindcontainer (Docker on a new cloud VM, one VM per Space)
Cloudgcp
Regionus-west1 (zone us-west1-a)
Machine typee2-medium
Usd per hour listed by cua~0.04 (cua cloud status)
Imageghcr.io/trycua/linux:24.04 (cua's default `linux`)
Warm hostfalse
Autoscaleoff (`cua cloud budget --autoscale off`: each Space gets a new machine of its own)
Load avg before1.46
Other vmsother sessions' VMs on the client Mac (not on the path)
Buildcua CLI bundled in Cua Spaces 0.15.0 DMG (GitHub release cua-spaces-v0.15.0, published 2026-10-24T19:42Z; dmg sha256 8725a09b...aba0), Contents/MacOS/cua, `cua --version` = cua 0.9.0
App0.15.0
cua0.9.0

Reproduce

# Cua Spaces 0.15.0 from cua.ai/download (its cua CLI is cua 0.9.0)
curl -fLO https://cua.ai/benchmarks/cloud-first-space-time/files/cloud_start.py
cua auth login
gcloud auth login   # cua uses `gcloud auth print-access-token`
cua cloud connect gcp --project <project> --region us-west1 --ttl-hours 2
cua cloud budget --max-per-hour 3 --monthly 20 --autoscale off
for b in 1 2; do python3 cloud_start.py gcp 5 cold$b-gcp; done   # create, then exec, then rm
cua cloud sweep --all --delete

Method: Hetzner, new machine

Released cua 0.9.0 CLI, isolated signed-in CUA_HOME, cua cloud connect hetzner then cua cloud budget --max-per-hour 3 --monthly 20 --autoscale off. Serial; per sample: t0 before cua sb create linux --on hetzner --name cb-<label>-<i> --json; value = when cua sb exec <name> -- echo ok has returned 'ok' (machine boot, Docker, image pull and relay join included; no warm host, no prewarm). Then cua sb rm <name> --force (not timed). Two batches of 5 (cold-*, cold2-*), all samples kept.

Caveats

  • Includes the cloud's VM boot and the image pull on a new VM. The client is a Mac on a home network in California; API calls go to the cloud, and the first command goes through relay.cua.ai.
  • Hetzner bills each started hour, so each sample cost an hour of cx23 plus IPv4 ($0.0114).
  • The client is in California and the server in Germany, so relay round trips cross the Atlantic; server boot and image pull dominate.

Environment and build

MachineMac Studio (the client), Mac14,13
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2
Whereclient in the San Francisco Bay Area, home network; Space reaches the client via relay.cua.ai
Kindcontainer (Docker on a new cloud VM, one VM per Space)
Cloudhetzner
Regionfsn1 (Falkenstein, DE)
Machine typecx23 (2 vCPU x86, 4 GB)
Usd per hour listed by cuacx23 $0.0104/h + primary IPv4 $0.0010/h (Hetzner API, 2026-10-24)
Imageghcr.io/trycua/linux:24.04 (cua's default `linux`)
Warm hostfalse
Autoscaleoff (`cua cloud budget --autoscale off`: each Space gets a new machine of its own)
Load avg before1.46
Other vmsother sessions' VMs on the client Mac (not on the path)
Buildcua CLI bundled in Cua Spaces 0.15.0 DMG (GitHub release cua-spaces-v0.15.0, published 2026-10-24T19:42Z; dmg sha256 8725a09b...aba0), Contents/MacOS/cua, `cua --version` = cua 0.9.0
App0.15.0
cua0.9.0

Reproduce

# Cua Spaces 0.15.0 from cua.ai/download (its cua CLI is cua 0.9.0)
curl -fLO https://cua.ai/benchmarks/cloud-first-space-time/files/cloud_start.py
cua auth login
cua cloud connect hetzner --token-stdin --region fsn1 --ttl-hours 2 < token
cua cloud budget --max-per-hour 3 --monthly 20 --autoscale off
for b in 1 2; do python3 cloud_start.py hetzner 5 cold$b-hetzner; done   # create, then exec, then rm
cua cloud sweep --all --delete

Method: AWS, machine running

Released cua 0.9.0, isolated signed-in CUA_HOME, daemon cua daemon start --foreground. cua cloud hosts add --provider aws --type c7g.2xlarge --ttl-hours 3 (joined in ~70 s; not timed). Two warm-up Spaces pulled the image first (not counted). Serial, n=12. Per sample: t0 before cua spaces create linux --on aws --instance-type c7g.2xlarge --name cb-warm-aws-<i> --json; value = when cua sb exec <ref from create> -- echo ok has returned 'ok'. Then cua spaces delete --force (not timed).

Caveats

  • The first command uses the Space reference that create returns.
  • The client is on a home network in California; create and exec go through relay.cua.ai to us-west-2.

Environment and build

MachineMac Studio (the client), Mac14,13
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2
Whereclient in the San Francisco Bay Area, home network; Space reaches the client via relay.cua.ai
Kindcontainer (gVisor on an elastic pool host)
Cloudaws
Regionus-west-2
Machine typepool host c7g.2xlarge (8 vCPU, 16 GiB), $0.3016/h per cua
Imageghcr.io/trycua/linux:24.04 (cua's default `linux`, already pulled on the host)
Warm hosttrue
Autoscaleon, cap $0.40/h, host added and pinned with `cua cloud hosts add`
Load avg before3.08
Other vmsother sessions' VMs on the client Mac (not on the path)
Buildcua CLI bundled in Cua Spaces 0.15.0 DMG (GitHub release cua-spaces-v0.15.0, published 2026-10-24T19:42Z; dmg sha256 8725a09b...aba0), Contents/MacOS/cua, `cua --version` = cua 0.9.0
App0.15.0
cua0.9.0

Reproduce

# Cua Spaces 0.15.0 from cua.ai/download (its cua CLI is cua 0.9.0)
curl -fLO https://cua.ai/benchmarks/cloud-first-space-time/files/cloud_start.py
cua auth login
cua cloud connect aws --profile <aws-profile> --region us-west-2
cua daemon start --foreground &
cua cloud budget --autoscale on --max-per-hour 0.40 --monthly 20
cua cloud hosts add --provider aws --type c7g.2xlarge --ttl-hours 3   # wait until `cua cloud hosts ls` says joined
cua spaces create linux --on aws --instance-type c7g.2xlarge --name w0 --json && cua spaces delete w0 --force   # image pull
CUA_BENCH_SPACES=1 python3 cloud_start.py aws 12 warm-aws --instance-type c7g.2xlarge
cua cloud hosts rm <host> && cua cloud sweep --all --delete

Method: Hetzner, machine running

Released cua 0.9.0, isolated signed-in CUA_HOME, daemon cua daemon start --foreground. cua cloud hosts add --provider hetzner --type cax31 --region fsn1 --ttl-hours 3 (joined in ~2 min; not timed). Two warm-up Spaces pulled the image first (not counted). Serial, n=12. Per sample: t0 before cua spaces create linux --on hetzner --instance-type cax31 --name cb-warm-hetzner-<i> --json; value = when cua sb exec <ref from create> -- echo ok has returned 'ok'. Then cua spaces delete --force (not timed).

Caveats

  • Bimodal: 2 of 12 creates took about 36 s, the rest 2 to 8 s, on an otherwise idle host. The cause was not diagnosed.
  • The client is in California and the host in Germany; create and exec go through relay.cua.ai (exec about 230 ms).

Environment and build

MachineMac Studio (the client), Mac14,13
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2
Whereclient in the San Francisco Bay Area, home network; Space reaches the client via relay.cua.ai
Kindcontainer (gVisor on an elastic pool host)
Cloudhetzner
Regionfsn1
Machine typepool host cax31 (8 vCPU arm64, 16 GB), $0.0410/h per cua (cax31 $0.0400 + IPv4 $0.0010, Hetzner API)
Imageghcr.io/trycua/linux:24.04 (cua's default `linux`, already pulled on the host)
Warm hosttrue
Autoscaleon, cap $0.40/h, host added and pinned with `cua cloud hosts add --provider hetzner --type cax31 --region fsn1`
Load avg before3.08
Other vmsother sessions' VMs on the client Mac (not on the path)
Buildcua CLI bundled in Cua Spaces 0.15.0 DMG (GitHub release cua-spaces-v0.15.0, published 2026-10-24T19:42Z; dmg sha256 8725a09b...aba0), Contents/MacOS/cua, `cua --version` = cua 0.9.0
App0.15.0
cua0.9.0

Reproduce

# Cua Spaces 0.15.0 from cua.ai/download (its cua CLI is cua 0.9.0)
curl -fLO https://cua.ai/benchmarks/cloud-first-space-time/files/cloud_start.py
cua auth login
cua cloud connect hetzner --token-stdin --region fsn1 < token
cua daemon start --foreground &
cua cloud budget --autoscale on --max-per-hour 0.40 --monthly 20
cua cloud hosts add --provider hetzner --type cax31 --region fsn1 --ttl-hours 3   # wait until `cua cloud hosts ls` says joined
cua spaces create linux --on hetzner --instance-type cax31 --name w0 --json && cua spaces delete w0 --force   # image pull
CUA_BENCH_SPACES=1 python3 cloud_start.py hetzner 12 warm-hetzner --instance-type cax31
cua cloud hosts rm <host> && cua cloud sweep --all --delete

Helper scripts: cloud_start.py.

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

Why is a new machine so much slower?

A new machine has to boot, start Docker and pull the image before the first command, and all of that is in the time. A machine already running (a pool host with the image pulled) only starts the Space.

Which machines were used?

New machines: AWS t4g.medium in us-west-2, Google Cloud e2-medium in us-west1 and Hetzner cx23 in fsn1, the types cua 0.9.0 picks for the default image. Running machines: an AWS c7g.2xlarge and a Hetzner cax31 pool host.

What about Azure and Modal?

Not measured. Azure isn't in a release yet, and Spaces on Modal weren't measured on this release.

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-24. 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.