self-host →

Every runner, every measurement.

89 runners from 9 providers against 11 measurements and their cost per build.

Arch
Size
Rows
Show
Cost per build
RunsOn price
56 machines · 9 providers
Filter
Type
Workspace on

Build time against cost per build

One dot per runner, all three builds. The line joins the runners no other runner beats on both. Small dots: RunsOn variants that are not best value. 34 of 56 runners finished all three builds; 20 do not run the Docker build on purpose; the rest are in the table.
Timing
Scale
0s3m 00s6m 00s9m 00s12m 00s15m 00s18m 00s21m 00s$0$0.1000$0.2000$0.3000$0.4000build time →↑ cost↙ faster and cheaper
  • GitHub
  • Avrea
  • AWS CodeBuild
  • Blacksmith
  • Namespace
  • RunsOn
  • StarSling
  • Ubicloud
  • Warpbuild
Best value
top providers in the column faint: bottom providers bold: best machine ↓ lower is better, ↑ higher · hover a cell, or open a runner, for ranks GitHub, the baseline
workspace · CPU Builds, wall time Builds, cost per build CPU Workspace disk Net & cache DB Queue & price
Namespace SaaS · US/Europe · jobs ran from Namespace Labs (US) SaaS · US/Europe · jobs ran from Namespace Labs (US)
Namespace 8x32 8 vCPU 32 GB VM disk EPYC · model hidden $0.1500 5m 37s 1m 10s $0.0304 30s $0.0156 3m 57s $0.1040 4,677 418k 79k 190 20s 12k plan limit2 at a time $0.0240overage rate
RunsOn self-hosted · your AWS account · jobs ran from Amazon.com (US) self-hosted · your AWS account · jobs ran from Amazon.com (US)
RunsOn r8a.2xlarge 8 vCPU 64 GB tmpfs EPYC 9R45 best value, $0.0405 5m 45s 1m 28s $0.0107 $0.0228 31s $0.0059 $0.0124 3m 46s $0.0239 $0.0484 3,818 3.7Min RAM 1.1Min RAM 251 8sworkspace in RAM 28k 18sp90 51s $0.0043on-demand $0.0110 $0.0110spot $0.0043
Blacksmith SaaS · bare metal in Phoenix, AZ · jobs ran from Secured Servers (US) SaaS · bare metal in Phoenix, AZ · jobs ran from Secured Servers (US)
Blacksmith 8 vCPU 8 vCPU 32 GB VM disk EPYC · model hidden $0.1067 5m 51s 1m 21s $0.0245 32s $0.0117 3m 58s $0.0704 3,893 200k 69k 78 16s 16k 10sp90 12s $0.0160
StarSling SaaS · Latitude.sh / AWS · jobs ran from Latitude.sh (US) and Amazon.com (US) SaaS · Latitude.sh / AWS · jobs ran from Latitude.sh (US) and Amazon.com (US)
StarSling 8 vCPU 8 vCPU 32 GB VM disk EPYC · model hidden $0.1120 6m 17s 1m 18s $0.0232 37s $0.0125 4m 22s $0.0763 4,010 11k 52k 120 57s 8.1k 13sp90 17s $0.0160
Warpbuild SaaS · WarpBuild / AWS / MacStadium · jobs ran from WarpBuild (US) and Amazon.com (US) SaaS · WarpBuild / AWS / MacStadium · jobs ran from WarpBuild (US) and Amazon.com (US)
Warpbuild 8 vCPU 8 vCPU 32 GB VM disk Ryzen 9 9950X +1 $0.1245 7m 08s 1m 34s $0.0285 42s $0.0133 4m 52s $0.0827 4,189 45k 20k 184 51sWarpBuilds 1m 20s 4.2k 12sp90 20s $0.0160
Ubicloud SaaS · Hetzner / Leaseweb (Germany) · jobs ran from Hetzner Online (DE) and Leaseweb Deutschland (DE) SaaS · Hetzner / Leaseweb (Germany) · jobs ran from Hetzner Online (DE) and Leaseweb Deutschland (DE)
Ubicloud premium 8 vCPU 8 vCPU 32 GB VM disk Ryzen 9 7950X3D $0.0841 9m 35s 1m 41s $0.0148 45s $0.0079 7m 09s $0.0615 3,517 20k 9.7k 61 1m 09s 2.6k 16sp90 19s $0.0080
GitHub GitHub-hosted · Azure · jobs ran from Microsoft (US, CA, MX, CL) GitHub-hosted · Azure · jobs ran from Microsoft (US, CA, MX, CL)
GitHub 8-core 8 vCPU 32 GB VM disk Xeon 8573C +3 $0.2904 11m 22s 1m 59s $0.0462 1m 01s $0.0293 8m 22s $0.2149 2,853 19k 8.0k 120 33s 5.5k 1m 20sp90 1m 33s $0.0220
AWS CodeBuild self-hosted · your AWS account · jobs ran from Amazon.com (US) self-hosted · your AWS account · jobs ran from Amazon.com (US)
AWS CodeBuild large 8 vCPU 16 GB EBS Xeon 8124M +2 $0.3867 17m 57s 3m 00s $0.0642 1m 17s $0.0370 13m 41s $0.2855 2,039 3.0k 1.8k 205 40s n/a 21sp90 23s $0.0200
Avrea SaaS · Dedicated hardware · jobs ran from OVH (FR) SaaS · Dedicated hardware · jobs ran from OVH (FR)
Avrea 8 vCPU 8 vCPU 32 GB VM disk EPYC 4585PX –: needs all three builds; TypeScript: failed –: needs all three builds; TypeScript: failed 1m 34s $0.0280 failed bun install fails on Avrea every time: bun's download of the drizzle-orm registry manifest arrives cut short ("PackageFailedToParse"), on three attempts from an empty cache, while curl on the same runner fetches it complete. The typecheck never starts. 4m 47s $0.0816 4,274 139k 43k 159 15s 6.6k plan limit12 at a time $0.0160
Namespace arm64 SaaS · US/Europe · jobs ran from Namespace Labs (US) SaaS · US/Europe · jobs ran from Namespace Labs (US)
Namespace Apple silicon 4 vCPU 16 GB VM disk CPU not reported $0.5782 6m 27s 1m 20s $0.1190 38s $0.0630 4m 29s $0.3962 4,718 16k 20k 183 21s 5.6k plan limit4 at a time $0.0840overage rate
RunsOn arm64 self-hosted · your AWS account · jobs ran from Amazon.com (US) self-hosted · your AWS account · jobs ran from Amazon.com (US)
RunsOn m9gd.2xlarge 8 vCPU 32 GB local NVMe Neoverse-V3 $0.0760 6m 33s 1m 30s $0.0188 $0.0188 30s $0.0094 $0.0095 4m 33s $0.0477 $0.0477 2,463 87k 15k 327 11slocal NVMe, not ranked 14k 19sp90 22s $0.0028on-demand $0.0087 $0.0087spot $0.0028
Warpbuild arm64 SaaS · WarpBuild / AWS / MacStadium · jobs ran from Amazon.com (US) and MacStadium (US, IE) SaaS · WarpBuild / AWS / MacStadium · jobs ran from Amazon.com (US) and MacStadium (US, IE)
Warpbuild xfast (Apple M4 Pro) 12 vCPU 12 vCPU 28 GB VM disk Apple M4 Pro · as stated by the provider $1.39 7m 19s 1m 08s $0.2000 31s $0.1067 5m 40s $1.09 3,204 6.0k 26k 191 23sWarpBuilds 1m 17s 5.0k 15sp90 16s $0.1600
Blacksmith arm64 SaaS · bare metal in Phoenix, AZ · jobs ran from Secured Servers (US) SaaS · bare metal in Phoenix, AZ · jobs ran from Secured Servers (US)
Blacksmith 8 vCPU 8 vCPU 32 GB VM disk Ampere-1a +1 $0.1425 12m 52s 3m 18s $0.0355 1m 21s $0.0165 8m 13s $0.0905 1,348 28k 25k 81 35s 3.2k 15sp90 27s $0.0100
GitHub arm64 GitHub-hosted · Azure · jobs ran from Microsoft (US) GitHub-hosted · Azure · jobs ran from Microsoft (US)
GitHub 4-core 4 vCPU 16 GB network disk Neoverse-N2 $0.1245 14m 15s 3m 05s $0.0257 1m 25s $0.0131 9m 45s $0.0857 1,876 12k 8.6k 169 36s 2.8k 6sp90 8s $0.0080
Ubicloud arm64 SaaS · Hetzner / Leaseweb (Germany) · jobs ran from Leaseweb Deutschland (DE) and Hetzner Online (DE) SaaS · Hetzner / Leaseweb (Germany) · jobs ran from Leaseweb Deutschland (DE) and Hetzner Online (DE)
Ubicloud standard 8 vCPU 8 vCPU 32 GB VM disk Neoverse-N1 $0.0794 14m 45s 3m 14s $0.0173 1m 17s $0.0080 10m 14s $0.0541 1,310 102k 9.6k 46 59s 1.3k 21sp90 25s $0.0050
Avrea arm64 SaaS · Dedicated hardware · jobs ran from Inios Oy (FI) SaaS · Dedicated hardware · jobs ran from Inios Oy (FI)
Avrea 8 vCPU 8 vCPU 32 GB VM disk Apple M5 Max · as stated by the provider –: needs all three builds; TypeScript: failed –: needs all three builds; TypeScript: failed 59s $0.0552 failed bun install fails on Avrea every time: bun's download of the drizzle-orm registry manifest arrives cut short ("PackageFailedToParse"), on three attempts from an empty cache, while curl on the same runner fetches it complete. The typecheck never starts. 4m 13s $0.2232 4,814 16k 18k 85 11s 5.1k plan limit12 at a time $0.0480
Notes on the tablequeue, cost, spot, shapes, cell states
  • Queue, burst: 15 identical jobs per runner, queued at the same instant; median wait, p90 below.
  • It shows how fast a provider absorbs a spike; the concurrency limits of this account's plan are part of it.
  • Cost per build: job duration × list price per minute, seconds as they ran, never rounded up to a billing increment.
  • Cost for all builds: the first column adds up the three builds' costs, for runners that finished all three. The “Cost per build” pill picks one build instead (“Cost per Rust build”).
  • It is shaded in five steps by cost rank among the runners shown with 3+ runs, green the cheapest fifth, red the most expensive.
  • Time for all builds: the Rust, TypeScript and Docker build times added up, for runners that finished all three; the table's default order, fastest first. A runner missing a build shows –, the reason in its title, and follows those, ordered by its Rust build.
  • It is ranked and shaded like a build column, on the fewest runs of its three builds.
  • Workspace disk: 4k random writes at queue depth 32 and 4k reads at queue depth 1. Random reads, sequential reads and synced writes are on the disk page.
  • “in RAM”: a tmpfs runner's workspace is RAM, not a disk, so its disk results are shown but not ranked or shaded, as on the disk page. Its builds are ranked.
  • Best value: no runner shown is both faster and cheaper on that build. The chart draws these runners as a line, on linear or log axes (Scale).
  • Timing: the chart's time axis is the build steps, the whole job, or the job plus its wait (each run's shortest queue, median across runs). A wait capped by a plan is not ranked.
  • “Show: cost” ranks, shades and sorts the build columns by cost instead of wall time.
  • “RunsOn price: On-demand” ranks, shades and sorts RunsOn's costs at EC2 on-demand; every other provider has one list price.
  • RunsOn rows use EC2 spot prices, RunsOn's default; on-demand (OD) sits on the price column's second line and in each build cell's title.
  • Shading: top 2 of 9 on x64, top 1 of 7 on arm64 per column are tinted, the same number at the bottom faint; bold is the best machine. A result needs 3 runs (distinct workflow runs) for a shade or a rank.
  • Every size races: a provider rank counts each provider once, by its best variant at any size. The Size filter ranks and shades within one size; 8 to 12 vCPU count as one size.
  • “workspace in RAM”: a tmpfs runner's cache restore is shown but not ranked, since RAM speeds up save and restore. Its builds are ranked.
  • “tuned gp3, not ranked”, “local NVMe, not ranked”: RunsOn's cache restore is ranked on its default volume (gp3, 400 MiB/s); a provisioned volume or local NVMe is shown but not ranked. Their builds are ranked.
  • Shapes are vCPU and memory as configured, underlined dotted when the job saw other CPUs or memory.
  • failed links to the failed job · pending job not finished at fetch time · – not part of that suite (in the two summary columns: a build is missing, the reason in its title) · n/a step did not report, or with a : not run on purpose (the ? says why)