# Buildhound vs ushr

> ushr schedules GitHub Actions jobs on your own Macs and Linux machines, with an open-source agent and a hosted control plane. Buildhound does the same job with a fresh VM for every job and GitHub-hosted as the fallback.

## A month for private repositories

Machines at list prices, cheapest first at three machines. Public repositories are free on Buildhound, and a Buildhound machine counts only on days it runs a job.

| Option | 1 machine | 3 machines | 5 machines |
| --- | --- | --- | --- |
| GitHub's self-hosted runner (registered and kept up by hand) | $0 | $0 | $0 |
| Buildhound Personal (machines you already have) | $10 | $30 | $50 |
| [ushr](https://ushr.io/pricing), checked 16 October 2026 (a host is one machine) | $0 | $49 | $87 |
| Buildhound Team (machines you already have) | $24 | $72 | $120 |

- At 1 machine: ushr costs less here, $0 against $24 for 1 machine on Team. On a personal account, Personal is $10.
- At 3 machines: ushr costs less here, $49 against $72 for 3 machines on Team. On a personal account, Personal is $30.
- At 5 machines: ushr costs less here, $87 against $120 for 5 machines on Team. On a personal account, Personal is $50.

## Choose ushr when

- You want open source you can run yourself; its controller and agent are Apache-2.0.
- One pool should serve several organisations.
- You want the lowest price for a small fleet, with one host free and 3 for $49 a month.

## Choose Buildhound when

- Jobs should keep moving while a machine is offline, with GitHub-hosted as the fallback.
- Linux jobs need their own VM instead of a container on the host.
- Laptops join the Fleet and take jobs only while plugged in and not in use.

## Side by side

ushr's side is from its own pages ([source](https://ushr.io/pricing)), checked 16 October 2026.

### Price

| | Buildhound | ushr |
| --- | --- | --- |
| How it is priced | Flat, per machine. $10 a machine a month on a personal account, $24 in an organisation, counted only on days it runs a job. Public repositories free. | By host. Free for one host and one GitHub account or organisation; $49 a month for up to 3 hosts, then $19 a host. |
| macOS | Your Mac. A fresh macOS VM per job; Apple allows two per Mac. | Your Mac. In a Tart or Lume VM. |
| Linux | Your Mac or Linux box. A fresh Linux VM per job, arm64 on a Mac. | Your machine. In a Docker or Podman container on the host. |
| Windows | Not yet. Windows jobs stay on GitHub-hosted. | Not offered. |

### Where it runs

| | Buildhound | ushr |
| --- | --- | --- |
| Machines | Yours. A spare Mac, a Linux box, or a laptop while plugged in and not in use. | Yours. Your own Macs and Linux machines. |
| Each job | A fresh VM, destroyed after. It reaches the internet and never your network. | A fresh runner. macOS in a VM, Linux in a container. |
| Secrets | On your hardware. Only on a machine a person marked Trusted. | On your hardware. The GitHub App key stays on your machine. |

### When things change

| | Buildhound | ushr |
| --- | --- | --- |
| Runners unavailable | New jobs route to the healthy side. GitHub-hosted, within about two minutes; a stuck job is re-run. | No fallback in its docs. While its control plane is down, running jobs finish and no new ones start. |
| Jobs at once | As many as your machines hold. Such as one macOS and one Linux job on a 24 GB Mac mini. When every machine is busy, new jobs go to GitHub-hosted after two and a half minutes. | One shared pool. Across organisations, by priority and wait time. |
| Setup | One prompt to your coding agent. Or two commands by hand. | One agent per host. `ushr init` rewrites `runs-on` to self-hosted labels. |

## One line in runs-on

ushr:

```yaml
runs-on: [self-hosted, macos]
```

Buildhound, on your machine while one can take the job and on GitHub-hosted when none can:

```yaml
runs-on: ${{ vars.BUILDHOUND_MACOS || 'macos-latest' }}
```

Buildhound has no referral agreement with ushr. Source: https://buildhound.sh/compare/ushr.
