# Windows runners

A job that says `runs-on: superci-windows` gets a Windows Server 2025 machine in your own AWS account, for that job alone.

```yaml
jobs:
  test:
    runs-on: superci-windows
    steps:
      - uses: actions/checkout@v5
      - run: dotnet test
```

## Sizes

`superci-windows` is 4 CPUs and 8 GB. Add parts to the [label](/docs/labels) for more:

| Label | Machine |
|---|---|
| `superci-windows` | 4 CPUs, 8 GB |
| `superci-windows-8cpu` | 8 CPUs, 32 GB |
| `superci-windows-16cpu` | 16 CPUs, 64 GB |
| `superci-windows-32cpu-ondemand` | 32 CPUs, 128 GB, never a spot machine |

Every Windows machine has a 100 GB disk, or more if the label asks: `superci-windows-200disk`.

## What it costs

Windows machines are spot machines by default, at AWS's spot price for Windows, which includes the Windows licence. A minute on a machine with the memory of GitHub's runner (4 GB for each CPU), with the disk and public address counted in:

| CPUs | GitHub-hosted | AWS spot | AWS on-demand |
|---|---|---|---|
| 2 | $0.010 | $0.0020 | $0.0038 |
| 4 | $0.022 | $0.0037 | $0.0074 |
| 8 | $0.042 | $0.0072 | $0.015 |
| 16 | $0.082 | $0.014 | $0.029 |
| 32 | $0.162 | $0.028 | $0.057 |

AWS's prices are for us-east-1 on 12 October 2026; spot prices move through the day. At 4 CPUs the row is `superci-windows-4cpu`, with 16 GB like GitHub's; `superci-windows` alone has 8 GB. The [calculator](/calculator) works out a month.

## What differs from Linux

- **Only AWS.** Cloudflare and Modal run Linux, so they are passed by for a Windows job.
- **x64, and no GPUs.** `superci-windows-arm64` and `superci-windows-gpu` are refused with a message.
- **It starts more slowly.** A Windows machine took about a minute and three quarters to start when we measured, against about 15 seconds for Linux. For a job of a few seconds, GitHub's own Windows runner is the quicker choice.
- **What a job finds:** Windows Server 2025 with the tools of GitHub's own `windows-2025` runner, from the public images [RunsOn](https://runs-on.com) publishes. RunsOn calls them mostly compatible with GitHub's.
- **GitLab CI jobs** do not run on Windows: SuperCI runs them in Docker, on Linux.

## When AWS takes the machine back

It is the same as on Linux: the job fails at once, and SuperCI runs it again, off spot, once its run has finished. [Spot machines](/docs/spot-machines) has the whole of it. A job that must not run twice asks for `superci-windows-ondemand`.

## One workflow, both systems

```yaml
jobs:
  test:
    strategy:
      matrix:
        runner: [superci, superci-windows]
    runs-on: ${{ matrix.runner }}
    steps:
      - uses: actions/checkout@v5
      - run: npm test
```
