RunsOn vs Depot for GitHub Actions runners
RunsOn vs Depot is not a rate comparison, because RunsOn does not charge a rate: it charges a flat annual license priced by how many jobs you run a month, and leaves the compute on your own AWS bill at spot prices. Depot charges $0.006 a minute for a 2 vCPU Linux runner and runs it in its own account, so the two only meet if you convert one into the other.

RunsOn installs a CloudFormation stack into your AWS account and launches an ephemeral EC2 runner there for each job, on spot with on-demand fallback, on any instance shape your quotas allow. AWS bills you for the instances with no markup from RunsOn, and RunsOn bills you once a year for a license. The tiers are keyed to runners per month, where a runner is one ephemeral instance and therefore one job: under 50,000 is $350 a year, under 200,000 is $1,050, under 500,000 is $2,100, and past that Enterprise is $4,200.
Depot sells the opposite arrangement. Its runners are ephemeral EC2 instances in Depot's own AWS account, carrying a RAM disk in front of the root disk and a cache service of its own, and you pay Depot a monthly plan plus a per-minute rate. Nothing is yours to operate, nothing appears on an AWS invoice, and the meter runs on time rather than on job count.
Every cell below was read from the vendor's own public pricing or documentation page on 21 September 2026. Where a vendor does not publish a number, the cell says "not published" instead of carrying a guess.
RunsOn, Depot and Latchkey side by side (read 21 September 2026)
| RunsOn | Depot | Latchkey | |
|---|---|---|---|
| Price per minute, 2 vCPU Linux x64 | No per-minute fee to RunsOn. Your EC2 bill: its published table gives $0.0010 a minute at spot for an m7i-flex.large in us-east-1 including a 30 GB gp3 volume at 400 MB/s | $0.006 (2 vCPU, 8 GB RAM, 100 GB disk, 2 GB RAM disk) | $0.0025 (2 vCPU, 8 GB RAM, 100 GB disk) |
| Price per minute, 4 vCPU Linux x64 | $0.0017 a minute at spot for an m7i-flex.xlarge on the same published table | $0.012 (4 vCPU, 16 GB RAM, 130 GB disk, 4 GB RAM disk) | $0.005 (4 vCPU, 16 GB RAM, 100 GB disk) |
| Platform fee | A flat annual license per legal entity, billed in EUR or USD: $350 a year under 50,000 runners a month, then $1,050, $2,100 and $4,200. One license covers every org and AWS account you own | $20 a month on Developer with 2,000 GitHub Actions minutes, $200 on Startup with 20,000 | $5 to $49 a month by plan |
| Free tier | A 15-day trial into your own AWS account, and a free license for nonprofit, open-source, educational and personal non-commercial use in exchange for a public acknowledgement | A 7-day trial on either paid plan. No standing free tier | 30-day trial, then 2,000 included minutes a month on Developer, 4,000 on Launch, 6,000 on Scale |
| Billing granularity | AWS bills the instances by the second. The license does not move with minutes at all, and short spikes never change it: only two months of sustained overage moves you up a tier | Per-second usage tracking, whole minutes billed at the end of the month, no one-minute minimum | Per minute |
| Runner sizes and OS | Any EC2 shape your quotas allow, from 1 to 96 vCPU on its published tables: Linux x64 and arm64, Windows, and GPU families including T4 and A10. Its docs state macOS is not supported | 2 to 64 vCPU on Linux x64 and arm64 (Graviton4); Windows Server 2022 and 2025, with no Hyper-V; macOS at 8 vCPU with 24 GB | 2, 4, 8 and 16 vCPU, Ubuntu 24.04 on x86_64 only. arm64, Windows and macOS are not offered |
| Cache: type, limit, persistence | Magic Cache backs actions/cache with an S3 bucket in your own VPC, with no transfer cost inside the VPC; sticky EBS disks and local NVMe are alternatives for large working sets | Depot Cache, 25 GB of cache and registry storage included on Developer and 250 GB on Startup, then $0.20/GB/month; entries are not isolated by branch | Size not published. latchkey-dev/cache-action@v1 swaps one line for actions/cache, keeping path, key and restore-keys; entries are isolated per organization, versioned by OS, kept 14 days; a failed restore warns rather than failing the job |
| Docker build acceleration | Buildx against Magic Cache, an S3 backend, an ephemeral ECR registry, or sticky EBS disks when the layer set is large | A RAM disk on every runner, plus remote container builds as a separate product with 50 GB of NVMe layer cache, expandable to 500 GB | latchkey-dev/docker-cache-action@v1, layers held in a Latchkey-managed private registry per organization |
| Concurrency limits | Your EC2 service quotas and spot capacity, not a plan tier. Fleet keeps a warm pool for lower queue latency at high volume | Not published | Not published; warm-pool capacity varies by plan |
| Where jobs run | Your AWS account, your VPC, your region, on instances that terminate after the job | Ephemeral EC2 instances in Depot's AWS account, or in your own account on the Business plan | Latchkey's own AWS estate on m6a-class hosts, one job per runner, private network, destroyed after the job |
| Self-healing or retries | Not offered | Not offered | Built in: transient failures are diagnosed and retried inside the run |
| Setup change required | Deploy a CloudFormation stack in AWS, then a runs-on label such as runs-on=${{ github.run_id }}/runner=4cpu-linux-x64 | Change the runs-on label. The repository must be owned by a GitHub organization | A runs-on label change. GitHub organization accounts only |
The meters measure different things, and that is the whole comparison
Depot bills time. RunsOn bills job count, once a year, in steps. Two hundred jobs of twenty minutes and four thousand jobs of one minute cost Depot the same money and put RunsOn four tiers apart. Nothing else on either page matters as much as that sentence.
So the number to find before you compare anything is your own monthly job count, which is the count of workflow jobs rather than workflow runs. RunsOn defines a runner as one ephemeral runner it launches, one per GitHub Actions job, and its own tier guide says under 50,000 covers about 79% of teams.
| Jobs a month | RunsOn license a year | Per month | What moves it |
|---|---|---|---|
| Under 50,000 | $350 (Starter) | $29 | Nothing, until two sustained months above the tier |
| Under 200,000 | $1,050 (Growth) | $88 | Job count only |
| Under 500,000 | $2,100 (Scale) | $175 | Job count only |
| 500,000 and up | $4,200 (Enterprise) | $350 | Job count only, plus source access and priority support |
| Any, on Depot | No license | $20 or $200 plan | Minutes: $0.006 a minute past the included ones |
Speed
Not benchmarked yet; the runner benchmark report will replace this section. We have not run the same workload on these runners ourselves, and until we have there is no number here worth quoting.
The cheap way to get a real answer is to point one slow job at each candidate for a fortnight, because runner selection is per job and the Actions run log hands you the timings for free.
RunsOn publishes a CPU score beside every instance row on its pricing table, which is more than most vendors do, and the comparison it draws is against the equivalent GitHub-hosted runner rather than against Depot. Depot publishes an up to 3x claim with no named workload. Neither is a measurement you can carry to your own repository.
What does transfer is queue latency, and the two are shaped differently there. A RunsOn job in Flex mode waits for an EC2 instance to launch, which is why Fleet exists and keeps a warm pool. Depot has no equivalent decision to make because the pool is not yours. If a cold start is what hurts, read GitHub Actions cold start and setup time before you attribute it to a vendor.
Cost: the same month, with the AWS bill kept separate
The workload every comparison here uses: 10,000 Linux minutes at 2 vCPU plus 2,000 macOS minutes on a private repository. RunsOn sells no macOS runner, so that half of its bill is GitHub-hosted, exactly as it is for Latchkey.
| 10,000 Linux minutes at 2 vCPU | 2,000 macOS minutes | Monthly total | |
|---|---|---|---|
| RunsOn on Starter | $10 of spot EC2 at its published $0.0010/min | Not offered: $124 on GitHub-hosted | $163, of which $29 is the license |
| Depot on Developer | $60 at $0.006/min | $160 at $0.08/min | $220 before the $20 plan |
| GitHub-hosted | $60 at $0.006/min | $124 at $0.062/min | $184 |
| Latchkey | $25 at $0.0025/min | Not offered: $124 on GitHub-hosted | $149 plus $5 to $49 a month for the plan |
RunsOn wins that month by a wide margin and the margin is not the whole story, because two of its three bill lines are not on the table. Its own pricing page names them: the license to RunsOn, EC2 compute to AWS, and storage and transfer to AWS for the S3 cache bucket and the EBS volumes. NAT gateway hours, cross-zone transfer and the S3 requests behind Magic Cache all land on your AWS invoice, and none of them appear in the $10. The published $0.0010 a minute is spot in us-east-1 with a 30 GB gp3 volume at 400 MB/s included, so it is an honest instance price and not an honest total.
The crossover is easier to state than the total. RunsOn costs you $29 a month plus your EC2 bill at roughly a sixth of Depot's rate, so on Linux minutes alone the license pays for itself at about 5,800 minutes a month of 2 vCPU compute. Below that Depot is cheaper before you count a single hour of anybody's time; above it RunsOn pulls away and keeps pulling, because nothing in its price grows with minutes. Latchkey's own plan is $5 to $49 a month on top of that compute, and its 2,000 to 6,000 included minutes are not netted off, so the figure is gross on both counts.
The line neither vendor prices is the one that decides this for most teams. RunsOn hands you an AWS account to own: quotas, AMIs, a stack to upgrade, spot capacity when a region is short, and a security boundary that is now yours. Depot hands you a label. If nobody wants that account, the compute saving is paid for in a currency the invoice does not show.
Reliability
Neither publishes a GitHub Actions SLA on the pages read here, and the failure modes are genuinely different rather than differently branded. On Depot a bad day is Depot's bad day and you wait. On RunsOn a bad day is spot capacity in your chosen instance family, an EC2 quota you did not raise before a matrix widened, or a stack that drifted, and all three are yours to fix.
RunsOn does run its runners inside your own VPC, which is the one reliability-adjacent property nothing managed can offer: a job that needs a private database or an internal registry reaches it without a tunnel. That is also the reason GitHub's own guidance is to keep self-hosted runners off public repositories, because a fork pull request would then execute on your network.
The failure both leave on the floor is the mechanical one. A registry timeout at minute nine bills the minutes it burned, fails the job, and waits for a person. On RunsOn that failure hides inside an EC2 invoice rather than a runner invoice, which makes it quieter rather than cheaper.
When to choose RunsOn
- Your job count is high and your minutes are higher. Nothing in the RunsOn price grows with either beyond a tier step, and at volume that is not a discount, it is a different shape of bill.
- You need the runner inside your own network: a private subnet, an internal registry, a database with no public endpoint, a data residency commitment.
- You want instance shapes nobody sells as a runner size, including GPU families. Its published table runs from a 1 vCPU m7a.medium to a 96 vCPU c7i.24xlarge, and GPU rows from a T4 to an A10.
- You already have a platform team that owns AWS accounts, so the quotas, the AMIs and the stack upgrades land on an existing rota rather than on the person who happened to read the install guide.
- Your project is non-commercial. The free license is the whole product in exchange for a public acknowledgement, which no metered vendor can match.
When to choose Depot
- Nobody wants an AWS account. That is a legitimate answer and it is the most common one.
- You need macOS in the same place as everything else. RunsOn documents that it does not support macOS; Depot sells an 8 vCPU macOS runner with 24 GB at $0.08 a minute.
- Your jobs are short and numerous. Per-second tracking with no one-minute minimum is worth real money on a pipeline of forty-second jobs, and on RunsOn that same pipeline is what pushes you up a license tier.
- Your container builds have outgrown the runner. Depot will run the build on a 16 vCPU remote builder with a persistent NVMe layer cache while a small runner drives it.
- Your volume is modest. Under roughly 5,800 Linux minutes a month the RunsOn license costs more than the compute it saves, before anyone touches CloudFormation.
Switching: the exact diff
Depot is a label. RunsOn is a label after a CloudFormation stack, and its label carries the run id so the ephemeral runner is claimed by the right job. Both changes are per job, so the honest test is to point one workflow at each and read two invoices a fortnight later.
jobs:
build-on-depot:
- runs-on: ubuntu-latest
+ runs-on: depot-ubuntu-24.04-4
steps:
- uses: actions/checkout@v7
- run: make build
build-on-runs-on:
- runs-on: ubuntu-latest
+ runs-on: runs-on=${{ github.run_id }}/runner=4cpu-linux-x64
steps:
- uses: actions/checkout@v7
- run: make buildThe verdict
RunsOn is the cheaper answer for any team already comfortable owning an AWS account, and it is not close: spot EC2 at its published rates is roughly a sixth of Depot per Linux minute, the license stops growing, and the runners sit inside your own VPC where your private services already are. The crossover is near 5,800 Linux minutes a month, and above it the gap widens every month. What that price buys is also a job description. Quotas, AMIs, stack upgrades, spot capacity and a security boundary all become yours, and the compute saving is being spent in a currency your invoice does not print. Depot is the right purchase when nobody wants that job, when you need macOS beside everything else, or when the thing that has outgrown your runner is the container build rather than the runner. Neither one notices that a job failed for a reason unrelated to your code, repairs it and carries on, which on either bill is the line item that grows quietest.
Frequently asked questions
How is RunsOn priced?
Is RunsOn cheaper than Depot?
Can I run macOS jobs on RunsOn or Depot?
What work does RunsOn add that Depot does not?
Related guides
References
- RunsOn pricing: license tiers, published EC2 per-minute costs and the three bill lines (verified 2026-09-21)
- Depot GitHub Actions runner types and per-minute prices (verified 2026-09-21)
- Depot pricing: plans, included usage and overage rates (verified 2026-09-21)
- GitHub Docs: self-hosted runner automatic updates and the 30-day rule (verified 2026-09-21)
- GitHub Actions documentation