Repolode
kunchenguid

kunchenguid/runner-up

Self-hosted GitHub Actions runners across your own Linux, Mac and Windows machines, with a fresh container, VM or account for each job.

Open-source alternative to:GitHub Actions hosted runners

Stars
284
Forks
21
Open issues
2
Last commit
2 days ago

What is it?

runner-up runs GitHub Actions jobs on machines you already own instead of GitHub's hosted runners. A single coordinator connects to GitHub through runner scale sets, watches waiting jobs, and assigns each one to a free place on one of your machines. Each job gets a fresh Docker container or KVM virtual machine on Linux, a fresh tart clone or Apple container guest on a Mac, or a fresh Windows account or Hyper-V virtual machine on Windows, and that environment is removed when the job ends. Places can also run jobs directly on the host.

The coordinator reaches each machine over SSH and needs only SSH access, not a Kubernetes cluster. It tracks each machine's cores and memory, reserves room for the machine's owner, and orders waiting jobs by configurable rules across repositories. Pull requests from forks are refused by default. Running jobs survive a coordinator restart, and a machine whose agent becomes unreachable is paused until it responds again.

The project is young and documents its status per provider: Docker and KVM on Linux and tart and host places on a Mac have run real jobs, while Hyper-V, Apple container and Windows account places are marked experimental. It depends on GitHub's runner scale set API, which GitHub still labels as preview.

Key features

  • 01Runs each job in a fresh Docker container, KVM VM, tart clone, or Windows account that is removed afterward.
  • 02Connects to machines over SSH, with no Kubernetes cluster required.
  • 03Splits each machine's cores and memory into places, reserving room for its owner.
  • 04Orders waiting jobs across repositories with configurable rules.
  • 05Refuses jobs from fork pull requests by default.
  • 06Keeps running jobs alive through a coordinator restart.

Use cases

  • Replacing paid GitHub-hosted runner minutes with spare Linux or Mac machines.
  • Running macOS build and signing jobs on a Mac you already own.
  • Running CI jobs on idle office or home PCs without managing a Kubernetes cluster.
  • Giving each CI job an isolated environment on your own hardware.

Quick start

  1. 1

    Install runner-up with Go

    go install github.com/kunchenguid/runner-up@latest
  2. 2

    Choose the repository to serve and the Linux pool label

    runner-up init --repo you/app --pool my-linux
  3. 3

    Add a machine reachable over SSH

    runner-up machine add box --ssh ci@box
  4. 4

    Check the setup and start the coordinator

    runner-up check-config && runner-up serve

Things to know

  • The coordinator runs only on Linux and macOS, not Windows.
  • Runner scale sets are still a preview on GitHub's side, so changes there can break it.
  • Hyper-V, Apple container, Windows account, borrowing and draining are experimental and may change between releases.
  • The project is young, and some providers have not yet run real jobs.

In collections

Topics

FAQ

What is runner-up?
Self-hosted GitHub Actions runners across your own Linux, Mac and Windows machines, with a fresh container, VM or account for each job. runner-up runs GitHub Actions jobs on machines you already own instead of GitHub's hosted runners. A single coordinator connects to GitHub through runner scale sets, watches waiting jobs, and assigns each one to a free place on one of your machines. Each job gets a fresh Docker container or KVM virtual machine on Linux, a fresh tart clone or Apple container guest on a Mac, or a fresh Windows account or Hyper-V virtual machine on Windows, and that environment is removed when the job ends. Places can also run jobs directly on the host.
Is runner-up free to use? What license does it have?
runner-up is open source under the MIT license. Check the license terms before using it in commercial products.
Is runner-up still maintained?
Actively maintained. The last commit to runner-up was on Nov 6, 2026.
What can I use runner-up for?
Replacing paid GitHub-hosted runner minutes with spare Linux or Mac machines. Running macOS build and signing jobs on a Mac you already own. Running CI jobs on idle office or home PCs without managing a Kubernetes cluster. Giving each CI job an isolated environment on your own hardware.
How do I install runner-up?
Install runner-up with Go: go install github.com/kunchenguid/runner-up@latest Choose the repository to serve and the Linux pool label: runner-up init --repo you/app --pool my-linux Add a machine reachable over SSH: runner-up machine add box --ssh ci@box Check the setup and start the coordinator: runner-up check-config && runner-up serve
Where can I get runner-up?
The source code and installation instructions are on GitHub: https://github.com/kunchenguid/runner-up

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects