GitHub Actions Pricing 2026: What Changed for Self-Hosted Runners

If you self-host your CI runners to avoid paying GitHub by the minute, you probably had a bad week in mid-December 2025. GitHub announced it would start charging self-hosted runners too — then killed the idea within about a day after developers made it very clear what they thought of being billed for compute they already own. GitHub Actions pricing 2026 ended up looking almost nothing like that announcement, but the story behind it tells you exactly how fragile “free self-hosting” really is, and what you should actually be watching going forward.

Timeline graphic showing December 16 announcement, December 17-18 postponement, and January 1 hosted-runner price cut
Timeline graphic showing December 16 announcement, December 17-18 postponement, and January 1 hosted-runner price cut

What GitHub Actually Announced on December 16, 2025

On December 16, 2025, GitHub published a changelog post titled “Coming soon: Simpler pricing and a better experience for GitHub Actions.” Buried inside a post that also promised cheaper hosted runners was a second, much less popular idea: a new $0.002-per-minute “GitHub Actions cloud platform charge” that would apply to self-hosted runner usage on private and internal repositories, starting March 1, 2026. Public repos would stay exempt.

GitHub’s stated reasoning wasn’t unreasonable on paper — the platform charge was supposed to cover orchestration, scheduling, queuing, logging, and secrets management, all of which GitHub runs even when your own hardware executes the actual job. GitHub’s own numbers, cited in its executive materials, claimed 96% of customers would see no bill change at all, and that of the remaining 4%, 85% would actually pay less. That leaves a small slice — well under 1% of total customers — who’d see an increase, with a median bump of around $13/month.

The problem was never the math for most people. It was the principle: GitHub was proposing to meter compute time on servers you own, rack, and pay to run yourself.

The Backlash That Forced a Reversal

The reaction was immediate and loud. The GitHub Community Discussions thread “Per minute charges for self hosted runners? Wtf?” filled up within hours of the announcement, and coverage from The Register, WinBuzzer, and a heavily upvoted Hacker News thread amplified it further. The core complaint showed up in dozens of variations, but one developer summed it up cleanly: “If it takes MY machine 30 minutes to do a build, you’re going to charge me for that when it places no load on YOUR services?”

Some of the specific numbers people threw around were much bigger than GitHub’s $13 median:

  • One enterprise user calculated the change would cost them “close to $3.5k a month extra” — on top of the $21/user/month they already pay for GitHub Enterprise Cloud.
  • A separate back-of-envelope calculation estimated a single CI run for a large open-source project like dotnet/runtime could cost roughly $25.20 under the new per-minute model.
  • Commenters pointed out that Azure DevOps charges a flat $15/month per self-hosted agent regardless of usage — a model that doesn’t punish you for having a slow build or a big test suite.

I don’t think GitHub’s $13 figure and the $3.5k/month outlier are actually contradicting each other — they’re describing different populations. GitHub’s number is an aggregate median across a huge customer base; the outlier reports came from large-scale users and enterprises running heavy CI workloads, exactly the group most likely to feel a per-minute charge. Both are true. Neither tells the whole story on its own.

GitHub reversed course fast. By December 17–18, 2025 — sources differ on whether it was closer to 24 hours or closer to 48, but nobody disputes it was under two days — GitHub posted that it was “postponing the announced billing change for self-hosted GitHub Actions to take time to re-evaluate our approach,” adding that it had “missed the mark with this change by not including more of you in our planning.” A new discussion thread, “Updates to GitHub Actions pricing,” was opened specifically to solicit developer feedback before trying again.

Postponed, not cancelled. That distinction matters for anything you plan around this going forward, and I’ll come back to it.

Screenshot-style mockup of a GitHub changelog post announcement with a "postponed" banner
Screenshot-style mockup of a GitHub changelog post announcement with a “postponed” banner

Self-Hosted Runners Are Still Free — Here’s the Current State

As of July 2026, self-hosted GitHub Actions runners carry zero platform fee from GitHub, regardless of whether the repo is public or private. GitHub’s official runner pricing documentation doesn’t even list a self-hosted line item — only usage-limit notes — which is about as clear a confirmation as you’ll get that the $0.002/min charge never shipped. No new date has been announced for revisiting it.

GitHub Enterprise Server customers were never in scope for the original proposal either; they can keep running Actions on self-hosted infrastructure with no GitHub-side charge, same as always.

Practically, if your team runs self-hosted runners on a VPS today, your CI cost is just two line items: your normal GitHub plan/seat cost, plus whatever you’re paying your VPS provider for the runner’s compute. There’s still no third meter running on GitHub’s side for that runner time — but the December episode showed GitHub is at least willing to consider adding one, and the postponement leaves that door open for a future changelog post with better messaging and less backlash.

GitHub-Hosted Runner Pricing 2026: The Cuts That Did Stick

Unlike the self-hosted charge, the hosted-runner price reduction went ahead exactly as scheduled on January 1, 2026. GitHub’s changelog confirms reductions of up to 39% depending on the runner type, and standard hosted usage on public repos remains free. Here’s the current per-minute pricing, per GitHub’s official documentation (accessed July 2026):

Runner typePrice per minute
Linux 1-core (x64)$0.002
Linux 2-core (x64)$0.006
Linux 2-core (arm64)$0.005
Windows 2-core (x64)$0.010
Windows 2-core (arm64)$0.010
macOS 3-core/4-core$0.062
Windows 96-core (x64, largest listed)$0.552

Prices last checked: July 2026.

A couple of things worth flagging here. First, macOS runners are still roughly 10x the price of standard Linux runners — that hasn’t changed, and if your CI pipeline builds for iOS or macOS, it’s still your biggest line item by far. Second, these published rates already fold the $0.002/min “Actions cloud platform charge” into the per-minute price — there’s no separate fee shown anywhere. That platform charge only ever became real for GitHub-hosted usage. The free monthly minute quotas (2,000 Linux minutes/month on paid plans, for example) weren’t touched by the January cut, so if you’re already inside your quota, this price cut won’t show up on your bill at all — it only matters once you’re paying for overage minutes.

GitHub Actions vs GitLab CI: How the Pricing Actually Compares

If this whole episode has you nervous about GitHub’s direction, it’s worth knowing how GitLab handles the same trade-off, since it’s the most common CI alternative developers actually migrate to.

GitHub ActionsGitLab CI (SaaS)
Free tier minutes2,000 min/mo (Linux, paid plans)400 min/mo
Extra minutes$0.002–$0.062+/min, varies by OS$0.01/min flat ($10 per 1,000 min)
OS price differencemacOS ~10x Linux costNone — Windows/macOS same rate as Linux
Self-hosted runner fee$0 (as of July 2026, previously proposed at $0.002/min)$0 — never proposed, no per-minute charge on self-hosted
Mid-tier paid planVaries by GitHub planPremium $29/user/mo, 10,000 min included

Prices last checked: July 2026.

The structural difference that stands out to me: GitLab has never proposed metering self-hosted runners, and its flat $0.01/min rate for hosted compute means you don’t get punished for choosing Windows or macOS the way you do on GitHub. GitHub still wins on ecosystem — more marketplace actions, tighter integration if you’re already living in GitHub for source control and PRs — but if per-minute unpredictability on hosted compute is what worries you, GitLab’s flat-rate model is simpler to budget against.

That said, I wouldn’t migrate off GitHub Actions purely because of a proposal that got walked back in under 48 hours. Watch what GitHub does the next time it revisits self-hosted pricing before making that call.

Should You Self-Host Your Runners on a VPS?

Nothing about the practical calculus changed here — self-hosting a runner on your own VPS is still free of any GitHub-side platform fee, and for teams running more than a handful of CI jobs a day, it’s usually cheaper than paying GitHub’s per-minute hosted rate once you’re past the free quota. The trade-off, as always, is that you’re now responsible for runner uptime, security patching, and autoscaling instead of GitHub handling it.

Setting up a self-hosted runner is genuinely simple: install the runner agent as a systemd service on a small VPS instance, register it against your repo or org, and it picks up jobs the same way a GitHub-hosted runner would — just on hardware you control. A $6–$12/month VPS instance handles a moderate build/test pipeline comfortably, and you’re not metered per minute at all once it’s running.

If you’re setting this up for the first time, a Docker-based runner is the easiest path to keep environments reproducible between jobs — we cover the container setup in our Docker on Vultr VPS guide, and you’ll want to lock down the instance before exposing it to your CI webhook traffic, which our Vultr firewall setup guide walks through in about 20 minutes.

For the VPS itself, Vultr is a reasonable default if you don’t already have infrastructure elsewhere — new accounts get $300 in free credit valid for 30 days, which is more than enough runway to test a self-hosted runner setup before committing to a paid plan. The tier you need depends entirely on your build workload: a Node.js test suite runs fine on a 1-2 vCPU instance, but anything doing Docker image builds or heavier compilation benefits from more cores.

The real risk isn’t cost today — it’s that GitHub only postponed the self-hosted charge, it didn’t kill it. If you’re building a CI setup around “self-hosted runners are free forever,” build in the assumption that a modified version of this proposal could resurface, and keep half an eye on GitHub’s Community Discussions rather than being surprised again.

Diagram showing a self-hosted GitHub Actions runner running on a VPS instance, connected to a GitHub repository via webhook
Diagram showing a self-hosted GitHub Actions runner running on a VPS instance, connected to a GitHub repository via webhook

Self-Hosted Runners: Nothing to Change Today

If you’re currently self-hosting GitHub Actions runners, nothing operational needs to change today. The December 2025 self-hosted charge never took effect, the hosted-runner price cuts that did ship don’t apply to you, and self-hosted runners remain free of any GitHub platform fee as of July 2026. What did change is your risk awareness — GitHub showed its hand once, and “postponed” isn’t “cancelled.” Keep your CI infrastructure on a VPS if that’s already working for you, budget mentally for the possibility this comes back in a revised form, and don’t let a single reversed announcement push you into a migration you don’t actually need yet.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top