On 16 December 2025, GitHub posted a pricing change for GitHub Actions. It drew 802 points and 819 comments on Hacker News in a day. On 17 December, GitHub took half of it back. What is left — hosted runner rates cut by up to 39%, effective 1 January 2026 — is the diff this article is about. The self-hosted fee is still sitting in the changelog, postponed, and that postponement is part of the fine print.
The changelog is where the product actually is. This one has a dated before and after, so the comparison below is a table with dates on it, not a vibe.
The event, dated
The announcement of 16 December 2025 had two parts, per GitHub’s own changelog entry and the companion “Pricing changes for GitHub Actions” page:
- Effective 1 January 2026: GitHub-hosted runner prices reduced by up to 39%, depending on machine type. The free minute quotas in every plan stayed the same. Standard runner usage on public repositories stayed free. GitHub Enterprise Server was untouched.
- Effective 1 March 2026 (as announced): a new $0.002 per minute “GitHub Actions cloud platform charge” on self-hosted runner usage, counted against the minutes included in your plan.
Then the second part changed. The changelog entry now opens with an “Update”: GitHub is “postponing the announced billing change for self-hosted GitHub Actions to take time to re-evaluate our approach,” while the hosted-runner reductions proceed on schedule. The postponement was public by 17 December 2025 — a Hacker News thread on the pull-back appeared the evening after the announcement. As of 27 September 2026, GitHub’s billing documentation still describes self-hosted runner usage as free, and no replacement date for the platform charge has been published.
The numbers GitHub published alongside the announcement: 96% of customers would see no change to their bill; of the 4% affected, 85% would see it go down and 15% a median increase of about $13; among individual free and Pro users running private repos, 0.09% would pay more, at a median under $2 per month. In 2025, developers used 11.5 billion Actions minutes in public projects free of charge, roughly $184 million in compute. A pricing change that survives 24 hours is a feature.
The three models: units first
The three vendors do not sell the same unit, and the comparison is wrong until you say what each unit is.
GitHub Actions sells minutes on a named runner SKU. The rate is per SKU, per minute, rounded up to whole minutes per job. After 1 January 2026 the standard 2-core Linux runner (the ubuntu-latest class) is $0.006 per minute; it was $0.008 before. Larger runners — available on Team and Enterprise Cloud plans — have their own per-SKU rates, never consume included minutes, and are billed even in public repositories. Included minutes come with the plan: 2,000 (Free), 3,000 (Pro), 3,000 (Team), 50,000 (Enterprise Cloud), per the documentation as of 27 September 2026.
GitLab sells compute minutes, and a compute minute is not a wall-clock minute. The formula is in the docs: usage per job is job duration in seconds divided by 60, multiplied by a cost factor, aggregated at your top-level namespace. The cost factors on GitLab.com hosted runners: Linux x86-64 is 1 on the small class, 2 on medium, 3 on large, 6 on xlarge, 12 on 2xlarge; Linux Arm64 is 1/2/3; macOS M1 medium is 6 (beta) and M2 Pro large is 12 (beta); Windows medium is 1 (beta). A 30-minute job on a small Linux runner is 30 compute minutes; the same job on medium is 60. If you have never looked at GitLab CI’s billing side: the pipeline runs on GitLab-hosted “instance” runners or your own, the meter reads instance-runner time, and your namespace has a monthly allowance — Free 400 compute minutes, Premium 10,000, Ultimate 50,000 — with overage sold at $10 per 1,000 minutes, i.e. $0.01 per minute.
CircleCI sells credits. Credits are bought up front and consumed in real time against monthly active users, compute time (each resource class has a credits-per-minute price), add-on features, and network/storage overage (420 credits per GB). The vendor’s own worked example: 10 credits per minute on the Linux Medium class, so 30,000 credits is 3,000 minutes of it. Credit packs are $15 per 25,000 credits ($0.0006 per credit); paid credits roll over for a year. Plans: Free at $0 with 30,000 credits a month and up to 5 active users; Performance from $15 a month with the same 30,000 credits included; Scale custom, billed annually.
Reconciled at the 2 vCPU Linux size — the honest comparison point — the per-minute unit prices have converged: GitHub’s 2-core standard runner is $0.006 a minute; CircleCI’s Medium (2 vCPU) is 10 credits a minute at $0.0006, also $0.006 a minute; GitLab’s small class is $0.01 a minute once the allowance is gone. The difference between the three bills is therefore not the unit price. It is the allowance, the seat price, and the fine print around each.
The fine print
Included allowances and overage, as published on 27 September 2026:
| Vendor / plan | Included per month | Overage |
|---|---|---|
| GitHub Actions Free / Pro / Team | 2,000 / 3,000 / 3,000 minutes | SKU rate (2-core Linux $0.006/min) |
| GitHub Actions Enterprise Cloud | 50,000 minutes | SKU rate |
| GitLab Free / Premium / Ultimate | 400 / 10,000 / 50,000 compute minutes | $0.01/min |
| CircleCI Free / Performance / Scale | 30,000 credits / 30,000 credits / custom | $15 per 25,000 credits |
Concurrency. GitHub publishes a number per plan: 20 concurrent jobs on Free, 40 on Pro, 60 on Team, 500 on Enterprise Cloud, with at most 5 concurrent macOS jobs (50 on Enterprise) and up to 1,000 concurrent jobs on larger runners. CircleCI: 30 on Free, 80 on Performance, custom on Scale; macOS concurrency is 1 and 15 respectively. GitLab’s pricing page lists no per-plan concurrent-job figure — the shared runner pool is the limit, and the quota governs minutes, not parallelism. That is a fine-print gap worth naming, not a feature.
Self-hosted runners. GitHub’s billing docs (27 September 2026) say usage on self-hosted runners is free; the $0.002/min platform charge is the postponed one, and GitHub Enterprise Server customers were never in scope. The operational limits are still on the docs: 1,500 runner registrations per five minutes, 10,000 runners per runner group, 5 days of job execution time, 24 hours in the queue. GitLab: jobs on your own runners do not consume compute minutes — the meter reads instance-runner usage — so on GitLab.com self-hosting is a clean exit from the meter, and on self-managed it is the default. CircleCI caps the exit: 5 self-hosted runners on Free, 20 on Performance, unlimited on Scale.
Public-repo discounts. GitHub: standard runners free and unlimited in public repositories; larger runners still billed there. GitLab: projects in its Open Source program run at cost factor 0.5, public forks of GitLab-maintained projects at 0.008, and community contributors to GitLab-maintained projects draw from a 300,000-minute pool. CircleCI: none. Every build consumes credits, private or public.
The workload test
The workload, stated: 10 repositories, 50 pipeline runs a day over a 30-day month, 1,500 runs. Each run is three jobs of eight minutes on a standard 2 vCPU Linux runner — 24 job-minutes per run, 36,000 minutes a month. Five developers. The mapping is the reconciled 2 vCPU point from above: GitHub’s 2-core standard runner, GitLab’s small Linux class (cost factor 1), CircleCI’s Medium.

Billed at the rates as of 27 September 2026:
| Vendor (plan) | Included | Overage line | Seats / plan | Monthly |
|---|---|---|---|---|
| GitHub Actions (Team) | 3,000 min | 33,000 × $0.006 = $198.00 | 5 × $4 = $20.00 | $218.00 |
| GitLab (Premium) | 10,000 min | 26,000 × $0.010 = $260.00 | 5 × $29 = $145.00 | $405.00 |
| CircleCI (Performance) | 30,000 credits = 3,000 min | 330,000 credits × $0.0006 = $198.00 | $15.00 plan | $213.00 |
Notes on the lines themselves. GitHub’s Team seat rate is what the pricing page shows on 27 September 2026 — $4 per user per month for the first 12 months; check what renewal looks like before you annualize it. GitLab Premium is $29 per user per month, billed annually. CircleCI’s November 2025 pricing page charged $15 a month for each user beyond five on Performance; the current page lists users as “included” without a rate — both dates, both figures, confirm which one is in force before you commit.
What the table actually says. The overage lines for GitHub and CircleCI are identical to the dollar, because the unit prices converged. GitLab’s bill is the outlier, and the seat price is doing most of the work — $145 of the $405. The 10,000-minute allowance is what keeps the CI line at $260 instead of $360; if your workload is under 10,000 compute minutes a month, GitLab’s CI line is $0 and the comparison changes shape entirely. Below roughly 3,000 minutes a month, all three vendors are effectively free on this workload: GitHub’s Free plan carries 2,000 of them, CircleCI’s 30,000 credits convert to 3,000 Medium minutes, and GitLab’s Free allowance of 400 is the tight one. Benchmarks are marketing until you run them on your own data — plug your own run count and job time into the three lines above; the workload is a template, not a verdict.
The diff versus last year
Same workload, same five seats, GitHub Actions, before and after:
| 2025 rates | 27 Sep 2026 rates | |
|---|---|---|
| Standard 2-core Linux rate | $0.008/min | $0.006/min (−25%) |
| Overage on 33,000 min | $264.00 | $198.00 |
| CI line, monthly | $264.00 | $198.00 (−$66.00) |
The −25% matches the percentage the vendor published for that SKU. The self-hosted side of the story is the dated one: free in 2025, $0.002 per minute announced for 1 March 2026 on 16 December 2025, postponed on 17 December 2025, still free in the 27 September 2026 billing docs. The bill you were afraid of in December is the bill you are not paying in September. That is the re-render value of this article: the diff table is the article, and it changes when the vendor does.
For the other two, the year’s change is quieter and mostly in the unit: CircleCI’s November 2025 page sold the Free tier as “up to 6,000 build minutes” on the small class; the current page sells the same allowance as 30,000 credits, with the minutes retired as the marketing figure. GitLab’s current page shows the 400/10,000/50,000 compute-minute allowances and the $0.01 overage rate.
The self-hosted escape hatch
On GitHub Actions the escape hatch is the cheapest line in the building right now, because the platform charge is postponed and self-hosted usage is free per the billing docs. The question is what your own hardware costs per minute. Run the 36,000 monthly job-minutes on a VM that costs $36 a month on your cloud and the compute is $0.001 per minute — six times below the $0.006 hosted rate. If the $0.002 platform charge lands, add $72 to that workload’s monthly bill. The hidden line is ops: runner images, scaling, security patching, the 24-hour queue cap, the 1,500-registrations-per-5-minutes limit. Engineer time is the budget, and your build times are not a rounding error.

GitLab makes the exit cleaner: self-hosted jobs consume zero compute minutes, so the meter simply does not see them. CircleCI makes the exit countable: five runners on Free, twenty on Performance, unlimited on Scale. The escape hatch has a seat count on it.
The general rule: self-hosting wins when your amortized infrastructure plus ops cost is below the vendor’s per-minute rate. On this workload, against GitHub’s 2-core rate, the crossover is 36,000 × $0.006 = $216 a month of infrastructure. Below that you are saving; above it you are paying for the privilege.
The dated watchlist
What to re-check before your next billing cycle, each with the date it was last true:
- GitHub’s $0.002/min self-hosted platform charge — postponed 17 December 2025; no replacement date as of 27 September 2026. When it lands, re-run the self-hosted math with +$0.002 per minute.
- GitHub plan seat rates — $4 (Team) and $21 (Enterprise) per user per month for the first 12 months on the pricing page as of 27 September 2026; verify the renewal rate before you annualize a bill around them.
- CircleCI user billing — $15/month per additional user (Performance) and 25,000 credits per month per additional user (Scale) on the 13 November 2025 pricing page; “included” without a rate on the current page. Confirm which is in force.
- GitLab beta cost factors — the Windows medium (1) and the macOS lines are marked beta in the docs; beta rates are draft rates.
- The diff itself — re-render this comparison at the next vendor pricing change. The standard 2-core rate moved 25% in a single quarter in 2026; every number above is a point in time, and the changelog is where the product actually is.
If I were picking for a team of five
Running exactly this workload — 10 repositories, 50 pipelines a day, standard Linux builds — I would leave it on GitHub Actions. $218 against $405, the same unit price as CircleCI, and a runner image that five people already know how to debug at 2 a.m. I would keep GitLab warm only if the code is already hosted there and the 10,000-minute allowance is genuinely being used; at $29 a seat it is the most expensive seat in the building, and the bill says so. And I would re-read the watchlist at every renewal, because on 17 December 2025 this vendor rewrote its own pricing within 24 hours — and the changelog is where the product actually is.