Skip to main content

GitHub Cut Hosted-Runner Prices 39%. Here Is the New Breakeven for Owning Your CI Runners

10 min readDora NodaDora Noda
Share
On this page

On January 1, 2026, GitHub cut hosted-runner prices by up to 39 percent. A standard Linux 2-core runner fell from $0.008 to $0.006 per minute, Windows runners dropped 38 percent, and macOS runners fell 23 percent. Two weeks earlier, GitHub had announced a new $0.002-per-minute platform charge on self-hosted runner minutes starting March 1 — then walked it back within about a day after community backlash, postponing it indefinitely with no new date. So here is where things stand: the rent side of CI just got materially cheaper, and the own side is still unmetered.

That combination invalidates every build-vs-rent spreadsheet written before 2026. Time to redo the math — with real numbers, a breakeven point, and an honest account of where each side still wins.

The math, up front

Take a typical five-person team on a private repo: 300 builds a month, 8 minutes each, on 2-core-class compute. That is 2,400 build-minutes a month. GitHub's Free plan includes 2,000 minutes, so only 400 minutes are metered at $0.006 — $2.40 a month. The cheapest always-on runner box you can own (a 2-shared-vCPU cloud VM) costs around $5 a month before you spend a minute operating it.

Rent wins at low volume, and it is not close. But the lines cross fast. Here is the same workload at three volumes, priced against a 4-vCPU/8GB box (~$18/month) running two concurrent build slots via Tekton or plain self-hosted runners:

Monthly CI volumeGitHub hosted (2-core, $0.006/min after free quota)Owned box (~$18/mo fixed)Winner
Side project, 800 min$0 (inside 2,000-min free quota)$18Rent by $18
Typical team, 4,000 min(4,000 − 2,000) × $0.006 = $12$18Rent by $6
Busy monorepo, 10,000 min(10,000 − 2,000) × $0.006 = $48$18Own by $30
Same monorepo, 4-core builds ($0.012/min), 6,000 min(6,000 − 2,000) × $0.012 = $48$18Own by $30

The breakeven on 2-core-class compute is roughly 3,000 metered minutes a month beyond the free quota — about 5,000 total minutes on the Free plan, less on paid plans with bigger quotas doing proportionally more work. On 4-core runners it arrives sooner, around 1,500 metered minutes, because the per-minute rate doubles while the fixed box costs the same.

And the shelved surcharge? Price it as a scenario, not a fact. If the $0.002/min self-hosted platform charge ever lands, the busy monorepo's owned side becomes $18 + (10,000 × $0.002) = $38 against GitHub's $48 — owning still wins, but the margin shrinks from $30 to $10. For the typical team it becomes $18 + $8 = $26 against $12, and renting wins by more. The surcharge would move the breakeven roughly 50 percent higher, not eliminate it.

That is the sensitivity range that matters: the own-side advantage is real but volume-dependent, and GitHub has already shown it is willing to meter the own side. Any spreadsheet that assumes self-hosted minutes stay free forever is making a policy bet, not a math error — price both cases and know which one you are in.

What changed on the rent side

The January 2026 price table, verified against GitHub's published runner pricing:

RunnerBefore Jan 1, 2026NowChange
Linux 2-core (standard)$0.008/min$0.006/min−25%
Linux 1-core (slim)$0.002/min$0.002/min0%
Linux 4-core (larger)$0.016/min$0.012/min−25%
Windows 2-core$0.016/min$0.010/min−38%
macOS 3/4-core$0.080/min$0.062/min−23%

Three things did not change: free-quota minutes per plan stayed the same, standard runners on public repos stayed free, and cache pricing stayed at $0.07/GB-month beyond the included storage, with the default 10 GB-per-repo cap and 7-day eviction of untouched entries. GitHub also loosened concurrency in May 2026, letting concurrency groups queue multiple pending runs instead of one — a small change that matters disproportionately for monorepos that previously watched PR builds cancel each other.

The honest footnote on the rent side is the August 2026 outage. GitHub's own postmortem said its Actions services were "running close to their capacity and concurrency limits" — and the blast radius covered self-hosted runners too, because those still report to GitHub's control plane. Renting compute and renting the control plane are two different dependencies, and only one of them is priced per minute.

What changed on the own side

Tekton moved from the Continuous Delivery Foundation to the CNCF as an incubating project in spring 2026 (TOC vote March 24), putting the pipelines-as-code engine under the same governance roof as Kubernetes itself. Governance does not make builds faster, but it does change the risk profile of standardizing on Tekton's Task/Pipeline CRDs: wider maintainer base, vendor-neutral home, less single-company roadmap risk.

The architecture case — builds as Kubernetes objects, no second control plane — was covered in depth in this site's earlier Tekton post; what is new is the cost context around it.

The other own-side fact is the dog that did not bark: self-hosted runner minutes remain unmetered. GitHub's December 2025 announcement, the ~24-hour backlash, and the indefinite postponement are all on the record, with no new date proposed. Plan against the current price (zero), hedge against the announced one ($0.002) — which is exactly what the scenario row in the table above does.

Where renting still wins

Below the breakeven, renting wins on price outright — $0 to $12 a month is less than any box plus the operator time to keep it patched. Above the breakeven, GitHub still wins in four places that do not show up in a per-minute table:

  • Marketplace depth. The Actions marketplace is measured in the tens of thousands of prebuilt actions. A Tekton shop reimplements or wraps the long tail itself; a GitHub shop composes it. That gap is labor cost, not meter cost, and it favors small teams most.
  • Zero operations. No runner images to rebuild, no autoscaling group to tune, no 3 a.m. disk-full on the builder.
  • Hosted cache without a storage design. 10 GB per repo, LRU eviction, $0.07/GB beyond that. An owned setup matches this with local NVMe layer caching and no per-GB meter — but somebody has to design the retention policy GitHub ships as a default.
  • Burst elasticity. Larger runners scale to 1,000 concurrent jobs. A fixed pool cannot do this at any price point a small team would pay, which deserves its own section.

Where owning wins

Past the breakeven volume, the owned box is simply cheaper — $18 flat against a $48 meter is a 60 percent cut that compounds every month. Three non-price reasons stack on top:

  • Outage independence. The August 2026 incident froze GitHub-connected builds regardless of whose hardware ran them. Tekton pipelines on your own cluster kept running, because neither the compute nor the control plane belonged to GitHub. If your deploys must survive a GitHub outage, the build system cannot be downstream of GitHub's API.
  • Data locality and custom environments. Builds that need GPUs, 64 GB RAM, a warm 200 GB monorepo checkout, or images that never leave your network are all awkward on hosted runners and trivial on a box you picked.
  • One control plane. On a Cluster-API fleet, a Tekton PipelineRun is reconciled by the same API server, RBAC, and audit log as every tenant workload — no separate agent-registration handshake to secure, no second dashboard to watch.

The bursty case that flips it back

Here is the counter-case the own-side math has to survive: peaks, not averages. Fifty PRs landing on a release afternoon, 10 minutes each, is 500 build-minutes needing ~50 concurrent slots right now. Hosted runners absorb it for 500 × $0.006 = $3 and scale back to zero. A fixed two-slot pool queues that work for roughly four hours — or you provision 25 boxes for the afternoon at an idle-the-rest-of-the-month cost that dwarfs the $3.

Fixed pools are sized for the average and punished by the peak; meters are priced for the peak and cheap at the average. Teams with spiky CI (release trains, end-of-sprint merges, OSS projects with drive-by contributors) should weight burst shape at least as heavily as monthly totals.

The middle path is autoscaling on your own hardware: runner scale sets that spin ephemeral build pods up from zero and drain back down, so the fixed pool only pays for the baseline while bursts borrow idle capacity from the rest of the fleet. You still operate the scaler and the images — the ops cost does not vanish — but the overprovisioning penalty does, which is precisely the line item that makes naive fixed-pool math lose to hosted runners for bursty teams.

The decision rule

Pull your last three months of Actions usage (Settings → Billing → Usage, or the billing API), subtract the free quota, and multiply by your runner tier's rate. Under ~$18 — roughly 3,000 metered 2-core minutes — stay hosted and spend the savings on anything else.

Past that, run three tests. First, price one fixed box against the meter using the table above. Second, the burst-shape test: if your peaks exceed ~10× your average concurrency, hosted elasticity (or autoscaled self-hosted pools) beats a fixed pool regardless of the monthly total. Third, the outage test: did August 2026 cost you a deploy window you cannot afford to lose again?

If any two of the three point at owning, the CNCF-governed Tekton route is the cheapest credible way to do it — pipelines as Kubernetes objects on machines you already operate, with no per-minute meter attached. Prices move on both sides, so re-check GitHub's runner-pricing page and your cloud provider's price list on the day you decide; the method above survives whatever the current numbers are.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with the entire build-and-deploy path running as Kubernetes objects on infrastructure you control end to end. Star the repo on GitHub or deploy your first app today.

Sources

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex