Windows self-hosted runners
Windows self-hosted runners for GitHub Actions are available since v2.4.0.
RunsOn Windows runners are ~10x cheaper than the official GitHub Actions Windows runners (for instance when using the m7i family).
Pricing
Section titled “Pricing”The table below shows the per-minute prices of various runner types using EC2 instances launched by RunsOn, against comparable official managed GitHub runners. Cost includes compute + storage using the default RunsOn stack parameters. Networking costs can vary depending on your usage but all ingress traffic on AWS is free. Most users can significantly reduce egress traffic by using the Magic Cache feature, as well as ECR for storing docker images.
$/min, us-east-1 spot prices, for the instance type selected at the time of the calculation. Prices can vary based on time of day, region, and instance type selected. Savings are higher if you include the speed gains (your jobs will consume less minutes) or use previous-generation instance types.
Default images
Section titled “Default images”You can opt into a specific image by setting the image label in your workflow.
| Image | Description |
|---|---|
| windows22-full-x64 | Windows2022 x64 image mostly compatible with official Windows2022 GitHub runner image |
| windows25-full-x64 | Windows2025 x64 image mostly compatible with official Windows2025 GitHub runner image |
| windows22-base-x64 | Base Windows2022 x64 image, boots faster but has no preinstalled software |
| windows25-base-x64 | Base Windows2025 x64 image, boots faster but has no preinstalled software |
To use them, you need to reference the image you want to use and an instance family that supports Windows:
jobs: build: runs-on: runs-on=${{ github.run_id }}/image=windows22-full-x64/family=m7iExample
Section titled “Example”name: Windows
on: workflow_dispatch:
jobs: default: runs-on: runs-on=${{ github.run_id }}/image=windows22-full-x64/family=m7i steps: - name: Checkout uses: actions/checkout@v6 - 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
Section titled “Inspecting agent logs”On Windows runners, the output of the RunsOn agent is stored in the C:\runs-on\output.log file.
Those logs are also shipped to the CloudWatch log group for EC2 instances.
Limitations
Section titled “Limitations”- Windows runners are quite slow to boot (~1min currently for base images, ~2-3min for full images). Using warm pools can help reduce this to under 20-30 seconds.
- Windows images are lacking the Hyper-V framework and related tooling, because virtualization on AWS is only available on bare-metal instances.
- Some legacy or easily available through actions software has been removed to ensure faster boot times and lower disk usage.