dynamic instance selection
The instance is the job. The label is a query — family, cpu, ram, image, volume — resolved against live spot capacity at launch. No pools to size, no scale sets to babysit.
You tuned ARC's autoscaler, fought the controller, and gave up on Windows. RunsOn is the version that just runs: ephemeral EC2 in your own AWS account, one CloudFormation stack, any instance per job.
the label is a query — pick constraints, resolved at launch
# the label is a query — each line one constraint jobs: build: runs-on: - runs-on=${{ github.run_id }} - cpu=16 - family=c7i - image=ubuntu24-full-x64 - extras=s3-cache steps: [...]
cheaper than GitHub-hosted runners — you pay AWS directly, no per-minute markup.
do the math on your bill →jobs every day — ephemeral runners launched and destroyed, one box per job.
vCPUs daily — from 1 to 896 per runner, across x64 · arm64 · gpu.
The runner is the easy 20%. The other 80% is why you're reading this page — RunsOn ships it as defaults, not as a weekend project.
The instance is the job. The label is a query — family, cpu, ram, image, volume — resolved against live spot capacity at launch. No pools to size, no scale sets to babysit.
Flip extras=s3-cache and
actions/cache is backed by an S3 bucket in
your account — same region, same VPC, no 10GB ceiling. Nothing else
in the workflow changes.
KVM for Linux, Hyper-V for Windows — nested virtualization is just a label. Android emulators, VM-based e2e suites, Windows containers: they run.
+ docker layer caching · per-job cost reporting · spot→on-demand retry · static egress IPs · warm pools · byo AMIs
The Kubernetes cluster, the controller, the autoscaler — then the same job on ephemeral EC2 in your own account. Watch the moving parts fall away.
“Saved around 75% of our costs, and tests now run 5× faster on gigantic spot instances.”
Tim Dumol — Founding Engineer, Expedock
“After benchmarking a lot of tools, it's the best. Costs divided by 4 — thousands of jobs per day.”
Corentin Smith — CTO, Dashdoc
“Costs down 70%, CI runtime improved up to 80%. A clear win with virtually no downside.”
Théophile D. de Segonzac — Lead DevOps, Lingoda
One CloudFormation template — or the official Terraform module. VPC, cache bucket, IAM, and the scheduler come up together.
Install the GitHub App on your org. RunsOn registers ephemeral runners on demand — nothing stays running idle.
Swap a single line in your workflow. Every existing action, cache step, and secret keeps working untouched.
# the entire migration, in one diffruns-on: ubuntu-latestruns-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-x64