Windows runners
Windows Server runners on EC2, from Flex labels or Fleet runner definitions.
Windows self-hosted runners are available since v2.4.0, and are ~6x cheaper than the official GitHub Actions Windows runners on spot, and about 3x cheaper on-demand (for example on the m8i family). See pricing for current rates.
Flex
Select a Windows image and x64 EC2 family in the job label:
jobs: build: runs-on: runs-on=${{ github.run_id }}/image=windows25-full-x64/family=m8iFleet
Publish a Windows runner fleet in Terraform and target the fleet label:
runners = { windows = { family = ["m8i.large"] image = "windows25-full-x64" }}
fleets = { windows = { runner = "windows" }}jobs: build: runs-on: runs-on/fleet=windows/env=productionDefault images#
| Image | Architecture | Description |
|---|---|---|
windows22-full-x64 | x64 | Windows Server 2022, mostly compatible with the official Windows 2022 GitHub runner image. |
windows25-full-x64 | x64 | Windows Server 2025, mostly compatible with the official Windows 2025 GitHub runner image. |
windows22-base-x64 | x64 | Base Windows 2022 image — boots faster, no preinstalled software. |
windows25-base-x64 | x64 | Base Windows 2025 image — boots faster, no preinstalled software. |
Example#
name: Windows
on: workflow_dispatch:
jobs: default: runs-on: runs-on=${{ github.run_id }}/image=windows22-full-x64/family=m8i steps: - uses: runs-on/action@v2 - name: Checkout uses: actions/checkout@v7 - name: Check current dir and env variables run: | dir . echo $env:USERNAME echo $env:RUNS_ON_RUNNER_NAME - name: Logs run: | Get-Content -Path "C:\runs-on\output.log" - name: Users run: | Get-LocalUser | Format-Table -AutoSize Name,Enabled,PasswordLastSetInspecting agent logs#
On Windows runners, the RunsOn agent output is stored in C:\runs-on\output.log. Those logs are also shipped to the CloudWatch log group for EC2 instances.
Limitations#
- Windows runners are slow to boot (~1min for base images, ~2-3min for full images). Warm pools can reduce this to 20-30 seconds.
- Hyper-V-dependent workloads require explicitly opting into
nested-virton supported x64 families such asm8i. - Some legacy or easily-installable software has been removed to ensure faster boot times and lower disk usage.