Windows runners for GitHub Actions
Run GitHub Actions jobs on Windows Server 2025 machines in your own AWS account: the label, the sizes, prices beside GitHub's, and what differs from Linux.
A job that says runs-on: superci-windows gets a Windows Server 2025 machine in your own AWS account, for that job alone.
jobs:
test:
runs-on: superci-windows
steps:
- uses: actions/checkout@v5
- run: dotnet testSizes
superci-windows is 4 CPUs and 8 GB. Add parts to the label 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 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-arm64andsuperci-windows-gpuare 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-2025runner, from the public images RunsOn 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 has the whole of it. A job that must not run twice asks for superci-windows-ondemand.
One workflow, both systems
jobs:
test:
strategy:
matrix:
runner: [superci, superci-windows]
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v5
- run: npm test