Skip to content

Zoomies and GARM

GARM (GitHub Actions Runner Manager) is the closest project to Zoomies in shape, and an honest comparison starts there: both are a single binary that keeps its state in SQLite, both have a built-in web UI, and neither needs Kubernetes. If you are choosing between them, the shared design is not the difference.

This page was written from GARM's public documentation, reviewed in September 2026. GARM's README warns that its main branch can describe work that is not in a stable release, so check a release's own documentation before relying on a feature here.

Side by side

GARM Zoomies
Model and licence Self-hosted; Apache-2.0 Self-hosted; AGPL-3.0
Shape One binary, SQLite, a web UI One binary, SQLite, a web UI
Where runners come from External providers, which create and delete the machines Containers on hosts you add, or machines rented through a provider, with Proxmox VE first
How it learns of jobs Webhook-driven pools, and native scale sets workflow_job webhooks, with polling as a fallback
Forges GitHub, GitHub Enterprise Server and Gitea GitHub. Enterprise Server is configurable but not yet tested
Moving workflows onto it Not verified A migration wizard that opens one pull request per repository
Machines at home or behind NAT Not verified Agents dial out, so nothing is opened; Tailcat brings in private hosts

When GARM is the better choice

  • You use Gitea, or run GitHub Enterprise Server in production and want a tool that already documents it.
  • You want the provider model. GARM creates and deletes machines through external providers, so a cloud or hypervisor with a provider is an option today. Zoomies' provider contract is newer and has fewer providers.
  • You want native scale sets. GARM describes them; Zoomies uses webhooks and a fallback poller, and is still assessing scale sets.

When Zoomies is the better choice

  • You are moving a lot of repositories. The migration wizard shows the diff and opens one pull request per repository, and it can give a pool a label you choose so static runners are replaced without editing workflows.
  • Your capacity is private hardware. An agent on a home-lab box or an office machine joins by dialling out, with no inbound rule. See runners in your home lab.
  • You want to run it from a browser, with reasons. The UI says in plain words why the scheduler did what it did and keeps an audit log of every change.

Neither claim is a statement that Zoomies runs faster or isolates better; this project has not measured either against GARM.

Moving between them

Pools and runners are named by label, so the two can run side by side when their labels differ. Point a workflow's runs-on at one tool's label or the other, one repository at a time, and retire the old pool once nothing targets it.

Where to go next