I Use GitHub Actions Every Day. Then I Read the December Announcement.

GitHub Actions has been free for public repositories since it launched. For private repositories, you get a monthly allotment of included minutes depending on your plan, and pay per minute beyond that. Self-hosted runners — where you bring your own compute — have always been exempt from per-minute charges. You paid for the hardware. GitHub provided the coordination layer. That was the deal.

In December 2025, GitHub announced they were changing one part of that deal.

Two Changes, One Announcement, Very Different Receptions

The announcement bundled two things together, which made it harder to evaluate cleanly.

The first change: hosted runner prices drop by up to 39%. This is straightforwardly good. GitHub attributed it to architectural work they completed in 2025 — they re-platformed the entire Actions backend, scaling from 23 million to 71 million jobs per day, which apparently unlocked enough efficiency to pass savings on. This change went into effect January 1, 2026, no caveats.

The second change: a new $0.002 per-minute platform charge for self-hosted runners. Scheduled for March 1, 2026. This is the one that caused the backlash.

The charge would apply to jobs running in private repositories on self-hosted runners — your own machines, your own cloud instances, your own Kubernetes clusters. GitHub’s reasoning: even when you bring your own compute, you’re still using their infrastructure for job queuing, webhook delivery, artifact storage APIs, and runner registration. That infrastructure costs money to run and maintain. The self-hosted runner subsidy, as they framed it, had historically been funded by hosted runner margins.

The math on impact was actually pretty mild. According to GitHub’s own numbers, 96% of customers would see zero change to their bill. Of the 4% affected, 85% would see a decrease (because the hosted runner price drop outweighed the new charge). The remaining 15% — customers whose self-hosted runner usage was high relative to hosted usage — faced a median increase of $13 a month.

Thirteen dollars. Median. For enterprise-scale CI/CD infrastructure.

Why the Reaction Was So Strong

The dollar amounts weren’t the issue. The principle was.

Self-hosted runners exist precisely because some teams don’t want to depend on GitHub’s compute. They have compliance requirements, GPU workloads, on-premises infrastructure, or simply want predictable costs independent of per-minute pricing. The appeal is that you control the hardware and GitHub stays in its lane as an orchestrator.

Charging per minute for your own hardware — even framed as a “platform charge” — collapses that distinction. Once GitHub can charge for the coordination layer, the implicit contract changes. The amount today is $0.002 per minute. What’s the amount in two years?

The announcement was also made without prior consultation, without a calculator ready at launch (they added it later), and without a meaningful transition period. The community noticed.

GitHub Backed Down

Within days, GitHub published an update at the top of the original announcement:

We’re postponing the announced billing change for self-hosted GitHub Actions to take time to re-evaluate our approach.

They opened a public discussion thread to collect feedback. The hosted runner price reductions stayed on schedule.

This is worth noting: GitHub didn’t quietly delay and hope people forgot. They acknowledged they “missed the mark” by not including the community in their planning, and they created a structured channel for input. That’s a better outcome than most pricing reversals produce.

The March 1, 2026 date has come and gone without the self-hosted charge going into effect. There’s no announced replacement yet.

What GitHub Said Was Coming for Self-Hosted Runners

Alongside the pricing news, GitHub outlined several investments in the self-hosted experience. Worth knowing about regardless of what happens with pricing:

GitHub Scale Set Client — a new lightweight Go SDK for building custom autoscaling without Kubernetes. If you’ve wrestled with Actions Runner Controller and found it too complex for your setup, this is aimed at you. It handles job queuing, runner registration, and scaling logic, and works against containers, VMs, cloud instances, or bare metal.

Multi-label support — reintroduction of multi-label routing for both hosted larger runners and self-hosted runners, including ARC and the Scale Set Client. This was removed at some point and its absence has been a real operational pain for teams with heterogeneous runner fleets.

Actions Runner Controller 0.14.0 — refined Helm charts, better logging, updated metrics, and a formal deprecation of legacy ARC with a migration path. If you’re on legacy ARC, this is the one to watch.

Actions Data Stream — near real-time feed of workflow and job event data, including action versions. Aimed at observability, compliance, and operational monitoring. Eliminates the need to parse job logs to figure out what ran and when.

None of these are responses to the pricing controversy — they were presumably in flight already. But they suggest GitHub is genuinely investing in self-hosted infrastructure, not just looking for ways to monetize it.

What to Actually Do Right Now

If you only use GitHub-hosted runners in private repos: you’re paying less than you were on January 1. Check the updated rate card and verify your bill reflects the reduction.

If you use self-hosted runners: nothing changes until GitHub announces a replacement plan. Watch the community discussion and the public roadmap. If a new proposal appears, GitHub has effectively committed to giving people advance notice and input before it goes into effect.

If you want to estimate theoretical exposure: GitHub published a Python script that works against your usage export. The pricing calculator also handles the new model. Run the numbers against your actual usage before assuming the impact is negligible — or catastrophic.

If you’re on GitHub Enterprise Server: this entire conversation doesn’t apply to you. The pricing changes explicitly exclude GHES.

The Part That Actually Matters Long-Term

GitHub Actions processed 11.5 billion minutes for public repositories in 2025. Free. GitHub characterizes this as roughly $184 million in compute they absorbed to support open source. That’s a real subsidy and it’s not going anywhere — free for public repos is a cornerstone of GitHub’s value proposition.

The self-hosted situation is different. GitHub has real costs in the coordination layer and they need a sustainable model for covering them. The $0.002/minute proposal was one attempt. It failed on communication and principle, not necessarily on economics. A revised version will appear eventually.

When it does, the community now has a clearer picture of what matters: transparency in advance, real tooling to estimate impact, and a distinction between charging for GitHub’s services versus charging for the mere act of running your own hardware. If the next proposal respects those lines, it’ll land differently.


Reference:

  1. GitHub: Pricing changes for GitHub Actions
  2. GitHub Actions runner pricing documentation
  3. Community discussion: GitHub Actions self-hosted runner feedback
  4. GitHub public roadmap