Changing the runs-on: line in a workflow is a one-character-deep edit, which is why a whole product category now exists to sell you a different value for it. The pitch never varies: same YAML, faster hardware, smaller invoice.
Developers used 11.5 billion GitHub Actions minutes running tests in 2025, a 35 percent increase year over year, according to GitHub's Octoverse report published November 7, 2025. At GitHub's published Linux 2-core rate of $0.006 per minute, that volume is worth roughly $69 million a year in runner minutes across the platform.
What GitHub Actually Charges
GitHub's flat per-minute rates are the baseline every vendor below quotes against. As of September 11, 2026, GitHub's billing documentation lists Linux 1-core at $0.002 per minute, Linux 2-core at $0.006, arm64 2-core at $0.005, Windows 2-core at $0.010 and macOS at $0.062.
Included minutes track the plan: 2,000 a month on Free, 3,000 on Team, 50,000 on Enterprise Cloud. Self-hosted runners carry no per-minute charge, which is why the self-hosted options below undercut everyone.
Two things make that painful in practice. The rate is identical whether a job takes four minutes or forty, so slow hardware bills you twice, once in minutes and once in waiting. And matrix builds multiply minutes silently as a suite grows.
Pricing One Month Across Five Runners
This prices 100,000 Linux minutes a month on 2 vCPU using each vendor's published rate. The second column applies their own speed claim, since a runner twice as fast bills half the minutes.
js// ci-price.mjs - node ci-price.mjs const MINUTES = 100_000 const runners = [ { name: 'GitHub 2-core', rate: 0.006, speedup: 1, base: 0, free: 3_000 }, { name: 'Depot 2 vCPU', rate: 0.006, speedup: 1, base: 20, free: 0 }, { name: 'Blacksmith x64', rate: 0.004, speedup: 2, base: 0, free: 3_000 }, { name: 'Blacksmith ARM', rate: 0.0025, speedup: 2, base: 0, free: 3_000 }, { name: 'Ubicloud Premium', rate: 0.002, speedup: 2, base: 0, free: 1_250 }, { name: 'Ubicloud Standard', rate: 0.0012, speedup: 1, base: 0, free: 1_250 }, ] const usd = (n) => '$' + n.toLocaleString('en-US', { maximumFractionDigits: 0 }) const cost = (r, fast) => Math.max(0, MINUTES / (fast ? r.speedup : 1) - r.free) * r.rate + r.base const base = cost(runners[0], false) const pct = (v) => (v === base ? 'baseline' : `${(((v / base) - 1) * 100).toFixed(0)}%`) for (const r of runners) { const flat = cost(r, false) const fast = cost(r, true) console.log( r.name.padEnd(20) + (usd(flat) + '/mo').padStart(9) + ' ' + pct(flat).padStart(8) + ' ' + (r.speedup > 1 ? (usd(fast) + '/mo').padStart(9) + ' ' + pct(fast).padStart(8) : ' -'), ) }
Real output:
textrunner same minutes at vendor speed claim ---------------------------------------------------------------- GitHub 2-core $582/mo baseline - Depot 2 vCPU $620/mo 7% - Blacksmith x64 $388/mo -33% $188/mo -68% Blacksmith ARM $243/mo -58% $118/mo -80% Ubicloud Premium $198/mo -66% $98/mo -83% Ubicloud Standard $118/mo -80% -
The most useful number there is the one that goes the wrong way. Depot's 2 vCPU runner costs exactly what GitHub's does, $0.006 a minute, so a straight swap costs 7 percent more once the $20 plan fee lands. Depot sells cache, not cheap minutes, and judged on per-minute price alone it looks like it does nothing.
Blacksmith
Blacksmith is the most direct expression of the category: keep the workflow, change one line, get faster hardware for less money.

Its pricing page lists Ubuntu x64 at $0.004 per minute and Ubuntu ARM at $0.0025, both with 3,000 free minutes a month, across 2 to 32 vCPU on Ubuntu and Windows, 6 to 12 vCPU on macOS. Blacksmith claims 2x faster hardware and 33 percent lower per-minute cost, which is what the arithmetic above reproduces. Add-ons cost extra: Docker layer caching and sticky disks at $0.50 per GB per month, static IPs at $100 each. Open source projects with an actively maintained public repo, a permissive license and real community usage get it free through a separate OSS program; the under-$50-million-raised bar is for the unrelated Startup Program discount.
One inconsistency is worth noticing. The homepage claims 60 percent lower cost, the pricing page 33 percent per minute plus 2x speed, which compounds to 67 percent. Both cannot be the same measurement, so price it on the per-minute rate you will be billed. Pricing: 3,000 free minutes/month · $0.004/min x64 · $0.0025/min ARM.
Ubicloud
Ubicloud is the cheapest managed runner in this comparison and the only one whose control plane is itself open source, licensed AGPL v3 with about 12,300 GitHub stars.

Its published 2 vCPU rates are $0.0012 per minute on Standard and $0.0020 on Premium, against the $0.0060 GitHub charges for the same shape. That is 5x on Standard before any speed claim, and Ubicloud quotes GitHub's rate correctly, which is more than some competitors manage. Accounts get 1,250 free minutes a month, and the ladder runs to 16 vCPU at $0.0100.
What you give up is polish, and the fine print: Standard is cheap because it is not the fast tier, so the "twice as fast" claim belongs to Premium at $0.0020, not the headline $0.0012. Pricing: 1,250 free minutes/month · $0.0012/min Standard · $0.0020/min Premium. AGPL v3.
Namespace
Namespace sells a development platform rather than a runner alone: managed GitHub runners, Docker builds, devboxes and Bazel remote caching.

Pricing is subscription-shaped rather than metered. Developer is free and pay-per-use, Team is $100 a month including 100,000 unit minutes and 1,000 Docker builds, Business is $250 including 250,000 unit minutes and 2,500 builds. Linux concurrency runs 32 to 64 to 160 vCPU across those tiers, macOS 12 to 48, and Bazel cache storage is $0.20 per GB-month.
Namespace meters unit minutes rather than wall-clock runner minutes, so it cannot join the table above without their calculator. That is a real evaluation cost: you cannot eyeball whether you are winning. Pricing: Free Developer tier · Team $100/month · Business $250/month.
Depot
Depot is the odd one out, and understanding why is the single most useful thing in this guide.

Depot bills per second: $0.0001 for 2 vCPU and 8 GB, the same $0.006 a minute GitHub charges, doubling to $0.0002 at 4 vCPU and reaching $0.0032 at 64 vCPU. Plans start at $20 a month with 25 GB of cache and registry storage, rising to $200 with 250 GB, and extra cache is $0.20 per GB per month. Windows and macOS M2 runners are available.
The product is the cache: remote Docker layer caching, a shared build cache and sccache support, which attack the minutes rather than the price per minute. If container builds rebuilding identical layers dominate your pipeline, that is the right lever. If a slow test suite does, you are paying GitHub prices plus $20. Pricing: $20/month Developer plan · $0.006/min for 2 vCPU · $0.20/GB/month cache.
RunsOn and actions-runner-controller
RunsOn inverts the model: instead of renting runners, it launches ephemeral EC2 instances in your own AWS account, one per job, gone when the job ends.

Because AWS bills you directly at spot prices with no markup, its published comparison shows 2 vCPU compute at $0.0010 a minute against GitHub's $0.0060, and 16 vCPU at $0.0043 against $0.0420. Those GitHub figures match GitHub's documentation exactly. You pay RunsOn a flat annual license per legal entity covering every org and AWS account you control, with no seat or minute metering, after a 15-day trial. Nonprofit, educational, open source and personal use is free in exchange for an acknowledgement link. The repository carries an MIT license file and v3.3.1 shipped September 10, 2026.
The fully do-it-yourself option is actions-runner-controller, GitHub's own Apache 2.0 Kubernetes operator with about 6,500 stars, whose current runner scale set release is 0.14.2 from May 22, 2026. It costs nothing and gives you everything, including the pager: autoscaling, image caching and cleanup become your job rather than a config change. Pricing: RunsOn flat annual license, free non-commercial · actions-runner-controller free, Apache 2.0.
The One That Shut Down
BuildJet was one of the best known names in this category, Y Combinator backed, with Google, Amazon, Plex, Prisma and Grafbase displayed on its own homepage.

As of September 11, 2026 its homepage carries a red notice reading "BuildJet for GitHub Actions has been shut down", while its pricing page still lists live per-minute rates from $0.004 for 2 vCPU. Both are up at once, which is exactly how a dead product looks to anyone comparing quickly.
That is the risk the rest of this guide does not price. These are venture-funded startups sitting in your deployment path, and one of the most visible has already exited. Weigh how fast you could reverse the change, because that determines what the risk costs you.
Side by Side
| Runner | Model | Free tier | 2 vCPU rate | Self-host | License |
|---|---|---|---|---|---|
| GitHub hosted | Per minute | 2,000-50,000 min/mo | $0.006/min | No | Proprietary |
| Blacksmith | Per minute | 3,000 min/mo | $0.004/min | No | Proprietary |
| Ubicloud | Per minute | 1,250 min/mo | $0.0012/min | Yes | AGPL v3 |
| Namespace | Subscription | Developer tier | Unit minutes | No | Proprietary |
| Depot | Per second + plan | None | $0.006/min | No | Proprietary |
| RunsOn | Flat license | Non-commercial | AWS spot cost | Yes | MIT repo |
| actions-runner-controller | Self-hosted only | Unlimited | Your cloud bill | Yes | Apache 2.0 |
How to Choose Without Rewriting Your Pipeline
- Read the bill by job, not in total. GitHub breaks usage down per workflow. If three matrix jobs own most of the minutes, the fix is the matrix, not the runner.
- Decide whether you are slow or expensive. Those need different products. Expensive minutes point at Ubicloud or Blacksmith; minutes lost rebuilding identical Docker layers point at Depot.
- Migrate one workflow first. Each option is a one-line
runs-on:change, so convert your slowest non-release workflow and compare a week of real runs. - Check the concurrency ceiling first. Namespace publishes 32, 64 and 160 vCPU caps by tier. A cheaper rate is worthless if jobs queue behind a limit you have already hit.
- Price the exit, not the entry. BuildJet shut down. Keep the original
runs-on:value in a comment and confirm you can revert in one commit.
Which One Should You Actually Use?
Lowest bill, willing to trade polish: Ubicloud Standard at $0.0012 a minute is 5x cheaper than GitHub for the same 2 vCPU shape, and the control plane being AGPL v3 means the exit is a migration rather than a negotiation.
A drop-in that just works: Blacksmith. The 3,000 free minutes cover a small team outright, the ARM tier at $0.0025 is the best price-to-effort ratio here, and the migration is genuinely one line.
Container builds dominate your pipeline: Depot, and only in that case. Per-minute it is GitHub's price plus $20 a month, so it only pays back if remote layer caching removes minutes you are currently burning.
You already run on AWS and have someone who knows it: RunsOn. Spot-priced compute with no per-minute markup is the cheapest ceiling available, and the flat license means cost stops scaling with usage entirely.
A platform team with Kubernetes and a rota: actions-runner-controller. Free, Apache 2.0, maintained by GitHub, and it hands you every operational responsibility that the managed vendors were absorbing.
Conclusion
This category exists because GitHub charges the same rate for slow hardware as for fast, so faster machines cut the bill twice. Against GitHub's $0.006 per minute, the managed options land 33 to 80 percent cheaper before any speed claim.
Before migrating, answer one question: is your CI expensive because minutes cost too much, or because your pipeline uses too many? Only the first has a vendor-shaped solution.
Related DevToolLab Tools
- GitHub Actions Generator - scaffold a workflow with the
runs-on:value already set to the runner you picked, rather than editing YAML by hand. - GitLab CI Generator - build the equivalent pipeline if you are comparing GitLab's runner pricing at the same time.
- Jenkinsfile Generator - the self-hosted baseline worth pricing against before renting anyone's runners.
- YAML Diff Checker - confirm a runner migration changed exactly one line across dozens of workflow files.
Related Guides
- Best CI/CD Tools in 2026 compares the platforms themselves, where this guide only swaps the hardware underneath one.
- GitHub Actions Best Practices 2026 covers cutting minutes through caching and reuse before paying anyone for faster ones.
- Best Monorepo Tools in 2026 addresses the affected-projects problem, which is usually why CI minutes grow.
- 7 Datadog Alternatives and What They Cost applies the same pricing method to observability.
