RunnerDeck logo RunnerDeck Community
View on GitHub
local-only · single machine · zero setup

A local dashboard for your
self-hosted GitHub Actions runners

See their real GitHub-reported status, see whether the local process is actually running, tail logs live, and start/stop/restart a whole pool, one at a time or all at once. No hand-editing pidfiles, no SSHing in to run ps aux | grep.

Plain PHP, no framework, no build step, no Composer dependencies. A bit of vanilla JS. That's it.

RunnerDeck dashboard showing stat cards, CPU/RAM history charts, and a table of runners
A runner actively running, with live CPU and memory usage The Add Runner dialog The scope, org, repo, and label settings dialog

What it actually does

No agent, no cloud service, no telemetry. It reads the same files and calls the same GitHub API your terminal would.

Real local process state

Reads each runner's .runner config and runner.pid directly, with a live /proc (or ps/lsof on macOS) scan as a fallback. A runner never goes silently "invisible" just because its pidfile went stale.

Zero manual pre-setup

Starting an unconfigured slot downloads the official runner package for your OS/arch, checksum-verifies it, requests a fresh registration token, and runs config.sh. The same flow you'd do by hand, done for you.

Fails closed, not open

Before any Stop, Rename, or Delete, it checks GitHub's busy flag and asks for confirmation if the runner is mid-job, or if that status can't be verified at all.

Add, rename, delete

Give a runner its own GitHub-registered name, rename it later (deregisters and re-registers cleanly), or delete it permanently. Binaries, config, and logs included.

Live CPU/RAM, honestly

Per-runner usage via ps, plus a rolling one-hour pool-wide history chart backed by a small local SQLite file. No fabricated trends. If there's no data, it says so.

Org or single-repo scope

Manage runners across a GitHub org you admin, or scope everything to one repo you own. No org access required, configurable straight from the UI with a first-run setup screen.

Optional login for remote access

Localhost-only with no login by default. Want to reach it from another device? bin/setup-totp.php adds an authenticator-app code gate — put a TLS-terminating reverse proxy in front and you're covered.

Runs on what you're already on

Modern versions of Linux, macOS, and Windows, not every version ever shipped. See the README for the exact version floors.

PlatformSupportNotes
Linux Native PHP 8.1+ with posix/pcntl. CI-tested on Ubuntu (latest + 22.04) and a dedicated Alpine/musl smoke test.
macOS Native Process liveness falls back to ps/lsof (no /proc on Darwin). CI-tested on macOS latest + 14.
Windows Via WSL2 run.ps1 forwards into WSL2, a real Linux kernel, so it inherits the Linux support above.
Docker docker compose up Alternative to installing PHP or WSL2 at all — docker compose up --build. CI-tested build + boot on every push.

Community & Cloud

RunnerDeck itself is free and stays that way. Cloud is for teams who'd rather not run the dashboard themselves.

Free · open source

Community Edition

What's on this page. Self-hosted and local-only, MIT licensed. It runs on your own machine and talks to your own GitHub account — nothing leaves it.

  • Full runner lifecycle: add, start, stop, rename, delete
  • Live CPU/RAM, uptime, and a local history chart
  • Org or single-repo scope
  • No telemetry, no account required
Get started
Paid · cloud-hosted

Cloud

A hosted version of RunnerDeck for teams managing runners across multiple machines, with nothing to install or keep running yourself.

  • Managed, always-on dashboard — no server to babysit
  • Multi-machine, multi-org runner fleets in one view
  • Early access is by direct conversation, not a signup form
Get in touch

Quickstart

No .env required to get started. The dashboard walks you through setup on first load.

# clone and run, no build step, no composer install needed
git clone https://github.com/AnikethTS/RunnerDeck.git
cd RunnerDeck
./run.sh                    # binds 127.0.0.1:8090

# open http://127.0.0.1:8090/, pick org or repo scope on the setup screen

# or, no PHP install needed:
docker compose up --build