# Zoomies > Free, open-source self-hosted GitHub Actions runners with ephemeral jobs, a live web UI, autoscaling across your own hosts and a path off static runners. Zoomies is free and open source under the AGPL-3.0. It is a single Go binary that watches a GitHub organisation or a repository on a personal account for queued Actions jobs. It starts one ephemeral runner per job on a machine you own and destroys it when the job finishes. SQLite for state, no Kubernetes and no database server, and a live web UI for the whole fleet. Runner images for Ubuntu, Debian, Fedora and Rocky Linux, on x86-64 and arm64. See the home page's qualification section for what has been tested and the current limits. ## Documentation - [Home](https://zoomies.sh/): Run GitHub Actions on your own machines with fresh ephemeral runners, a live web UI and autoscaling. One Go binary, SQLite, no Kubernetes. - [Documentation](https://zoomies.sh/start-here/): Learn the basics, run your first GitHub Actions job, operate a runner fleet and use Eli or MCP to diagnose builds. Find advanced configuration, CLI, API and monitoring references. ### Get started - [Understand the basics](https://zoomies.sh/fundamentals/): Understand how GitHub Actions jobs reach Zoomies runners, what controllers, agents, hosts and pools do, and which labels belong in your workflow. - [Run your first job](https://zoomies.sh/quickstart/): Install Zoomies and run your first job on a self-hosted ephemeral runner: one curl command, one GitHub App, no Kubernetes, and a working fleet in minutes. - [Docker Compose](https://zoomies.sh/compose/): Running Zoomies with Docker Compose: the compose file in the repository, the three values .env needs, what moves to the browser, and how to upgrade. - [Deploying on a PaaS](https://zoomies.sh/paas/): Deploy the Zoomies controller from source on Coolify, Dokploy, Railway or any Nixpacks platform, then join the hosts that actually run your jobs. - [Deploying on InstaPods](https://zoomies.sh/instapods/): Run a Zoomies controller and a runner host on InstaPods: two pods, a release binary each, and the GitHub Actions jobs running as processes on a pod with no public address. - [One-click deployment](https://zoomies.sh/marketplace/): Deploy Zoomies from a VPS provider's marketplace: what the one-click install sets up, how it gets a certificate without Cloudflare, and the first-run journey. ### Run your fleet - [Web UI tour](https://zoomies.sh/ui/): A page-by-page tour of the Zoomies web UI: Overview, pools, runners, jobs, hosts, providers, Eli conversations, PR repairs and settings, in light and dark. - [Hosts and pools](https://zoomies.sh/hosts-and-pools/): How a pool decides what runners to make and a host decides whether it can make them: labels, selectors, capacity, and why a pool sometimes has nowhere to run. - [Migrating repositories](https://zoomies.sh/migration/): Move workflows off GitHub-hosted runners: the migration wizard rewrites runs-on across repositories and opens one pull request each, showing the diff first. - [Backup and restore](https://zoomies.sh/backup-and-restore/): The two files a Zoomies controller is made of, how to copy them safely by schedule, from settings or by hand, and how to restore the fleet here or elsewhere. - [Upgrading](https://zoomies.sh/upgrading/): Update the controller and agent hosts from the Zoomies web UI, use manual or automatic rollouts, or upgrade locally with the supported CLI and installer. - [Two-step verification](https://zoomies.sh/two-step/): Add an authenticator-app code to your Zoomies sign-in, keep the recovery codes safe, and see what an administrator does when someone loses their phone. - [Public view](https://zoomies.sh/public-view/): Let anyone read a Zoomies fleet without signing in, for a public demo or a project that shows its CI fleet on purpose. Every change still needs an account, and nothing about the people who run it is shown. - [Host health and tuning](https://zoomies.sh/host-health/): Read host OS health reports, approve individual tuning changes, and restore recorded settings with Zoomies doctor and tune. - [Troubleshooting](https://zoomies.sh/troubleshooting/): Diagnose fleet problems and failed or slow workflow jobs with Eli, MCP and the CLI. Follow the evidence into fixes, PR repairs and measured optimisation. - [A job stuck in the queue](https://zoomies.sh/queued-job/): Diagnose a queued GitHub Actions job: check labels, runner groups, Zoomies pool limits, host capacity, image startup and registration in order. ### Scale and tune - [Advanced operations](https://zoomies.sh/advanced/): Plan runner capacity, measure queue and startup time, tune caches and elastic resources, rehearse recovery and automate a Zoomies fleet with scoped access. - [Size classes and automatic pools](https://zoomies.sh/auto-pools/): Send light jobs to small hosts and heavy jobs to big ones, with pools that adjust as hosts come and go. Off by default; your own pools are left alone. - [Persistent caches](https://zoomies.sh/persistent-caches/): Keep Go, npm, pip, Maven and Docker build caches between ephemeral runners. Configure Zoomies cache scopes and reuse builds safely across jobs and hosts. - [Elastic CPU zoomies](https://zoomies.sh/elastic-cpu/): Lend idle host CPU to busy GitHub Actions runners while reserving capacity for queued jobs. Configure Zoomies CPU boosts and read their live status. - [Elastic memory](https://zoomies.sh/elastic-memory/): Use spare host memory to raise a runner's limit, with swap as a last resort. Learn the observation mode, resource boundaries and limits of protection against out-of-memory failures. - [Private hosts with Tailcat](https://zoomies.sh/private-hosts/): Turn your home lab into GitHub Actions runner capacity. Connect private hosts over built-in Tailcat tunnels: no public IPs, port forwarding or Tailscale. - [Proxmox VE](https://zoomies.sh/proxmox/): Let Zoomies clone a VM template on your Proxmox VE cluster when a pool has queued work, and destroy the machine afterwards, with scoped API credentials. ### Assistants and repository checks - [MCP for your AI assistant](https://zoomies.sh/mcp/): Connect an MCP client to live job diagnostics, runner sizing, usage and verified repository source. Start read-only and grant operator actions when needed. - [Eli conversations and PR repairs](https://zoomies.sh/eli/): Ask Eli about failed jobs, queue waits and runner sizing from the Zoomies UI. Choose your model, inspect its evidence and opt into PR repairs when needed. - [Kennel Club](https://zoomies.sh/kennel-club/): Kennel Club checks the repositories your fleet serves for what could hurt it or stop its CI, what it reads from GitHub, and how to waive or read a finding. - [Connect Claude](https://zoomies.sh/connect-claude/): Add your Zoomies controller to Claude as a custom connector by its /mcp address, and sign in through the browser; no pasted tokens. - [AI Context for assistants](https://zoomies.sh/ai-context/): Cut AI input tokens with relevant repository excerpts. Zoomies automates Repomix, verifies it against Git, and serves fresh context via GitHub or MCP. ### Reference - [Configuration](https://zoomies.sh/configuration/): Where Zoomies keeps its settings (the database, a small file and ZOOMIES_* variables), with every key, its default, and the startup warnings for risky settings. - [Command line](https://zoomies.sh/cli/): Every `zoomies` command, what it does and the flags it takes: running the controller and agent, driving a fleet from a terminal, and setting a host up. - [API](https://zoomies.sh/api-surface/): Every REST, SSE and metrics endpoint the Zoomies controller serves, and the role each one needs; the contract both generated clients are built from. - [Architecture](https://zoomies.sh/architecture/): How Zoomies is put together: one Go binary, SQLite, a pure scheduler and outbound-only agents, and why a self-hosted runner controller needs no Kubernetes. - [Naming and platforms](https://zoomies.sh/naming/): How Zoomies names pools, runners and hosts, which runner images it publishes for Ubuntu, Debian, Fedora and Rocky Linux, and what a pool's platform means. - [Security](https://zoomies.sh/security/): The Zoomies threat model, what a self-hosted runner exposes, and what each setting that weakens the safe defaults actually costs. - [Problem codes](https://zoomies.sh/problem-codes/): Every problem code Zoomies can raise, with its severity and what to do about it: the startup validator's findings and the running controller's, in one list. - [Metrics](https://zoomies.sh/metrics/): Every Prometheus metric Zoomies exposes, what it measures and what to alert on: fleet gauges, job counters and startup histograms. - [Runner startup stability](https://zoomies.sh/runner-startup-stability/): How Zoomies keeps runner startup reliable on a busy host: a health probe before admission, a CPU quota during registration, and the settings for both. - [Runtime compatibility](https://zoomies.sh/runtime-compatibility/): Which Docker and Podman setups Zoomies supports, rootful or rootless, on cgroup v1 or v2, what each can enforce, and how to read a runner's measurements. - [Provider contract](https://zoomies.sh/providers/): What Zoomies asks an infrastructure provider to do, what it promises in return, and the rules a second provider must obey: failures, handles, ownership. - [Automation contract](https://zoomies.sh/automation/): Install, configure, monitor and back up a Zoomies runner fleet from scripts. Read the proposed automation contract and its current stability limits. - [Capacity-demand receiver](https://zoomies.sh/capacity-demand-receiver/): The advisory contract that tells another system a Zoomies pool is short of capacity, and what a receiver must do to be safe. - [Dependencies](https://zoomies.sh/dependencies/): Every dependency Zoomies carries, the one-line reason it earns its place, and the two that were deliberately left out. - [UI guidelines](https://zoomies.sh/ui-guidelines/): The design contract for the Zoomies web UI: design tokens, the fixed status colours, the app shell budget, and the accessibility rules every page keeps. ### Choosing Zoomies - [What are self-hosted runners?](https://zoomies.sh/what-are-self-hosted-runners/): What a self-hosted GitHub Actions runner is, how a job reaches one, persistent versus ephemeral runners, autoscaling, security and what you take on. - [Should you self-host?](https://zoomies.sh/should-i-self-host/): What a self-hosted GitHub Actions runner fleet actually has to do, what Zoomies handles, what it leaves to you, and when a managed runner service is the better choice. - [What it costs](https://zoomies.sh/costs/): Does GitHub Actions cost money? Hosted runner pricing, free minutes per plan, the postponed self-hosted charge, and the sums for running your own. - [FAQ](https://zoomies.sh/faq/): What Zoomies costs, what it needs, which platforms it runs on, and what self-hosted runners will and will not protect you from, answered plainly. - [Many repositories](https://zoomies.sh/many-repositories/): Share self-hosted GitHub Actions runners across repositories: where GitHub allows registration, how one fleet serves an organisation, and keeping repos apart. - [Runners in your home lab](https://zoomies.sh/home-lab/): Plan GitHub Actions runners on machines you own: which home-lab hardware suits which jobs, where the controller goes, and what happens when a box is off. - [Runners in Docker](https://zoomies.sh/docker/): Running GitHub Actions runners in Docker: what one runner container gives you, three ways a job can get Docker, and how Zoomies makes an autoscaling fleet. - [Runners without Kubernetes](https://zoomies.sh/runners-without-kubernetes/): Choose between a simple runner, a Docker container, Zoomies and a runner service. Run ephemeral GitHub Actions jobs on your own hosts without a cluster. - [Ephemeral runners](https://zoomies.sh/ephemeral-runners/): What an ephemeral GitHub Actions runner is, why one job per runner keeps CI clean and safer, and how Zoomies registers, runs and destroys one per job. - [Autoscaling runners](https://zoomies.sh/runner-autoscaling/): How Zoomies scales self-hosted GitHub Actions runners with the job queue on your own machines, which settings bound it, and why a queued job still waits. ### Alternatives - [Overview](https://zoomies.sh/alternatives/): Self-hosted GitHub Actions runner controllers compared: ARC, GARM, runscaler, gharp, the AWS Terraform module, Cirun and Zoomies, and which need Kubernetes. - [Compared with ARC](https://zoomies.sh/actions-runner-controller/): How Zoomies compares with actions-runner-controller: what each needs, how each scales and isolates jobs, where each is better, and how to move between them. - [Compared with GARM](https://zoomies.sh/alternatives/garm/): How Zoomies compares with GARM: two single-binary, SQLite-backed runner managers with a web UI, and where each is the better choice. - [Compared with the AWS Terraform module](https://zoomies.sh/alternatives/terraform-aws-github-runner/): How Zoomies compares with the AWS Terraform module for self-hosted runners: an infrastructure-as-code EC2 autoscaler against a host-based fleet controller. - [Compared with TestFlows Hetzner runners](https://zoomies.sh/alternatives/testflows-hetzner-runners/): How Zoomies compares with TestFlows' Hetzner runners: standby cloud servers and cost estimates against a multi-host fleet controller, and when each fits. - [Compared with Cirun](https://zoomies.sh/alternatives/cirun/): How Zoomies compares with Cirun: a managed control plane against free software you run yourself. What each costs, who holds the control plane, when each fits. - [Compared with runscaler](https://zoomies.sh/alternatives/runscaler/): How Zoomies compares with runscaler: two Go binaries that autoscale ephemeral GitHub Actions runners without Kubernetes, and where each is the better choice. - [Compared with gharp](https://zoomies.sh/alternatives/gharp/): How Zoomies compares with gharp, the Actions Runner Pool: two Docker-based pools of ephemeral GitHub runners with dashboards, and where each is better. - [Compared with runner services](https://zoomies.sh/hosted-runner-services/): How running your own runners with Zoomies compares with Blacksmith, WarpBuild, RunsOn and Depot: where jobs run, what each costs, and when each is the better choice. ### About - [Brand](https://zoomies.sh/brand/): The Zoomies identity: the cocker spaniel mark, the wordmark, the colour tokens, and the rules for placing them. - [Privacy](https://zoomies.sh/privacy/): What the Zoomies website and software collect. The software has no telemetry or account; the website counts page views without cookies; the only non-fleet request is a daily release check you can stop. - [Terms](https://zoomies.sh/terms/): The terms Zoomies and its website are offered under: the AGPL-3.0 licence for the software, no warranty, no service to depend on, and where to report a problem. ## Source - [Repository](https://github.com/eyupio/zoomies): the Go controller, the Svelte UI and these docs. - [Full text](https://zoomies.sh/llms-full.txt): the readable pages in one file. Every page also has a Markdown copy at its address plus index.md, for example https://zoomies.sh/quickstart/index.md. - [install.sh](https://zoomies.sh/install.sh): the one-line installer, byte-identical to the one in the repository. - [install.ps1](https://zoomies.sh/install.ps1): the Windows installer, run from an elevated PowerShell window; byte-identical to the one in the repository. - [OpenAPI document](https://github.com/eyupio/zoomies/blob/main/api/openapi.yaml): the REST contract both clients are generated from. - [Catalog of problem codes and checks](https://zoomies.sh/catalog.json): every code Zoomies can raise, with what to do and how to see it worked, as JSON; its schema is beside it at catalog.schema.json. Generated 2026-10-25.