GitHub Actions Pricing 2026: Self-Hosted Runner Cost vs GitLab

GitHub Actions pricing in 2026 starts at $0.006 per minute for the standard Linux 2-core hosted runner, once a plan’s free minutes run out: 2,000 a month on GitHub Free, 3,000 on Pro or Team. Self-hosted runners cost $0 on GitHub’s side, so you pay only for the machine. A $0.002/min self-hosted fee was announced, then postponed, not cancelled.

If you’re weighing GitHub Actions self-hosted runner cost vs GitLab CI, neither platform bills per minute for runners you host yourself today, GitLab’s hosted minutes are priced differently and scale with a per-runner cost factor, and a self-hosted runner turns CI from a metered bill into a flat monthly VPS fee.

GitHub Actions pricing per minute (2026)

These are the standard GitHub-hosted runner rates from GitHub’s runner pricing reference. They apply to private repositories once the plan’s included minutes are used up; standard hosted runners on public repositories are free.

Runner (standard, GitHub-hosted) Price 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 (M1 or Intel) $0.062

Prices as of 2026-10-17, from GitHub Docs (Actions runner pricing).

A few details change the real bill more than the headline rate does:

  • Rounding: each job’s minutes round up to the nearest whole minute, so a 10-second lint job bills as a full minute.
  • macOS is the expensive line. At $0.062 against $0.006, a macOS minute costs roughly 10x a Linux 2-core minute. If you build for iOS or macOS, that’s where the money goes.
  • Larger runners are a separate price list: x64 Linux runs $0.012, $0.022, $0.042, $0.082, $0.162 and $0.252 per minute for 4, 8, 16, 32, 64 and 96 cores; a 96-core Windows runner is $0.552/min; GPU runners are $0.052 (Linux 4-core) and $0.102 (Windows 4-core). Larger runners get no included minutes, aren’t free on public repos, and are only available on Team and Enterprise Cloud.

These rates are the result of a cut of up to 39% that took effect on January 1, 2026; the free quotas didn’t change. According to GitHub’s December 2025 announcement, the listed hosted rates already include the $0.002 per-minute “Actions cloud platform charge,” so there’s no separate platform line on a hosted-runner bill.

GitHub Actions free tier: included minutes by plan

The included minutes are per account or organization, per month, and cover standard GitHub-hosted runners on private repositories:

GitHub plan Free minutes/month (private repos)
GitHub Free (personal) 2,000
GitHub Pro 3,000
GitHub Free for organizations 2,000
GitHub Team 3,000
GitHub Enterprise Cloud 50,000

Prices last checked: 2026-10-17, from GitHub Docs (GitHub Actions billing).

So “is GitHub Actions free?” has three answers: yes on public repositories with standard runners, yes for self-hosted runners, and yes on private repositories until the plan’s minutes run out. On budgets: without a payment method on file, GitHub blocks further usage once the quota is gone rather than billing you; with one, you can set a spending budget and get included-usage alerts before overage starts.

Cheapest option by usage

Scenario Cheapest Option Why
Under 400 min/month, occasional pushes GitLab CI Free tier or GitHub Free GitLab Free includes 400 compute minutes (at cost factor 1, Linux small); GitHub Free includes 2,000
400-3,000 min/month GitHub Actions within the plan’s included minutes 2,000 free minutes on GitHub Free, 3,000 on Pro or Team
3,000-10,000 min/month, small team GitLab Premium ($29/user/mo, billed annually) or a self-hosted runner Premium’s 10,000-minute pool covers it; self-hosted is cheaper if you’re not already paying for seats
Any volume, cost-optimized Self-hosted runner on a small VPS Flat monthly VPS fee regardless of minutes run; both platforms currently charge $0 for runner execution on your own machines

Prices last checked: 2026-10-17

GitHub self-hosted runner pricing: the fee that almost happened

On December 16, 2025, GitHub announced a $0.002/min “GitHub Actions cloud platform charge” on self-hosted runner usage in private and internal repositories, starting March 1, 2026. Public repositories and GitHub Enterprise Server were exempt. GitHub’s reasoning was that it still runs the orchestration side of every self-hosted job, the “control plane,” even when your own machine does the build.

GitHub’s own impact figures, published with the announcement, said 96% of customers would see no change; of the 4% affected, 85% would pay less and the remaining 15% would see a median increase of around $13.

On December 17, 2025, GitHub said it was “postponing the announced billing change for self-hosted GitHub Actions,” adding that it had “missed the mark with this change by not including more of you in our planning.” The hosted-runner price cut went ahead on January 1; the self-hosted charge did not.

Status as of 2026-10-17: GitHub’s billing documentation states that GitHub Actions is free for self-hosted runners, and its self-hosted runner docs add that you’re “responsible for the cost of maintaining your runner machines.” No new announcement or date has appeared on GitHub’s blog, changelog or docs, and the community discussion GitHub opened for feedback (#182186) still refers to the postponement with no new date in its latest comments from September 2026. But GitHub’s own wording was postponement, not cancellation. Treat free self-hosted runners as the current state, not a guarantee, and check GitHub’s changelog before locking a long-term cost model to it.

GitLab CI pricing: compute minutes vs your own runners

GitLab.com’s tiers, per its pricing page: Free is $0 with 400 compute minutes a month; Premium is $29/user/month billed annually with 10,000 minutes; Ultimate is custom-priced with 50,000 minutes. Extra minutes cost $10 per 1,000 as a one-time purchase, not a metered overage. GitLab’s docs say purchased minutes are used only after the monthly quota runs out, and they roll over.

GitLab doesn’t charge one rate across operating systems either, but it gets there differently. Its docs assign each hosted runner a cost factor that multiplies the compute minutes a job consumes:

  • Linux x86-64: small 1, medium 2, large 3, xlarge 6, 2xlarge 12 (Linux Arm64: 1/2/3 for small/medium/large)
  • macOS: M1 medium 6, M2 Pro large 12 (both Beta)
  • Windows: medium 1 (Beta)

A 10-minute job on a Linux medium runner therefore uses 20 compute minutes. At $10 per 1,000 purchased minutes, that’s $0.02 per wall-clock minute on Linux medium and $0.06 on a macOS M1 medium, against GitHub’s $0.006 and $0.062. On a Linux small runner (factor 1) it’s $0.01.

Your own runners are a different story. GitLab’s pricing page states: “Execution on your own runners will not use your compute minutes and is unlimited.” That holds on every tier, including Free. Self-managed GitLab (the edition you install on your own server) goes further, since there’s no GitLab-hosted runner billing at all, but it’s a much heavier platform to operate than a single GitHub Actions runner binary. If you’re weighing that route, our comparison of self-hosted Git server options covers the operational tradeoffs of going fully self-managed.

The real cost floor: self-hosting a runner on your own VPS

Both platforms land in the same place once you’re past the free minutes: the cheapest way to run steady CI volume is a runner on a machine you already pay for, because neither GitHub nor GitLab currently bills per minute for it. You pay a flat monthly VPS fee, and that fee doesn’t move whether the runner works 500 minutes or 50,000 in a month, up to what the box can actually process.

Setup is short: install the GitHub Actions runner binary or the GitLab Runner agent, register it against your repo or group, and optionally run jobs in Docker so each build starts clean. Any small cloud instance works for a single runner, Vultr included. Once you’re on the box, you can generate the systemd unit file for the runner service with our free systemd service generator instead of hand-writing it.

The tradeoff is total cost of ownership beyond the VPS invoice. A self-hosted runner is a machine you patch, secure, and monitor yourself. There’s no autoscaling unless you build it, and a single GitHub Actions self-hosted runner runs one job at a time, so build-heavy teams need several runners or an autoscaling setup to avoid queues. For a solo developer or small SaaS team running a few hundred to a few thousand CI minutes a month, that overhead is small; at large scale, the operational math shifts back toward hosted runners. A runner reachable over SSH needs the same hardening as any production box; our Vultr firewall setup guide walks through locking one down before you point CI traffic at it. If you’re comparing providers first, our free VPS cost calculator does the per-GB and per-vCPU math for you.

Worked example: what 5,000 CI minutes a month actually costs

This is an illustrative estimate, not a measured benchmark; real usage varies with team size and test-suite length. Assume a small team runs 5,000 CI minutes a month on Linux jobs, all in private repositories:

  • GitHub Free, hosted Linux 2-core ($0.006/min): 2,000 minutes are included, so 3,000 x $0.006 = $18/month.
  • GitHub Pro or Team, same runner: 3,000 minutes are included, so 2,000 x $0.006 = $12/month in usage, on top of the plan’s own price. For a mixed workload, GitHub’s billing docs give their own Team example: 5,000 minutes beyond the quota, split 3,000 Linux ($18) and 2,000 Windows ($20), comes to $38.
  • GitLab Free, Linux small runner (cost factor 1): 400 minutes are included, so 4,600 x $0.01 = $46 worth of extra minutes. Since they’re sold at $10 per 1,000, that means five blocks ($50), with the unused 400 rolling over. On a Linux medium runner (factor 2), the same 5,000 job minutes consume 10,000 compute minutes, 9,600 of them beyond the quota: ten $10 blocks, $100, with the unused 400 rolling over.
  • GitLab Premium: 5,000 minutes on a small runner fit inside the 10,000-minute pool, but you’re paying $29/user/month, billed annually, regardless of usage.
  • Self-hosted runner on either platform: $0 in CI charges; the cost is your flat monthly VPS fee.

The gap grows as minutes go up, because the VPS fee stays flat while hosted billing on both platforms scales with every minute. Heavier runners, macOS jobs or more parallel pipelines change the totals fast.

GitHub Actions vs GitLab CI: side-by-side pricing

GitHub Actions GitLab CI (GitLab.com)
Hosted Linux runner rate $0.006/min (2-core x64) $10 per 1,000 compute minutes; Linux small factor 1, medium 2
Free minutes/month 2,000 (Free), 3,000 (Pro, Team), 50,000 (Enterprise Cloud); standard runners free on public repos 400 (Free), 10,000 (Premium), 50,000 (Ultimate)
Windows/macOS $0.010/min / $0.062/min Cost factor: Windows medium 1, macOS M1 medium 6 (both Beta)
Your own runners $0 today (fee postponed, not cancelled) Don’t use compute minutes; unlimited
Extra minutes Metered per minute by runner type, rounded up per job $10 per 1,000 minutes, one-time purchase, rolls over
Mid-tier paid plan Team: 3,000 minutes included Premium: $29/user/month billed annually, 10,000 minutes

Prices last checked: 2026-10-17, from GitHub Docs, GitLab’s pricing page and GitLab’s compute-minutes docs.

Who should choose which

If you already live in the GitHub ecosystem and your CI volume is modest, stay on GitHub-hosted runners inside your plan’s 2,000 or 3,000 included minutes and don’t overthink it. If you’re regularly past that on private repos and don’t want to touch infrastructure, GitLab Premium’s 10,000-minute pool is a reasonable ceiling, but only if you’re already paying for GitLab seats for other reasons; buying seats purely for CI minutes is expensive. Watch the cost factor there: medium and larger GitLab runners drain that pool two or more times faster than the wall clock.

For anyone running consistent CI volume (daily pushes, a real test suite, several contributors), a self-hosted runner on a small VPS is the cheapest option on both platforms once you’re past a few thousand minutes a month. It’s the wrong move if you have no appetite for managing a Linux box, or if your jobs are bursty enough that a single serial runner would create queues during busy periods; then the operational overhead eats the savings faster than the math above suggests.

Both charge $0 for self-hosted runners, but read the fine print

On the number that matters most for cost-conscious teams, the two platforms tie today: runners on your own machines carry no per-minute fee on GitHub Actions or GitLab CI. The difference is in the history. GitLab’s pricing page states plainly that own-runner execution is unlimited and doesn’t touch compute minutes. GitHub announced a self-hosted fee in December 2025 and postponed it a day later, without cancelling it. That’s worth remembering if you’re building a long-term budget around GitHub Actions pricing.

For an indie hacker or small team running real CI volume, the decision usually isn’t “GitHub or GitLab” but “hosted minutes or my own VPS.” Below your plan’s included minutes, stay hosted. Past them, price a small VPS against the worked example above, and if the flat fee comes in under your projected overage, move the runner there.

Leave a Comment

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

Scroll to Top