mintwork / runway
Run GitHub Actions jobs on your own AWS compute
Pick the machine per job with one runs-on line: a Firecracker MicroVM, an EC2 Spot instance, a Fargate task or a Lambda function, in your account, ended the moment the job finishes.
npx -y @mintwork/runway setup --owner <your-org> --region eu-central-1
npx -y @mintwork/runway status # health, images, recent runners
The problem
GitHub's hosted runners are easy until you need more: a bigger machine, arm64, access to your VPC, or a bill that doesn't grow by the minute. Self-hosting usually means a fleet of always-on instances, a Terraform module to maintain, and runners that leak state from one job to the next.
runway puts a small dispatcher in your AWS account. Every job that asks for runway gets a machine of its own, launched for that job, registered as a single-use runner, and ended when the job finishes. Nothing runs, or bills, between jobs.
What it does
Four compute types
Lambda MicroVMs (Docker included, ~25 s to start), EC2 on-demand or Spot, ECS Fargate tasks and Lambda functions, x64 or arm64, any size.
Chosen per job
runs-on: [runway, ec2, spot, arm64, 8cpu]. Unknown labels are refused with a "did you mean", never silently ignored.A fresh machine every time
One job per MicroVM, instance, task or Lambda sandbox, with a just-in-time runner token. Nothing is reused.
Nothing exposed
The only endpoint is the webhook, open to GitHub's IP ranges alone. The GitHub App is created from your terminal, and its key goes straight to SSM in your account.
Falls back instead of failing
No capacity or quota? The job moves to the next compute type, or waits and retries for up to 90 minutes, so a burst of jobs queues instead of failing.
Nothing to babysit
Images rebuild when GitHub ships a new runner, a sweeper ends anything left behind, and
destroyremoves everything runway made.
Set up in one command
You need AWS credentials that can create a CloudFormation stack, owner rights on the GitHub organization, and Node 22+. Setup takes about 10 minutes: it deploys the stack, opens a local page that creates runway's GitHub App, and builds the runner images.
npx -y @mintwork/runway setup --owner <your-org> --region eu-central-1Then use it in any workflow:
jobs:
test:
runs-on: [runway, microvm] # Firecracker VM, Docker included
build:
runs-on: [runway, ec2, spot, 8cpu] # EC2 Spot, on-demand if Spot is short
lint:
runs-on: [runway, lambda] # Lambda function, billed per millisecondYour tools on the runners
The images are small on purpose. Use actions/setup-node and friends per job, or bake your tools into every image with a script, and change it whenever you like:
npx -y @mintwork/runway update --runner-tools ./runner-tools.shHow is this different?
RunsOn runs excellent EC2 runners in your account, with a commercial licence for companies. terraform-aws-github-runner is the established module for large EC2 fleets. runway is MIT licensed, one command to set up, and adds MicroVMs, Fargate and Lambda, picked per job from runs-on.
Open source, MIT licensed
Built in CI and published to npm with signed provenance. The full docs, changelog and issues are on GitHub.