Open source · Apache-2.0

GitHub Actions runners in your own AWS account.

hatchrun starts a fresh EC2 instance for every job and terminates it when the job ends. Your instances, your VPC, your prices. A job starts about 30 seconds after launch.

boot timeline · t4g.medium · ap-south-1

  1. 0.0sinstance launchedt4g.medium, arm64
  2. 6.2skernel startedUbuntu 26.04 arm64
  3. 18.2shatchrun-agent startedrunner config claimed
  4. 24.0srunner connectedgithub.com
  5. 29.5sjob runningsmoke
Measured on the hatchrun runner image.
~30 sfrom launch to the first step
1job per instance, then it terminates
0inbound ports open on runners
17AWS regions with ready images

Fast boot

Boot is paid on every job, so we made it short.

Launch to job start, same instance type, same smoke test. The runner image skips cloud-init, reads the runner's files ahead of time and starts Docker while the runner connects to GitHub.

Ubuntu cloud image71 s
hatchrun image29 s

How it works

Three steps, then change one line.

  1. 01

    Install the GitHub App

    On your organization. It lets hatchrun register just-in-time runners for your jobs.

  2. 02

    Launch the stack

    One CloudFormation stack creates the IAM role, launch template and security group in your account.

  3. 03

    Point jobs at hatchrun

    Each queued job gets its own instance, which runs the job and terminates.

.github/workflows/ci.yml
jobs:
  test:
    runs-on: hatchrun-linux-arm64
    steps:
      - uses: actions/checkout@v7
      - run: make test

Why hatchrun

Self-hosted runners without running the fleet yourself.

Pricing

Free during the beta.

You pay AWS for the instances your jobs use. After the beta, the hosted control plane becomes a flat subscription per GitHub organization. Self-hosting stays free.