There is a whole product category built around one line of YAML. Swap the value after runs-on:, keep everything else, and your builds get faster while the invoice gets smaller. That is the pitch from every vendor in this space, and it is cheap enough to test that most teams never check whether the arithmetic holds.
So I checked it. GitHub's Octoverse report from November 7, 2025 put 2025 test-running usage at 11.5 billion Actions minutes, up 35 percent year over year. Multiply that by the $0.006 Linux 2-core rate and the category is chasing something like $69 million a year in billable minutes. I priced the main contenders against a single identical workload, and the full version of this with every vendor's fine print is on DevToolLab.
GitHub's Baseline Rates
Every vendor quotes against GitHub's own numbers, so start there. As of September 11, 2026, GitHub's billing docs list 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 are 2,000 on Free, 3,000 on Team, and 50,000 on Enterprise Cloud. Self-hosted runners are not metered at all.
The structural problem is that the rate does not care how fast the machine is. A four-minute job and a forty-minute job on the same shape cost the same per minute, so slow hardware charges you twice: once on the invoice, once in the pull request queue. Matrix builds then multiply that quietly every time someone adds a Node version.
What 100,000 Minutes Costs
Here is the comparison run as a script instead of a spreadsheet, 100,000 Linux minutes a month on 2 vCPU at each vendor's published rate. The second figure applies their own speed claim, on the logic that a runner that is twice as fast bills half the minutes.
// runner-cost.mjs
const MINUTES = 100_000
const tiers = [
['GitHub 2-core', 0.006, 1, 0, 3_000],
['Depot 2 vCPU', 0.006, 1, 20, 0],
['Blacksmith x64', 0.004, 2, 0, 3_000],
['Blacksmith ARM', 0.0025, 2, 0, 3_000],
['Ubicloud Premium', 0.002, 2, 0, 1_250],
['Ubicloud Standard', 0.0012, 1, 0, 1_250],
]
const bill = ([, rate, speedup, plan, free], applySpeed) =>
Math.max(0, MINUTES / (applySpeed ? speedup : 1) - free) * rate + plan
const baseline = bill(tiers[0], false)
for (const t of tiers) {
const flat = bill(t, false)
const delta = ((flat / baseline - 1) * 100).toFixed(0)
console.log(`${t[0].padEnd(18)} $${flat.toFixed(0).padStart(4)}/mo ${delta}%`)
}
The output, with the speed-adjusted column alongside it:
runner 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 row that teaches you the most is the one that got more expensive. Depot's 2 vCPU runner is priced at $0.006 a minute, identical to GitHub, so a naive swap lands 7 percent up once the $20 plan fee is counted. That is not a mistake in their pricing. It means Depot is selling something other than cheap minutes, which the section below gets to.
Blacksmith
Blacksmith is the purest version of the pitch: same workflow file, one changed line, faster machines at a lower rate.
Published rates are $0.004 per minute for Ubuntu x64 and $0.0025 for Ubuntu ARM, both carrying 3,000 free minutes a month. Shapes run from 2 to 32 vCPU on Ubuntu and Windows, and 6 to 12 vCPU on macOS. Docker layer caching and sticky disks are billed separately at $0.50 per GB per month, and static IPs are $100 each. Maintained public repos with a permissive license can apply to a free OSS program, which is a different thing from the startup discount for companies under $50 million raised.
Watch the marketing math though. The homepage says 60 percent cheaper; the pricing page says 33 percent per minute with 2x hardware, which compounds to roughly 67 percent. They cannot both describe the same measurement, so budget against the per-minute number that will actually appear on your invoice.
Pricing: 3,000 free minutes/month · $0.004/min x64 · $0.0025/min ARM
Ubicloud
Ubicloud came out cheapest of the managed options, and it is the only one here whose control plane is itself open source, AGPL v3 with roughly 12,300 GitHub stars.
Two vCPU costs $0.0012 a minute on Standard and $0.0020 on Premium, against $0.0060 for the same shape from GitHub. That is 5x on Standard before anyone claims a speedup, and their comparison quotes GitHub's published rate accurately, which is not universal in this category. The free allowance is 1,250 minutes a month and the ladder tops out at 16 vCPU for $0.0100.
The catch is that the tiers do different jobs. Standard is the cheap tier, not the fast one, so the doubled-performance claim belongs to Premium at $0.0020. Comparing Standard's headline price against a competitor's speed claim compares two different things.
Pricing: 1,250 free minutes/month · $0.0012/min Standard · $0.0020/min Premium · AGPL v3
Namespace
Namespace is positioned as a development platform rather than a runner: managed GitHub runners plus Docker builds, devboxes and Bazel remote caching.
Billing is subscription-shaped. Developer is free and pay-per-use, Team is $100 a month with 100,000 unit minutes and 1,000 Docker builds, Business is $250 with 250,000 unit minutes and 2,500 builds. Linux concurrency ceilings are 32, 64 and 160 vCPU by tier, macOS is 12 to 48, and Bazel cache storage adds $0.20 per GB-month.
Because they meter unit minutes rather than wall-clock runner minutes, Namespace cannot be dropped into the table above without running their calculator. Treat that as part of the cost: you cannot glance at an invoice and tell whether you came out ahead.
Pricing: Free Developer tier · Team $100/month · Business $250/month
Depot
Depot is the one that does not fit the pattern, and working out why is probably the most useful thing here.
Billing is per second, at $0.0001 for 2 vCPU with 8 GB, which is exactly GitHub's $0.006 a minute. It doubles to $0.0002 at 4 vCPU and reaches $0.0032 at 64 vCPU. Plans open at $20 a month with 25 GB of cache and registry storage and run to $200 with 250 GB, with overflow cache at $0.20 per GB per month. Windows and macOS M2 runners exist.
The actual product is the caching layer: remote Docker layer caching, a shared build cache, and sccache support. All three attack minute count rather than minute price. If your pipeline spends its life rebuilding Docker layers that have not changed, that is the correct lever. If your problem is a slow test suite, you are paying GitHub's rate plus a subscription for nothing.
Pricing: $20/month Developer plan · $0.006/min at 2 vCPU · $0.20/GB/month cache
Self-Hosting: RunsOn and actions-runner-controller
RunsOn flips the arrangement. Rather than renting capacity, it spins up an ephemeral EC2 instance in your own AWS account for each job and tears it down afterward.
Since AWS bills you at spot prices with no reseller margin, their 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 line up with GitHub's own docs. RunsOn itself is a flat annual license per legal entity covering all your orgs and AWS accounts, with no seats and no minute metering, after a 15-day trial. Personal, open source, educational and nonprofit use costs nothing, provided you credit them with a link. The repo ships an MIT license file and v3.3.1 landed on September 10, 2026.
The zero-cost floor is actions-runner-controller, GitHub's own Apache 2.0 Kubernetes operator at roughly 6,500 stars, with runner scale set release 0.14.2 from May 22, 2026. It is free and it gives you everything, pager duty included. Autoscaling, image caching and cleanup stop being a vendor's problem and become yours.
Pricing: RunsOn flat annual license, free non-commercial · actions-runner-controller free, Apache 2.0
BuildJet Is Gone, and That Is Part of the Price
BuildJet was a Y Combinator company and one of the most recognizable names in this category, with Google, Amazon, Plex, Prisma and Grafbase on its own homepage.
On September 11, 2026 the homepage carried a red banner reading "BuildJet for GitHub Actions has been shut down" while the pricing page still advertised live per-minute rates starting at $0.004 for 2 vCPU. Both pages were serving at once, which is precisely how a discontinued product looks to someone skimming for a price.
That is the risk none of the rates above include. These are venture-funded startups sitting directly in your deploy path, and the most visible one has already left. The question worth answering before you migrate is how quickly you could migrate back.
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 |
Picking One Without Breaking Your Pipeline
Read the bill per workflow first. GitHub already breaks usage down by job, and if three matrix entries account for most of your minutes then the matrix is the bug, not the runner.
Then work out which problem you have, because expensive minutes and too many minutes have different answers. Expensive points at Ubicloud or Blacksmith. Minutes burned rebuilding identical container layers points at Depot. Check concurrency ceilings before you commit, since a lower rate buys you nothing if jobs sit in a queue behind a tier cap you are already hitting.
Migrate a single workflow, ideally your slowest non-release one, and compare a week of real runs. It is a one-line change, which cuts both ways: keep the original runs-on: value in a comment so reverting is one commit. The YAML Diff Checker is useful for confirming a migration touched exactly one line across a repo full of workflow files, and the GitHub Actions Generator will scaffold a workflow with the runner already set.
Short version of the recommendations: Ubicloud Standard if the bill is the problem and you can live with less polish, Blacksmith if you want a genuinely one-line migration with 3,000 free minutes covering a small team, Depot only when container builds dominate, RunsOn if you already run AWS and have someone who knows it, and actions-runner-controller if you have a platform team with Kubernetes and an on-call rota. The original article explains the reasoning behind each of those in more detail.
Conclusion
This category exists because GitHub charges an identical rate for slow and fast hardware, which means better machines cut the bill from both directions at once. Against $0.006 a minute, the managed options land somewhere between 33 and 80 percent cheaper before you credit any speed claim at all.
One question decides whether any of this applies to you: is CI expensive because each minute costs too much, or because your pipeline burns too many of them? Only the first one has a vendor you can pay to fix it.



Top comments (0)