Skip to content

Faster GitHub Actions: speed up slow builds with one line

1.2x to 2.1x faster than GitHub-hosted at 2 vCPU, measured on three open-source builds.

Change runs-on: and the same workflow runs on a size you pick for each job, up to 32 vCPU, with caches that survive between jobs.

Connect GitHub

Card required. 3,000 minutes a month at 2 vCPU are included.

  • 1.2–2.1×

    sooner: the same builds on GitHub's 2 vCPU runner and on ours

  • $0.012

    a build here, against $0.034 on GitHub-hosted

  • 32

    vCPU at the largest, chosen for each job by its label

How much faster, measured

Three open-source projects, each at a pinned commit and built by its own command, on GitHub’s 2 vCPU runner and on ours. Each time is the whole job, start to finish. Your own gain depends on the job: a compile or a test suite spread over many files gains from more cores; a job that waits on the network does not.

  • ESLint
    GitHub-hosted
    3m 16s
    runners.io
    2m 41s
  • Cargo
    GitHub-hosted
    9m 11s
    runners.io
    4m 20s
  • Prometheus
    GitHub-hosted
    4m 30s
    runners.io
    3m 30s
Cost per build, GitHub-hosted
$0.034
Cost per build, runners.io
$0.012
ESLint
eslint/eslint @ c27bc92, built with node Makefile mocha
Cargo
rust-lang/cargo @ e8cb624, built with cargo build --release --locked
Prometheus
prometheus/prometheus @ d15adb9, built with go test ./tsdb/ -test.tsdb-isolation=false

Each time is the median of at least 21 approved rounds that both runners completed.

Why GitHub Actions is slow, and what moves the time

The runner is too small for the work.

A compile or a test suite is limited by cores, and GitHub’s standard runner has 2 vCPU. Here the size is a label: up to 32 vCPU for the jobs that need it, and the default for the rest. The runner size guide says which jobs gain, and the runners page lists every size.

.github/workflows/ci.yml
jobs: build:- runs-on: ubuntu-latest+ runs-on: runnersio-32vcpu-ubuntu-2404 steps: - uses: actions/checkout@v4

Everything is rebuilt from nothing.

The Actions cache is included at no charge. A Docker layer cache that survives between jobs is an add-on at $0.50/GB-month of what it stores, with a build measured cold and warm.

The job waits for a runner.

A queued job is not billed here. If one waits longer than you expect, why jobs wait for a runner lists the causes.

Try it on one repository first.

Installing the App moves nothing: no job runs here until a workflow asks for one of our labels. Change runs-on yourself, or pick a repository and we open a pull request that changes it and nothing else. Its checks run on our runners, so you compare times on your own code before you merge. There is no per-seat fee, and a monthly spend cap you set stops new jobs when it is reached; running ones finish. How the migration goes; what each size costs a minute is on the pricing page.

The ones worth asking first

Why is my GitHub Actions build slow?
Usually one of three things: the runner is too small for the work, dependencies and Docker layers are rebuilt from nothing on every run, or the job waits for a runner before it starts. GitHub's standard runner has 2 vCPU. On ours you choose the size per job, up to 32 vCPU, by the label in runs-on.
How much faster will my builds be?
On the three open-source builds measured on this page, 1.2× to 2.1× sooner on the same 2 vCPU. Your own gain depends on the job: a compile or a test suite spread over many files gains from more cores; a job that waits on the network does not. Move one repository and compare its own times.

Before you connect

  • Is my code safe on someone else's runner?

    While a job runs, its code and the secrets GitHub hands it are on a machine we operate, as on any runner you do not host yourself. Each job gets its own virtual machine, starting fresh and shared with no other job. Nothing a job leaves on its machine can be seen by another job.

  • What do you get from my GitHub account?

    The repositories you choose. GitHub will list read and write permissions, and each write has one use. Administration registers a single-use runner for each job and removes it. Contents, Workflows and Pull requests open the migration pull request. Actions cancels a run we refused, or one holding a job you stopped. Checks and Commit statuses report Terraform plans, if you connect Terraform. Your secrets, environments and branch protection stay on GitHub.

  • How do I leave?

    Change the label back and the job runs on GitHub again: the runs-on label is the only change a workflow needs, and your actions, secrets and triggers were never ours to untangle. Uninstall the App on GitHub and we see nothing more. We delete build output and test results 90 days after each job.

Run your next build here

Connect GitHub

Card required. 3,000 minutes a month at 2 vCPU are included.

.github/workflows/ci.yml
jobs: test:- runs-on: ubuntu-latest+ runs-on: runnersio-4vcpu-ubuntu-2404 steps: - uses: actions/checkout@v4 - run: make test+ build:+ runs-on: runnersio-32vcpu-ubuntu-2404