> ## Documentation Index
> Fetch the complete documentation index at: https://boxrouter.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose a Runner

> Look up the labels, sizes, preinstalled tools, and time limits of a BoxRouter Actions runner.

A BoxRouter runner is a new Ubuntu 24.04 x64 sandbox for one job. Set `runs-on` to one BoxRouter label and BoxRouter picks a provider that can supply at least that many CPUs and that much memory.

## Runner Labels

Use exactly one BoxRouter label per job. Labels ignore letter case. GitHub's standard `self-hosted`, `linux` and `x64` labels are allowed beside it.

| `runs-on` | CPU Floor | Memory Floor |
| - | -: | -: |
| `boxrouter-ubuntu-24.04-2` | 2 vCPU | 4096 MiB |
| `boxrouter-ubuntu-24.04` (default) | 4 vCPU | 8192 MiB |
| `boxrouter-ubuntu-24.04-8` | 8 vCPU | 8192 MiB |
| `boxrouter-ubuntu-24.04-16` | 16 vCPU | 32768 MiB |

Append `-full` to any of these labels, as in `boxrouter-ubuntu-24.04-full`, to request the full image profile on the same size.

```yaml theme={"theme":"css-variables"}
jobs:
  test:
    runs-on: boxrouter-ubuntu-24.04
```

The sizes are floors, so identical labels can land on different hardware. BoxRouter never rounds an unsupported size to another one; it refuses the job. Ubuntu 26.04, a `-4` suffix and a floating `latest` label are unsupported. The [runner catalog](https://boxrouter.ai/docs/reference/get-actions-runner-catalog.md) is the authority for these labels if this table lags.

### What Works Today

Provider support for each size depends on your connected accounts, so read it live from [Actions readiness](https://boxrouter.ai/docs/reference/get-actions-readiness.md). Each provider lists its `cpu_options`, any `unavailable_shapes` with a reason, and `max_job_minutes`. The same data is under **Runner Sizes And Providers** on the Actions page.

### Ranking and Objectives

The label names the machine only. Your workspace's [Routing settings](https://boxrouter.ai/docs/routing-settings.md) decide which providers may run the job, who pays and the cheapest-or-fastest ranking. A label cannot widen access or change who pays.

## Time Limits

A job runs for up to 6 hours after GitHub assigns it, the same limit as GitHub-hosted runners. Before that, BoxRouter waits up to 5 minutes for a machine to start and pick up the job. GitHub's `timeout-minutes` can end a job sooner and never extends the limit.

Three things can lower the 6 hours:

* A repository policy's `max_runtime_seconds` sets a shorter limit. It can't raise the limit.
* A connected provider account can cap a sandbox's life below 6 hours. `max_job_minutes` in readiness reports the cap, and a job that reaches it ends there. When several accounts can run the job, the job takes the shortest cap among them.
* A job paid with Credits keeps 30 minutes unless every provider that can run it renews the sandbox's life as the job goes. Then the job gets the full 6 hours.

Keep jobs shorter than their limit or split them.

## Actions Runner Image

Every runner starts from one pinned image, separate from the standard sandbox image, and runs a single GitHub runner as the non-root user `runner`.

| Tool | Version |
| - | -: |
| Node.js (default) | 22.23.4 |
| npm | 10.9.9 |
| Corepack | 0.36.0 |
| Python | 3.12.3 |
| Git | 2.43.0 |
| curl | 8.5.0 |
| jq | 1.7 |
| GitHub CLI | 2.102.0 |
| GCC | 13.3.0 |
| GNU Make | 4.3 |
| Python in the tool cache | 3.15.2 |
| Go in the tool cache | 1.24.13, 1.26.10 |
| Node.js in the tool cache | 22.23.4, 24.22.2 |

The image is smaller than a GitHub-hosted one, so install what is missing:

| If the Workflow Needs | Do This |
| - | - |
| Another Node.js or Python version | `actions/setup-node` or `actions/setup-python`; the tool cache covers common versions |
| A pinned pnpm or Yarn | Set `packageManager` in `package.json` and use Corepack |
| Rust, Android SDK, or other toolchains | Install them in a step and allow for the time and disk |
| Docker, Buildx, Compose, or service containers | Use the `-full` label |

Docker is not in the default image, so `docker build`, container actions, and service containers fail there.

The full image adds Docker, Java, Rust, and the Android SDK. Append `-full` to a runner label to request it, as in `boxrouter-ubuntu-24.04-full`, on workspaces whose policy allows the full profile. Until BoxRouter verifies a runner image for that profile, [Actions readiness](https://boxrouter.ai/docs/reference/get-actions-readiness.md) reports `profile_unavailable` and jobs that use it stay queued. [Image Contents](https://boxrouter.ai/docs/image-contents.md#actions-runner-image) lists the versions in both.

Disk space varies by route; use `df -h` to check free space before a large build.

## Limits

| Limit | Value |
| - | - |
| Platform | Ubuntu 24.04 on x64. No macOS, Windows, or Arm. |
| Repositories | Private only. |
| Triggers | Push, manual or API dispatch, and pull requests from the same repository. |
| Sandboxes | One per job. Cleanup is requested when the job ends; check the [run](https://boxrouter.ai/docs/actions/runs.md) for confirmation. |
| Concurrency | 50 active jobs per workspace; extra jobs wait on GitHub and start as others finish. |
| GitHub | github.com only, with repository-level runners in the default runner group. |

A matrix starts one sandbox per cell, within the concurrency limit. `actions/cache` and artifacts live in GitHub and work as on any runner; nothing stays on the sandbox between jobs.

### Set Worker Counts Yourself

On providers that enforce CPU with a quota, `nproc` and `os.availableParallelism()` report the host's CPU count instead of your runner's size. Tools that use that count start more workers than the quota lets run, so the provider throttles them.

Set the count to the runner size. For a runner with 2 vCPUs, use:

* `vitest run --maxWorkers=2`
* `jest --maxWorkers=2`
* `make -j2`
* `pytest -n 2`
* `GOMAXPROCS=2`

## Next Steps

> [card] [Move a Workflow](https://boxrouter.ai/docs/actions/migrate.md)
>
> Pick a label for each job.

> [card] [Troubleshoot Actions](https://boxrouter.ai/docs/actions/troubleshooting.md)
>
> Fix a refused label or a queued job.

> [card] [Find a Run](https://boxrouter.ai/docs/actions/runs.md)
>
> Follow a run, its sandbox, and its cost.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.