Skip to content

Runner types

Here, you will learn how to set your runner CPU, RAM, instance type FAMILY and HDD size at runtime, depending on your workflow requirements.

This flexibility allows you to optimize for performance and cost efficiency.


You can specify every aspect of your RunsOn runners using additional runs-on labels:

cpuNumber of vCPUs.
Can accept muliple values, e.g. cpu=1+2+4
ramAmount of memory, in GB.
Can accept multiple values, e.g. ram=8+16
familyInstance type family.
Can either be the full name (family=c7a.large), or a partial name (family=c7).
Can accept multiple values (family=c7+c6)
hddDisk size, in GB

For instance, if I want a runner with 4 CPUs, 16 RAM, in the instance type family m7a, and with a disk size of 100GB:

job: Test
runs-on: runs-on,cpu=4,ram=16,family=m7a,hdd=100

RunsOn also supports default and custom runner configurations using the runner label. See below 👇.

Default runners types

RunsOn comes with the following preconfigured runner types:

runnercpufamily$/min (spot)$/min (on-demand)$/min (github)RunsOn vs GitHub
1cpu-linux1m7a, m7g0.00060.0012-
2cpu-linux2m7a, m7g0.00100.00220.0088x cheaper
4cpu-linux4m7a, m7g, c7a, c7g0.00210.00410.0168x cheaper
8cpu-linux8c7a, c7g, m7a, m7g0.00390.00760.0328x cheaper
16cpu-linux16c7a, c7g, m7a, m7g0.00720.01450.0649x cheaper
32cpu-linux32c7a, c7g, m7a, m7g0.01340.02810.12810x cheaper
48cpu-linux48c7a, c7g, m7a, m7g0.01760.0421-
64cpu-linux64c7a, c7g, m7a, m7g0.02150.05570.25612x cheaper

An example runs-on definition would then be:

job: Test
runs-on: runs-on,runner=16cpu-linux

If no runner label is provided, and no cpu, ram, hdd, family labels are set, then RunsOn will default to using the 2cpu-linux runner.

job: Test
# this is equivalent to runs-on: runs-on,runner=2cpu-linux
runs-on: runs-on

Custom runner types

Default runners are fine for standard workflows, but sometimes you may need custom runner types. In that case, you can define your own custom runner types using the special .github/runs-on.yml config file in the repository where you want those new runners to be available:

cpu: 1
family: ["t3"]
cpu: 32
hdd: 200
family: ["c7a", "m7a"]

And then in your workflows:

runs-on: runs-on,runner=fast

Note: spot and ssh labels cannot be redefined within a runner definition. They have to appear as standalone labels.