Skipbox

ubuntu-latest runner specs: CPU, memory, disk and what's installed (2026)

On a private repository, ubuntu-latest is a Linux x64 virtual machine with 2 CPUs, 8 GB of RAM and a 14 GB SSD; on a public repository it has 4 CPUs and 16 GB, with the same 14 GB SSD (GitHub's hosted runners reference, read on November 9, 2026). The label is moving from Ubuntu 24.04 to Ubuntu 26.04 "gradually between October 19 and November 19, 2026", so this week the same runs-on line can start either image. For more cores or memory there are two ways: GitHub's larger runners, 4 to 96 cores on GitHub Team and Enterprise Cloud, or a self-hosted runner.

Skipbox publishes this guide and sells a self-hosted runner. GitHub's numbers below come from GitHub's own pages and its runner-images repository, read on November 9, 2026, and linked under Sources.

The specs of GitHub's Linux runners

What the table doesn't show:

  • ubuntu-slim runs the job "inside a container rather than a full VM instance", with "a minimal set of tools", and "The job timeout for single-CPU runners is 15 minutes."
  • Larger runners are "only available for organizations and enterprises using the GitHub Team or GitHub Enterprise Cloud plans", need a credit card on file, and are billed on public repositories too. Their cost draws on the plan's included compute on GitHub Team and Enterprise Cloud.
  • Every standard runner is billed per minute on private repositories, with each job's minutes rounded "up to the nearest whole minute", once the plan's included compute is used (how many minutes that is).
  • The disk you get can differ from the list. An open issue in runner-images (#15238, opened November 3, 2026) reports runs on the 4-core larger runner, which lists 150 GB, failing with "No space left on device".

Which Ubuntu ubuntu-latest gives you this month

GitHub's changelog of September 17, 2026: "This migration will roll out gradually between October 19 and November 19, 2026. During this window, workflows that use ubuntu-latest will automatically move to Ubuntu 26.04." The issue that tracks it, runner-images #14748, was still open on November 9, and the runner-images readme still listed ubuntu-latest beside Ubuntu 24.04 that day. So until November 19, two runs of the same workflow can get different images.

What changes for a job is the installed software. GitHub's own warning: "Ubuntu 26.04 includes updated, and in some cases removed, tools and tool versions." From the two image readmes, read November 9, 2026:

In #14748, one user reports a Gradle task failing on ubuntu-latest because JDK 8 isn't on the 26.04 image.

To keep Ubuntu 24.04 while you fix a job, GitHub's advice is "pin your workflows to ubuntu-24.04":

jobs:
  build:
    runs-on: ubuntu-24.04

To try 26.04 before the label moves you, run the same steps in a second job:

jobs:
  build:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v7
      - run: make test
  build-2604:
    runs-on: ubuntu-26.04
    steps:
      - uses: actions/checkout@v7
      - run: make test

ubuntu-22.04 is on its way out: its deprecation began on September 17, 2026, and its retirement date is April 17, 2027 (runner-images #14254).

What's installed on the image

The Ubuntu 24.04 readme lists every tool and version on the current image. On image 20261101.360.1 it includes:

  • Docker client and server 28.0.4, Docker Compose 2.38.2 and Docker Buildx 0.38.1
  • Node.js 22.23.4, with 22.23.4 and 24.22.2 in the tool cache
  • Python 3.12.3, with 3.11 to 3.15 in the tool cache
  • Java 17 as the default, Go 1.24 to 1.26 in the tool cache, and Rust 1.99.1
  • git 2.56.0, GitHub CLI 2.103.3, kubectl, the AWS and Azure CLIs, Google Chrome, PostgreSQL 16.15 and MySQL 8.0

GitHub also notes: "The Linux and macOS virtual machines both run using passwordless sudo", so a step can sudo apt-get install what the image lacks. The Ubuntu 26.04 readme lists the newer image the same way.

Check the runner from inside a job

The quickest way to know what a job really got is to print it. Add this step before the one that fails:

      - name: Show the runner
        run: |
          cat /etc/os-release
          nproc
          free -h
          df -h /
          lscpu | head -20

nproc prints the CPUs the job can use, free -h the memory, df -h / the disk left before your build starts, and /etc/os-release which Ubuntu ran.

Signs a job needs more than 2 CPUs and 8 GB

  • Exit code 137, or a step that ends with "Killed". The process got signal 9. On a runner that most often means memory ran out.
  • "The runner has received a shutdown signal." In runner-images #15202 (opened October 31, 2026, about ubuntu-24.04 jobs), the engineer assigned to the issue tested it: the runner was lost with this message once a job used more than the runner's RAM plus swap. Once memory runs out, they wrote, the VM stops responding before an out-of-memory message reaches the log. A job that ends this way may have run out of memory with nothing else in the log to say so.
  • "JavaScript heap out of memory" from Node, or a JVM that stops in garbage collection.
  • "No space left on device", often in a Docker build or an Android, iOS or ML toolchain download.
  • Builds and test suites that keep both CPUs busy for most of the job. nproc prints 2; a tool told to use all cores runs 2 at a time.

Before paying for a bigger machine, a job that runs out of memory can often be made to fit: cap Node's heap with --max-old-space-size, run fewer test workers, or split one large job into two. Exit code 137 and "JavaScript heap out of memory" has the fix for each tool.

Getting a bigger machine

GitHub warns that self-hosted runners "should almost never be used for public repositories", because anyone who can open a pull request could run code on the machine.

Skipbox's sizes, and how its image differs from ubuntu-latest

Skipbox is a self-hosted runner that Skipbox operates: its runners register with your GitHub organization or personal account as self-hosted runners, so GitHub bills none of their minutes. Each job gets a fresh Linux x64 VM in Helsinki, destroyed when the job ends. You pick the size with the runs-on label:

A job larger than your largest plan is refused, so two S plans don't run a skipbox-8x16 job. runs-on: skipbox has 4 vCPU and 8 GB, against a private repository's ubuntu-latest at 2 CPUs and 8 GB. A job that runs out of memory needs skipbox-8x16 or skipbox-16x32, which need plan M or L. GitHub's larger runners have twice the memory per core of Skipbox's VMs, so a job limited by memory rather than CPU isn't a like-for-like comparison.

How the image differs. Skipbox's VMs run Ubuntu 24.04, chosen by Skipbox, so GitHub moving ubuntu-latest doesn't change them. They have Docker CE with Buildx and Compose, Node 22, Python 3.12, Java 17, git, the GitHub CLI, yq, the system libraries Playwright needs, a tool cache for setup-* actions, and passwordless sudo, as on GitHub's runners. It isn't GitHub's full image. A tool your job expects that isn't there comes from its setup-* action (actions/setup-go, actions/setup-java) or from apt-get, as on any self-hosted runner.

What it doesn't run. Arm, macOS, Windows and GPU jobs, jobs larger than 16 vCPU, and public repositories stay on GitHub.

The price. Plan S is $39 a month however many minutes you run. On GitHub Team, above about 9,500 job-minutes a month that is less than the same minutes on ubuntu-latest, and above about 4,800 less than the same minutes on GitHub's 4-core larger runner. M and L against GitHub's 8- and 16-core runners: about 4,500 and 4,000 job-minutes a month. The cost calculator prices your own jobs.

You can try it on your own jobs first: free for 7 days or 3,000 job-minutes, no card.

A trial runs runs-on: skipbox jobs, one at a time.

FAQ

How much RAM does ubuntu-latest have?

8 GB on a private repository and 16 GB on a public one, in GitHub's hosted runners reference (read November 9, 2026). ubuntu-slim has 5 GB. GitHub's larger runners have 4 GB per core: 16 GB at 4 cores up to 384 GB at 96.

How many CPU cores does a GitHub Actions runner have?

ubuntu-latest has 2 CPUs on a private repository and 4 on a public one, and ubuntu-slim has 1. Larger runners, which only organizations on GitHub Team or Enterprise Cloud can add, have 4 to 96 cores on Linux x64.

How much disk space does ubuntu-latest have?

GitHub lists a 14 GB SSD for every standard runner, private or public. Its Linux x64 larger runners list 150 GB at 4 cores, 300 GB at 8, 600 GB at 16, 1,200 GB at 32, and 2,040 GB at 64 and 96.

Is ubuntu-latest Ubuntu 24.04 or Ubuntu 26.04?

Either, until November 19, 2026. GitHub is moving the label to Ubuntu 26.04 "gradually between October 19 and November 19, 2026". Write runs-on: ubuntu-24.04 to keep 24.04, or runs-on: ubuntu-26.04 to move now. cat /etc/os-release in a step prints which one ran.

Does ubuntu-latest have Docker installed?

Yes. The Ubuntu 24.04 image readme (image 20261101.360.1, read November 9, 2026) lists Docker client and server 28.0.4, Docker Compose 2.38.2 and Docker Buildx 0.38.1.

How do I get more than 2 CPUs on a private repository?

Use a larger runner, which an organization on GitHub Team or Enterprise Cloud adds and pays for per minute ($0.012 a minute at 4 cores), or a self-hosted runner, a machine you or a service register with GitHub, whose minutes GitHub doesn't bill.

Sources

All read on 2026-11-09.

Updated November 9, 2026

See your own GitHub Actions bill

The free cost calculator reads your repositories' last 30 days of runs and gives one fixed monthly amount for the same jobs.

Open the cost calculator

Flat-price CI from your next push

Change one runs-on: line. Any minutes, one price.

  • No card
  • 7 days or 3,000 job-minutes free
  • 30-day refund on first payment