EraInfra

EraInfra runs GitHub Actions jobs on Linux, Mac and Windows machines you already own. Each job gets a fresh, isolated environment that is destroyed afterwards. Machines connect out to the control plane, so none of them needs a public IP.

Who it is for

Teams and individuals with spare hardware, such as a home server, a Mac mini or office machines, who want to run CI on it without giving every job a long-lived host. Workflows change one line: runs-on: rc-linux-js.

How it compares

  • GitHub-hosted runners need nothing to operate. EraInfra can send a run to them when no machine of yours is free.
  • A plain self-hosted runner reuses the same host between jobs. EraInfra prepares an environment for one job and removes it on every exit path, including Worker crashes.
  • Actions Runner Controller is the better choice when your whole fleet already runs Kubernetes. EraInfra targets machines without a cluster, including ones behind NAT or a home router.

What works today

PlatformExecutorIsolation
Linux x64 and ARM64FirecrackerOwn guest kernel per job. Use this for untrusted code. Needs KVM.
Linux x64 and ARM64DockerShares the host kernel. Only for jobs that trust each other.
Apple Silicon macOSTartCopy-on-write VM per job, two at a time by default.
Windows x64Hyper-VReady once the machine proves Hyper-V works.

The project's own fleet has run its Linux jobs in Firecracker microVMs since 20 August 2026.

Limits

  • The control plane, scheduler and dashboard run on Convex, so you need a Convex deployment.
  • Firecracker Workers need KVM and dedicated runtime storage.
  • macOS Workers run at most two VMs by default, to stay within Apple's virtualization license.

Get started

  1. Deploy the Convex backend and dashboard from the repository.
  2. In the dashboard, open Machines, choose Add machine, and run the generated install command on each host.
  3. Point a workflow at a Profile with runs-on.

Read the setup guide on GitHub