Namespace vs GitHub hosted runners, and the unit minute
Namespace vs GitHub hosted runners is awkward to compare because Namespace does not sell runner minutes: it sells unit minutes, where one unit is 1 vCPU with 2 GB of RAM for a minute, times a platform multiplier. Convert it and a 2 vCPU Linux runner is $0.002 a minute prepaid against GitHub's $0.006, on 4 GB of RAM rather than 8, which is the caveat that decides most of this page.

GitHub-hosted runners need no explanation and no account: an included allowance of 2,000 to 50,000 minutes a month by plan, a standard private-repo Linux runner of 2 vCPU, 8 GB and 14 GB of disk, every platform GitHub sells, and free unlimited use on public repositories at 4 vCPU and 16 GB.
Namespace sells compute across devboxes, Docker builds and GitHub Actions runners from one meter. You pick a shape through a label such as nscloud-ubuntu-24.04-amd64-8x16, and the bill is vCPU count times minutes times a platform multiplier of 1 for Linux, 2 for Windows, 10 for macOS and 7 for Linux on Apple silicon. Rates come in two columns, prepaid inside a plan and about 50% higher as overage outside it.
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.
GitHub-hosted, Namespace and Latchkey side by side (read 20 September 2026)
| GitHub-hosted | Namespace | Latchkey | |
|---|---|---|---|
| Price per minute, 2 vCPU Linux x64 | $0.006 (2 vCPU, 8 GB RAM, 14 GB SSD on a private repo; free on public repos) | $0.002 prepaid, $0.003 overage (2 vCPU, 4 GB RAM). The 2 vCPU with 8 GB shape is $0.004 prepaid | $0.0025 (2 vCPU, 8 GB RAM, 100 GB disk) |
| Price per minute, 4 vCPU Linux x64 | $0.012 as a larger runner with 16 GB | $0.004 prepaid at 4 vCPU and 8 GB; $0.008 prepaid at 4 vCPU and 16 GB | $0.005 (4 vCPU, 16 GB RAM, 100 GB disk) |
| Free tier | 2,000 minutes a month on Free, 3,000 on Team, 50,000 on Enterprise Cloud, private repos only | A 30-day trial of the pay-as-you-go Developer plan; no standing monthly allowance | 30-day trial, then 2,000 included minutes a month on Developer, 4,000 on Launch, 6,000 on Scale |
| Billing granularity | Every job is rounded up to the nearest whole minute | A one-minute minimum, then the following 15-second steps rounded down: its docs say 70 seconds bills as one minute | Per minute |
| Runner sizes and OS | Linux x64 and arm64, Windows x64 and arm64, macOS on Apple silicon and Intel; larger runners to 96 vCPU | Shapes from 1 vCPU up to 64 vCPU and 512 GB on amd64 and arm64; Windows; macOS on Apple silicon; Linux on Apple silicon in early access | 2, 4, 8 and 16 vCPU, Ubuntu 24.04 on x86_64 only. arm64, Windows and macOS are not offered |
| Cache: type, limit, persistence | actions/cache, 10 GB per repository, entries removed after 7 days without access, restorable only from the same or the default branch | Cache volumes attached by label, snapshots at $0.002/GB-hour with 5,000 GB-hours free on Team and 15,000 on Business, storage at $0.0048/GB-day | 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 | None built in. cache-to: type=gha writes into the same 10 GB store | Docker builds are a separate meter: 1,000 included on Team and 2,500 on Business, $0.05 per build on Developer, $10 per 1,000 after that, with cross-invocation caching | latchkey-dev/docker-cache-action@v1, layers held in a Latchkey-managed private registry per organization |
| Concurrency limits | 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 | Denominated in vCPU, not jobs: 32 vCPU on Developer, 64 on Team, 160 on Business. macOS is 12, 24 and 48 vCPU | Not published; warm-pool capacity varies by plan |
| Where jobs run | GitHub's own hosted fleet | Namespace Compute: AMD EPYC for amd64, AmpereOne or Apple silicon for arm64, M5 Max and M4 Pro for macOS | Latchkey's own AWS estate on m6a-class hosts, one job per runner, private network, destroyed after the job |
| Self-healing or retries | None. A failed job waits for a person, or for retry logic you wrote yourself | Not offered | Built in: transient failures are diagnosed and retried inside the run |
| Setup change required | None; this is the default | Change runs-on to one nscloud label, plus companion labels for a cache volume | A runs-on label change. GitHub organization accounts only |
How to compute a Namespace bill
The formula Namespace publishes is vCPU count times minutes times the platform multiplier, and its own worked example is 4 vCPU for 5 minutes on Linux, which is 20 unit minutes. Shapes that are not the standard 1 vCPU to 2 GB ratio are charged on whichever is larger, cores or half the memory, so a 2 vCPU shape with 8 GB counts as 4 units rather than 2. That rule is the whole trick: memory is priced, it is just priced as cores.
| Shape | Unit minutes per minute | Prepaid | Overage | GitHub-hosted equivalent |
|---|---|---|---|---|
| Linux 2 vCPU, 4 GB | 2 | $0.002 | $0.003 | $0.006 at 2 vCPU and 8 GB |
| Linux 2 vCPU, 8 GB | 4 | $0.004 | $0.006 | $0.006 at 2 vCPU and 8 GB |
| Linux 4 vCPU, 16 GB | 8 | $0.008 | $0.012 | $0.012 at 4 vCPU and 16 GB |
| Linux 8 vCPU, 32 GB | 16 | $0.016 | $0.024 | $0.022 at 8 vCPU and 32 GB |
| Windows 4 vCPU, 16 GB | 16 (2x multiplier) | $0.016 | $0.024 | $0.022 at 4 cores |
| macOS 6 vCPU, 14 GB | 60 (10x multiplier) | $0.06 | $0.09 | $0.062 on a 3 or 4 core runner |
Line the shapes up by memory and the picture is less dramatic than the headline rate but still one-sided: at 2 vCPU and 8 GB, the machine GitHub actually gives you, Namespace prepaid is $0.004 against $0.006, a third cheaper rather than two thirds. At 4 vCPU and 16 GB it is $0.008 against $0.012, the same third. The two-thirds saving only exists if your jobs are genuinely happy on 4 GB of RAM, and a Java, Gradle or large Node build usually is not.
The other end of the table is where the multipliers bite. macOS costs 10 unit minutes per vCPU-minute, so a 6 vCPU macOS runner is $0.06 prepaid and $0.09 as overage against GitHub's $0.062, which means Namespace is cheaper on macOS only while you stay inside a plan. Windows doubles the same way. The cheap Linux rate tells you nothing about either.
The rounding difference nobody prices
GitHub rounds every job up to the nearest whole minute. Namespace applies a one-minute minimum and then rounds the following 15-second steps down, and its documentation gives the example that 70 seconds of usage is one billable minute. On a single job that is noise; on a matrix it is not.
Take 40 jobs that each finish in 70 seconds, which is 46.7 minutes of real work. GitHub bills 80 minutes, because every job rounds from 1 minute 10 seconds to 2, and at $0.006 that is $0.48. Namespace bills 40 minutes, one per job, and a 2 vCPU 4 GB shape is 2 unit minutes each, so 80 unit minutes at $0.001 prepaid is $0.08. Most of that $0.40 gap is the rate: billing the same 80 minutes at $0.002 would be $0.16. The remaining $0.08, a fifth of the gap, is rounding, and rounding is the part you cannot optimize away by buying a smaller runner.
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 same month, priced three ways
The usual workload, 10,000 Linux minutes at 2 vCPU plus 2,000 macOS minutes a month on a private repository. For Namespace the arithmetic runs in unit minutes, and the shape decides it: matched to the machine GitHub gives you, a 2 vCPU runner with 8 GB is 4 units a minute and the Linux half is 40,000 unit minutes; the 4 GB shape is 2 units a minute and 20,000. The macOS half is 2,000 times 60 units either way, and the $100 Team plan covers the first 100,000 unit minutes.
| 10,000 Linux minutes at 2 vCPU | 2,000 macOS minutes | Monthly total | |
|---|---|---|---|
| GitHub-hosted | $60 at $0.006/min | $124 at $0.062/min | $184 |
| Namespace on Team, 2 vCPU and 8 GB | 40,000 unit minutes | 120,000 unit minutes | $190: the $100 plan plus 60,000 overage unit minutes at $0.0015 |
| Namespace on Team, 2 vCPU and 4 GB | 20,000 unit minutes | 120,000 unit minutes | $160: the $100 plan plus 40,000 overage unit minutes at $0.0015 |
| Latchkey | $25 at $0.0025/min | Not offered: $124 on GitHub-hosted | $149 plus $5 to $49 a month for the plan |
On the machine that matches GitHub's, Namespace is $190 against $184, so on this particular mix it is six dollars dearer rather than cheaper, and the cheaper row underneath it buys half the memory. What moves the total is macOS: 120,000 of those unit minutes are 2,000 macOS minutes at a 10x multiplier, which swamps a Linux rate that is a third lower. Note also what the $100 buys. It is not a fee on top of the compute, it is the compute, so the comparison holds only if you would actually use 100,000 unit minutes; a team that burns 30,000 pays $100 for 30,000. 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.
What GitHub-hosted still wins on
- Public repositories, where standard runners are free and unlimited on a 4 vCPU and 16 GB machine.
- Included minutes with no plan decision: 2,000 on Free, 3,000 on Team, 50,000 on Enterprise Cloud, and no commitment to reach the best rate.
- Memory per core. GitHub pairs 4 GB with each vCPU on its standard Linux runner; Namespace standard shapes pair 2 GB, and you buy cores to get memory.
- A concurrency limit you can reason about. GitHub counts jobs, 20 to 500 by plan; Namespace counts vCPU, 32 on Developer and 64 on Team, so one 32 vCPU job can consume the whole Developer allowance.
- Job duration. GitHub allows 6 hours per job; Namespace publishes a maximum instance duration of 3 hours on Developer and 5 on Team, rising to 24 on Business.
- One vendor, one bill, one status page, and the reference images every action in the marketplace is tested against.
Switching: the exact diff
Namespace is a label change like everything else in this category, with one rule to remember: only one nscloud label is allowed in runs-on, and cache volumes arrive as companion labels rather than as inputs on a step. That makes the diff slightly longer than the usual one-liner and still nothing like a migration.
jobs:
test:
- runs-on: ubuntu-latest
+ runs-on: nscloud-ubuntu-24.04-amd64-4x8
build:
- runs-on: ubuntu-latest
+ runs-on:
+ - nscloud-ubuntu-24.04-amd64-8x16-with-cache
+ - nscloud-cache-tag-my-repository
+ - nscloud-cache-size-50gbThe verdict
Namespace is genuinely cheaper than GitHub-hosted on private-repo Linux, by a third at matched memory and by two thirds if your jobs fit in 4 GB, and its billing rounds in your favor where GitHub rounds against you. A cheap Linux rate is not the same as a cheap month, though: the worked example above, on the matched 8 GB shape, lands at $190 against GitHub's $184, because 2,000 macOS minutes at a 10x multiplier are most of the bill. The price of that is a model you have to do arithmetic in, a plan you have to commit to for the prepaid rate, and two ceilings that GitHub states differently: concurrency measured in vCPU rather than jobs, and a maximum instance duration of 3 hours on the entry plan against GitHub's 6. On public repositories the comparison does not start, because free and unlimited on a bigger machine beats every rate on this page. Neither vendor does anything about a job that fails for a mechanical reason, which is the line item both rate cards leave out.
Frequently asked questions
How much does Namespace cost per minute?
Is Namespace cheaper than GitHub-hosted runners?
What is a unit minute?
What are the Namespace runner labels?
nscloud-{os}-{arch}-{shape}, for example nscloud-ubuntu-24.04-amd64-8x16 for 8 vCPU and 16 GB, and only one nscloud label is allowed in runs-on. Cache volumes are added with a -with-cache suffix plus companion labels naming the cache tag and its size in gigabytes, which is also how you keep two repositories from sharing one volume by accident.