# Latchkey vs BuildJet after the BuildJet shutdown

> Latchkey vs BuildJet is now a migration: BuildJet stopped running GitHub Actions jobs on 31 March 2026. The label map and what it all costs now.

Source: https://latchkey.dev/learn/runners/latchkey-vs-buildjet  
Updated: 2026-09-20

Latchkey vs BuildJet is no longer a comparison you can act on: BuildJet announced the shutdown of BuildJet for GitHub Actions on 6 February 2026 and stopped running jobs on 31 March 2026. What is left is a migration, so this page is about the `buildjet-*` labels still sitting in workflow files and what the surviving options cost against the rate you used to pay.

BuildJet sold managed runners on its own bare metal, adopted with a one-line `runs-on` change, at $0.004 a minute for 2 vCPU and 8 GB rising to $0.048 for 32 vCPU. It published arm64 variants of every size and a drop-in cache action with 20 GB per repository per week, which was double the GitHub-hosted allowance. Its site is still up and still shows that rate card, under a banner reading "BuildJet for GitHub Actions has been shut down", so do not price your migration from it.

Latchkey sells managed runners the same way, at $0.0025 a minute for 2 vCPU and 8 GB, with a dependency cache that swaps in for `buildjet/cache` in one line and transient failures repaired on the runner. It is the closest thing on price to what BuildJet was, and it is missing the thing a good share of BuildJet users were there for: there is no arm64, Windows or macOS runner, so an arm64 job has to land somewhere else.

Every cell below was read from the vendor's own public pricing or documentation page on 20 September 2026. Where a vendor does not publish a number, the cell says "not published" instead of carrying a guess.

## Comparison

|  | BuildJet (ended 31 March 2026) | GitHub-hosted | Latchkey |
| --- | --- | --- | --- |
| Price per minute, 2 vCPU Linux x64 | $0.004 (2 vCPU, 8 GB RAM), on a frozen page | $0.006 (2 vCPU, 8 GB RAM, 14 GB SSD on a private repo; free on public repos) | **$0.0025** (2 vCPU, 8 GB RAM, 100 GB disk) |
| Price per minute, 4 vCPU Linux x64 | $0.008 (4 vCPU, 16 GB RAM) | $0.012 as a larger runner | **$0.005** (4 vCPU, 16 GB RAM, 100 GB disk) |
| Free tier | None published; concurrency subscriptions were made free on 6 February 2026 as the service wound down | 2,000 minutes a month on Free, 3,000 on Team, 50,000 on Enterprise Cloud, private repos only | 30-day trial, then 2,000 included minutes a month on Developer, 4,000 on Launch, 6,000 on Scale |
| Billing granularity | Per minute | Every job is rounded up to the nearest whole minute | Per minute |
| Runner sizes and OS | 2 to 32 vCPU on Ubuntu 22.04, x64 and arm64 | Linux x64 and arm64, Windows x64 and arm64, macOS; larger runners to 96 vCPU | 2, 4, 8 and 16 vCPU, Ubuntu 24.04 on x86_64 only. arm64, Windows and macOS are not offered |
| Cache: type, limit, persistence | BuildJet Cache, 20 GB per repo per week free, interoperable with `actions/cache` | `actions/cache`, 10 GB per repository, entries removed after 7 days without access | 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 | BuildJet Cache in front of buildx; no managed layer-cache service after shutdown | None built in. `cache-to: type=gha` writes into the same 10 GB store | `latchkey-dev/docker-cache-action@v1`, layers held in a Latchkey-managed private registry per organization |
| Concurrency limits | Sold as a concurrency subscription, then made free during the wind-down | 20 concurrent jobs on Free, 40 on Pro, 60 on Team, 500 on Enterprise Cloud. macOS is capped separately at 5, or 50 on Enterprise | Not published; warm-pool capacity varies by plan |
| Where jobs run | BuildJet's own bare metal, until 31 March 2026 | GitHub's own hosted fleet | 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 | None. A failed job waits for a person, or for retry logic you wrote yourself | Built in: transient failures are diagnosed and retried inside the run |
| Setup change required | A `runs-on` label change, now a label that resolves to nothing | None; this is the default | A `runs-on` label change. GitHub organization accounts only |

## What happened, and what it means for your workflow files

BuildJet posted the notice on 6 February 2026: new signups closed that day, all concurrency subscriptions became free, pay-as-you-go billing continued as normal, and on 31 March 2026 the runners stopped taking jobs. The company's own migration advice was to move to GitHub-hosted runners, use GitHub's native arm64 runners for arm workflows, and swap the BuildJet cache action back to `actions/cache`, which it describes as interoperable.

If a `buildjet-*` label is still in a workflow file today, the job does not fail loudly with a helpful message. It queues, waiting for a runner with that label to appear, until it hits the job timeout or somebody cancels it. That is worth grepping for across every repository and every branch that still builds, including the ones nobody has touched since March.

## The label map

Every BuildJet size maps to something, but not to one thing: GitHub sells its 4 vCPU and larger sizes as larger runners with labels you define yourself in organization settings, so there is no drop-in string to paste. Prices are per minute, read 20 September 2026.

| BuildJet label | Was | GitHub-hosted | Latchkey |
| --- | --- | --- | --- |
| `buildjet-2vcpu-ubuntu-2204` | 2 vCPU, 8 GB, $0.004 | `ubuntu-latest`, 2 vCPU, 8 GB, 14 GB disk, $0.006 | `latchkey-small`, 2 vCPU, 8 GB, 100 GB disk, $0.0025 |
| `buildjet-4vcpu-ubuntu-2204` | 4 vCPU, 16 GB, $0.008 | A 4-core larger runner you name yourself, $0.012 | `latchkey-medium`, 4 vCPU, 16 GB, $0.005 |
| `buildjet-8vcpu-ubuntu-2204` | 8 vCPU, 32 GB, $0.016 | An 8-core larger runner, $0.022 | `latchkey-large`, 8 vCPU, 32 GB, $0.01 |
| `buildjet-16vcpu-ubuntu-2204` | 16 vCPU, 64 GB, $0.032 | A 16-core larger runner, $0.042 | `latchkey-xlarge`, 16 vCPU, 64 GB, $0.02 |
| `buildjet-32vcpu-ubuntu-2204` | 32 vCPU, 64 GB, $0.048 | A 32-core larger runner, $0.082 | No standard 32 vCPU size; custom runners bill at the xlarge rate |
| `buildjet-*-ubuntu-2204-arm` | arm64 at every size | `ubuntu-24.04-arm`, $0.005 at 2 cores | Not offered: arm64 has to go to GitHub, Blacksmith at $0.0025 or WarpBuild at $0.003 |

## The migration, in the order that avoids surprises

The label is the easy part. What catches people is everything that was tuned around BuildJet: cache keys sized for a 20 GB weekly allowance, matrices sized for a concurrency subscription, and arm64 jobs that quietly have nowhere to go.

- Grep every repository for `buildjet-` and list the branches, not just the default one. Scheduled workflows on stale branches are the ones that queue forever.
- Move the x64 jobs first, one label at a time, and check the run times rather than assuming parity: BuildJet was bare metal, and a cloud runner at the same core count is not always the same wall-clock.
- Swap `buildjet/cache@v4` back to `actions/cache@v6` and re-check what you were caching. GitHub allows 10 GB per repository against BuildJet's 20 GB, so a cache tuned to the old ceiling will start evicting.
- Re-home arm64 jobs explicitly. `ubuntu-24.04-arm` at $0.005 is the no-new-vendor answer; Blacksmith at $0.0025 and WarpBuild at $0.003 are cheaper if you are adding a vendor anyway.
- Re-check concurrency. GitHub allows 20 to 500 concurrent jobs by plan, which is a different ceiling from a bought concurrency subscription, and a wide matrix is where you notice.
- Price the result before you settle. The rate you were paying was $0.004, and the default you were told to move to is $0.006, which is a 50% rise on every Linux minute.

```.github/workflows/ci.yml
jobs:
   test:
-    runs-on: buildjet-4vcpu-ubuntu-2204
+    runs-on: latchkey-medium
     steps:
       - uses: actions/checkout@v7
-      - uses: buildjet/cache@v4
+      - uses: actions/cache@v6
         with:
           path: ~/.npm
           key: npm-${{ hashFiles('package-lock.json') }}

   test-arm:
-    runs-on: buildjet-4vcpu-ubuntu-2204-arm
+    runs-on: ubuntu-24.04-arm
```

## 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 week, because runner selection is per job and the Actions run log gives you the timings for free.

## Cost: the month you used to pay for, priced where you can actually run it now

The same workload as every comparison here, 10,000 Linux minutes at 2 vCPU plus 2,000 macOS minutes a month on a private repository. BuildJet never sold macOS, so that column always landed on GitHub-hosted, which is exactly where it lands for Latchkey too.

|  | 10,000 Linux minutes at 2 vCPU | 2,000 macOS minutes | Monthly total |
| --- | --- | --- | --- |
| BuildJet, as priced | $40 at $0.004/min | Not offered: $124 on GitHub-hosted | $164, until 31 March 2026 |
| 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 |

Doing nothing but taking BuildJet's advice costs $20 a month more on this mix, because $0.004 became $0.006. Latchkey is $149 plus a $5 to $49 plan, so at the Launch tier it lands within a few dollars of the BuildJet bill, and at Scale it is above it. 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.

That is the honest shape of this migration: nobody is getting a windfall out of a vendor closing. The options that beat BuildJet's old rate on Linux are Namespace at $0.002 a minute prepaid for a 2 vCPU shape with 4 GB, half the memory BuildJet gave you, and WarpBuild BYOC at $0.002 plus your own cloud bill. The options that match it are Blacksmith and WarpBuild at $0.004. Latchkey undercuts all of the managed ones at $0.0025 and is the only one that also repairs a failed job, at the cost of a plan fee and no arm64.

## Where BuildJet users can actually land

Every option below is a `runs-on` label change from where you are now, which is the one thing that has not changed since BuildJet. Rates are the published 2 vCPU Linux rate, read 20 September 2026.

| Option | 2 vCPU Linux | arm64 | Best for |
| --- | --- | --- | --- |
| GitHub-hosted | $0.006 | $0.005 | No new vendor, and the only free option on public repositories |
| Blacksmith | $0.004 | $0.0025 | Matching the old rate, with 3,000 free minutes a month |
| WarpBuild | $0.004 | $0.003 | Matching the old rate, or $0.002 in your own cloud under BYOC |
| Namespace | $0.002 prepaid | Published by shape | The lowest published rate, at 4 GB per 2 vCPU rather than 8 |
| Depot | $0.006 | $0.006 | Per-second metering and 100 GB of disk, at GitHub list price |
| Latchkey | $0.0025 | Not offered | The lowest managed x64 rate, plus failures repaired on the runner |

## The verdict

There is no version of this that makes BuildJet's closure good news, and the default path its own post recommends, moving everything to `ubuntu-latest`, raises your Linux rate by half. If you are editing every workflow file anyway, that is the cheapest moment you will ever have to price the alternatives, because the edit is identical whichever label you paste. Latchkey is the lowest published managed x64 rate of the group and the only one that repairs a transient failure instead of billing you twice for it, and it is the wrong answer if your matrix has arm64, Windows or macOS in it, because it has none of those. Blacksmith and WarpBuild both match BuildJet's old $0.004 with arm64 included, and GitHub-hosted is the answer that adds no vendor at all. Pick on the shape of your matrix, not on the closure.

## FAQ

### Is BuildJet shutting down?

It has already shut down. BuildJet announced on 6 February 2026 that BuildJet for GitHub Actions was closing, stopped new signups that day, made concurrency subscriptions free, and ended job execution on 31 March 2026. The marketing site and documentation are still online, which is why the rate card still looks live; the runners behind those labels are not.

### What is the best BuildJet alternative?

It depends on which part of BuildJet you were buying. For the $0.004 Linux rate, Blacksmith and WarpBuild both match it and both publish arm64 as well. For the lowest published rate, Namespace is $0.002 a minute prepaid, with 4 GB of RAM per 2 vCPU rather than 8. For the lowest managed x64 rate with failures repaired on the runner, Latchkey is $0.0025. For adding no vendor at all, GitHub-hosted is $0.006.

### Does BuildJet Cache still work?

No, and BuildJet said so in its shutdown post: the guidance is to swap the cache action back to `actions/cache`, which it describes as interoperable with its own. Do check what you were storing. BuildJet published 20 GB per repository per week free, and GitHub allows 10 GB per repository, so a cache sized for the old allowance will start evicting entries and your hit rate will drop before anyone notices.

### What replaces BuildJet arm64 runners?

GitHub now sells native arm64 runners at $0.005 a minute for 2 cores, which is the no-new-vendor answer and the one BuildJet itself pointed at. If you are adding a vendor anyway, Blacksmith lists Ubuntu arm64 at $0.0025 and WarpBuild at $0.003, both below the x64 rate on the same platform. Latchkey has no arm64 runner, so those jobs cannot follow the rest of your pipeline there.

## References

- [BuildJet: we are shutting down BuildJet for GitHub Actions](https://buildjet.com/for-github-actions/blog/we-are-shutting-down)
- [BuildJet runner tags and per-minute rates](https://buildjet.com/for-github-actions/docs/runners)
- [BuildJet Cache: 20 GB per repo per week](https://buildjet.com/for-github-actions/docs/guides/migrating-to-buildjet-cache)
- [GitHub Actions per-minute rates by runner](https://docs.github.com/en/billing/reference/actions-runner-pricing)
- [Latchkey pricing: plans and per-minute runner rates](https://latchkey.dev/pricing)

---

Latchkey runs CI/CD that repairs its own failures. Agent entry points: https://latchkey.dev/agent.txt, https://latchkey.dev/openapi.json, https://latchkey.dev/llms.txt
