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
| Runner | runs-on label | CPUs | RAM | SSD | Per minute, private repository |
|---|---|---|---|---|---|
| Standard, private repository | ubuntu-latest, ubuntu-24.04, ubuntu-26.04, ubuntu-22.04 | 2 | 8 GB | 14 GB | $0.006 |
| Standard, public repository | The same labels | 4 | 16 GB | 14 GB | Free on public repositories |
| Standard arm64, private repository | ubuntu-24.04-arm, ubuntu-26.04-arm, ubuntu-22.04-arm | 2 | 8 GB | 14 GB | $0.005 |
ubuntu-slim (a container, not a VM) | ubuntu-slim | 1 | 5 GB | 14 GB | $0.002 |
| Larger runner, Linux x64, 4-core | The name you give the runner | 4 | 16 GB | 150 GB | $0.012 |
| Larger runner, Linux x64, 8-core | The name you give the runner | 8 | 32 GB | 300 GB | $0.022 |
| Larger runner, Linux x64, 16-core | The name you give the runner | 16 | 64 GB | 600 GB | $0.042 |
| Larger runner, Linux x64, 32-core | The name you give the runner | 32 | 128 GB | 1,200 GB | $0.082 |
| Larger runner, Linux x64, 64-core | The name you give the runner | 64 | 256 GB | 2,040 GB | $0.162 |
| Larger runner, Linux x64, 96-core | The name you give the runner | 96 | 384 GB | 2,040 GB | $0.252 |
What the table doesn't show:
ubuntu-slimruns 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:
| Ubuntu 24.04 (image 20261101.360.1) | Ubuntu 26.04 (image 20261101.186.1) | |
|---|---|---|
| Node.js | 22.23.4 | 24.22.2 |
| Python | 3.12.3 | 3.14.4 |
| Docker | 28.0.4 | 29.4.2 |
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.04jobs), 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.
nprocprints 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's larger runners | A self-hosted runner | |
|---|---|---|
| What it is | A bigger VM that GitHub runs, which you add to your organization | Any machine registered with GitHub to run your jobs: yours, or a service's |
| Who can use it | Organizations on GitHub Team or Enterprise Cloud | Any account, on any plan |
| Sizes | 4 to 96 cores on Linux x64, with 4 GB of RAM per core | Whatever the machine has |
| What GitHub bills | Per minute, by size ($0.012 a minute at 4 cores, $0.022 at 8, $0.042 at 16), public repositories included | Nothing: GitHub lists self-hosted runners as usage that "remains free independently and does not reduce the included compute usage" |
runs-on | The name you give the runner | The runner's labels |
| What you take on | Nothing beyond the bill | The machine, keeping the runner application current, and a clean machine for each job |
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 Finland or Germany (EU), destroyed when the job ends. You pick the size with the runs-on label:
runs-on | vCPU | RAM | Needs | Price, unlimited minutes |
|---|---|---|---|---|
skipbox or skipbox-4x8 | 4 | 8 GB | Plan S, M or L | $39 a month for plan S |
skipbox-8x16 | 8 | 16 GB | Plan M or L | $79 a month for plan M |
skipbox-16x32 | 16 | 32 GB | Plan L | $149 a month for plan L |
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 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.
- GitHub Docs, GitHub-hosted runners reference: the standard runners' CPUs, RAM, SSD and labels,
ubuntu-slim's container and 15-minute limit, passwordlesssudo. - GitHub Docs, Larger runners reference: the larger runners' cores, RAM and SSD, the credit card requirement.
- GitHub Docs, Actions runner pricing: per-minute rates, rounding up per job, larger runners on GitHub Team and Enterprise Cloud only.
- GitHub Docs, GitHub Actions billing: self-hosted runners free, larger runners and included compute, public repositories.
- GitHub Changelog, Ubuntu 26 generally available and latest migration (September 17, 2026).
- actions/runner-images, #14748 "
ubuntu-latestlabel will use Ubuntu 26.04 in November 2026", #14254 (Ubuntu 22.04 deprecation and retirement), #15202 (jobs ended with "runner received a shutdown signal"), #15238 (the 4-core runner's disk). - actions/runner-images, the available images table, the Ubuntu 24.04 readme and the Ubuntu 26.04 readme.
- GitHub Docs, Secure use reference: self-hosted runners and public repositories.
Updated November 9, 2026