What Is the Cheapest Runner Size?

The 2 vCPU Linux ARM64 label at $0.003 per minute holds the lowest rate in the catalog, and here is the full ladder plus when a larger label bills less.

Last verified:

The cheapest runner size is the 2 vCPU, 8 GB Linux ARM64 label warp-ubuntu-latest-arm64-2x at $0.003 per minute, the lowest rate in the catalog (cloud runners documentation, checked on 2026-08-13). The cheapest minute and the cheapest build are separate questions, because a job that runs twice as long on the small label bills exactly what the next size up would have billed and returns its answer later.

Answer

Sorted by rate, the ladder looks like this. The last column prices a job that occupies the machine for 10 minutes.

LabelShapePer minute10 minute job
warp-ubuntu-latest-arm64-2x2 vCPU, 8 GB$0.003$0.030
warp-ubuntu-latest-x64-2x2 vCPU, 8 GB$0.004$0.040
warp-ubuntu-latest-arm64-4x4 vCPU, 16 GB$0.006$0.060
warp-ubuntu-latest-x64-4x4 vCPU, 16 GB$0.008$0.080
warp-ubuntu-latest-arm64-8x8 vCPU, 32 GB$0.012$0.120
warp-ubuntu-latest-x64-8x8 vCPU, 32 GB$0.016$0.160
warp-windows-latest-x64-4x4 vCPU, 16 GB$0.016$0.160
warp-ubuntu-latest-arm64-16x16 vCPU, 64 GB$0.024$0.240
warp-ubuntu-latest-x64-16x16 vCPU, 64 GB$0.032$0.320
warp-windows-latest-x64-8x8 vCPU, 32 GB$0.032$0.320
warp-ubuntu-latest-arm64-32x32 vCPU, 128 GB$0.048$0.480
warp-ubuntu-latest-x64-32x32 vCPU, 128 GB$0.064$0.640
warp-windows-latest-x64-16x16 vCPU, 64 GB$0.064$0.640
warp-macos-latest-arm64-6x6 vCPU, 22 GB$0.08$0.800
warp-windows-latest-x64-32x32 vCPU, 128 GB$0.128$1.280
warp-macos-latest-arm64-12x12 vCPU, 44 GB$0.16$1.600

Every rate comes from the cloud runners documentation and the pricing page, checked on 2026-08-13. Ubuntu 26.04 labels such as warp-ubuntu-2604-arm64-2x carry the same rates as their latest equivalents, so pinning a release changes nothing in the arithmetic.

Read down the platform column and the practical answer narrows. A Windows job has no option below $0.016 per minute and a macOS job none below $0.08, so the size question only has a cheapest answer inside a single platform. Linux is where the choice is wide, and inside Linux the ARM64 line prices below the x64 line at every rung, as the table above shows.

Pricing is purely usage based (pricing page). There is no base subscription fee, no platform fee, and no seat fee, which means the rate column above is the whole comparison. Signup includes $10 free credits, worth 3,333 minutes on the $0.003 label.

Against GitHub-hosted runners at the same shape, both 2 vCPU labels start lower. warp-ubuntu-latest-arm64-2x (2 vCPU, 8 GB) costs $0.003 per minute against $0.005 per minute for ubuntu-24.04-arm (2 vCPU, 8 GB on private repositories): 40 percent lower list price. warp-ubuntu-latest-x64-2x costs $0.004 per minute against $0.006 per minute for ubuntu-latest at the same shape: 33 percent lower list price. GitHub list prices checked on 2026-08-13 at the GitHub Actions billing reference. Public repositories get a 4 vCPU, 16 GB GitHub-hosted shape at no charge, and no paid rate competes with free.

Detail

When the cheapest minute stops being the cheapest build

Each Linux rung doubles the vCPU count and doubles the rate, so cost parity sits at exactly half the duration. A larger label bills less than a smaller one only when it finishes the same work in under half the time.

Here is the model on a Node test job, with the assumptions stated so you can substitute your own: 900 pull request runs a month, npm ci plus a suite that spreads across at most 4 workers, so scaling flattens above 4 vCPU.

LabelRateAssumed durationCost per runCost at 900 runs
warp-ubuntu-latest-x64-2x$0.00424 min$0.096$86.40
warp-ubuntu-latest-x64-4x$0.00813 min$0.104$93.60
warp-ubuntu-latest-x64-8x$0.0169 min$0.144$129.60
warp-ubuntu-latest-x64-16x$0.0328 min$0.256$230.40

Price each step by the minutes it buys. Moving from 2x to 4x removes 11 minutes for $0.008 per run, which is $0.0007 per minute saved. The 8x step removes 4 more minutes for $0.04, or $0.01 per minute saved. The 16x step removes 1 minute for $0.112, or $0.112 per minute saved. Each added rung buys less time for more money, which is the shape of every workload with a serial critical path.

Now change one assumption. A job that keeps every core busy, such as a compile with -j$(nproc) or a suite sharded inside the job, halves its duration at each rung: 40 minutes at 2x, 20 at 4x, 10 at 8x. Every row bills $0.16, so the invoice is flat and only wall clock separates them. Pick the largest label that still halves the time, and stop at the rung where it does not.

Measure instead of guessing. The Reports section shows Duration P75 and P90 and Queue Time P75 and P90 for each repository, workflow, and job name combination, with filters by runner label and CSV export (reports documentation). Run one job on two labels for a week, compare the P75 rows, and multiply by the rate above.

What the $0.003 label actually holds

The 2 vCPU ARM64 machine ships 8 GB of RAM and a 150 GB SSD. That fits lint, formatting, type checks, schema validation, docs builds, release tagging, deploy dispatch, and any job whose clock is dominated by network waits rather than compute.

It fits large image builds poorly. A job that exhausts 8 GB and starts swapping runs far longer at $0.003 than it would at $0.006, and a job that gets killed for memory bills its minutes anyway and bills them again on the re-run. Cheap only stays cheap while the job completes.

The compatibility check before moving a job to ARM64

Four checks, in the order they tend to break a first attempt.

  1. Toolchain and prebuilt dependencies. The Ubuntu 24.04 ARM64 image publishes its package list at actions/partner-runner-images. Any dependency without an aarch64 wheel or binary compiles from source at install time and adds minutes the lower rate has to cover.
  2. Container images. Every image the job pulls needs a linux/arm64 variant. Where one is missing, the step either fails outright or runs the amd64 image under QEMU emulation inside the same job, which is slow enough that keeping that job on an x64 label instead is usually the better call.
  3. Nested virtualization. /dev/kvm and nested virtualization are unavailable on ARM64 runners, so Android emulator jobs and anything else needing KVM stay on x64 (cloud runners documentation).
  4. Work directory. The Ubuntu 24.04 ARM64 image sets the work dir to /runner/_work rather than GitHub's /home/runner/work/ (cloud runners documentation). Use ${{ github.workspace }} in expressions and $GITHUB_WORKSPACE in shell steps and the difference stops mattering.

Move one job first and leave the rest where it is.

name: ci

on:
  pull_request:

jobs:
  lint:
    runs-on: warp-ubuntu-latest-arm64-2x
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm

      - run: npm ci

      - run: npm run lint

      - run: uname -m

  test:
    runs-on: warp-ubuntu-latest-arm64-8x
    needs: lint
    steps:
      - uses: actions/checkout@v4

      - run: npm ci

      - run: npm test

uname -m prints aarch64 when the label resolved as expected. At 3 minutes and 900 runs a month, the lint job bills 2,700 minutes and $8.10.

What sits outside the per-minute rate

The label rate is the largest line on most invoices, and it is not the only one. Cache storage is $0.20 per GB-month, a cache write or restore is $0.0001 per operation, a snapshot restore is $0.04 per job, snapshot storage is $0.025 per snapshot-hour, and networking through Tailscale is $0 (pricing page, checked on 2026-08-13).

Those numbers set their own break-even. A $0.04 snapshot restore equals about 13 minutes on the $0.003 label, so it earns its place on a job whose setup takes longer than that and wastes money on a job whose setup takes two minutes.

What is the cheapest GitHub Actions runner size?

The 2 vCPU, 8 GB Linux ARM64 label warp-ubuntu-latest-arm64-2x at $0.003 per minute, which is the lowest per-minute rate in the catalog. The x64 label at the same shape is $0.004, the smallest Windows label is $0.016, and the smallest macOS label is $0.08, so the cheapest size question only resolves inside one platform. Every ARM64 label, size, and rate is listed in the Linux ARM64 runner catalog.

Is a larger runner ever cheaper per build than the smallest one?

Yes, when the step up cuts wall clock by more than half. Each Linux rung doubles both the vCPU count and the rate, so 12 minutes at $0.008 on the 4 vCPU label and 6 minutes at $0.016 on the 8 vCPU label both bill $0.096. Below 6 minutes the larger label bills less, above 6 minutes it bills more. The larger runners cost guide works the same arithmetic through every size class, and whether fewer larger runners beat more small ones covers the matrix version of the question.

How much does the 2 vCPU label cost against a GitHub-hosted runner of the same shape?

warp-ubuntu-latest-arm64-2x (2 vCPU, 8 GB) costs $0.003 per minute against $0.005 per minute for ubuntu-24.04-arm (2 vCPU, 8 GB on private repositories): 40 percent lower list price. On x64, warp-ubuntu-latest-x64-2x is $0.004 against $0.006 for ubuntu-latest: 33 percent lower list price. GitHub list prices checked on 2026-08-13 at the GitHub Actions billing reference.

Price the ladder against your own job minutes on the pricing page, then confirm the duration on your own repository through the reports documentation. Signup includes $10 free credits, with no base subscription fee, no platform fee, and no seat fee.

Start with $10 in free credits

Change the runner label in your workflow and keep the rest of your GitHub Actions setup. Runner time is billed per minute.