Your Mac mini costs $1.35 a month, and no cloud provider comes close
I was about to build a feature. Then I did the arithmetic.
I build reminal, a tool for reaching your terminal from your phone. The natural next feature seemed obvious: reminal new machine. One command, a cloud VM appears, you own it, it shows up on your phone, you tear it down when you're done. Spawn boxes like you spawn tabs.
Before writing the provider integration I sat down to check whether the thing actually made sense for the people who'd use it. It turns out it makes overwhelming sense for one group, no sense at all for another, and — the part I didn't expect — the two groups want architecturally opposite things.
The consumer number that ends the argument
The consumer pitch for a cloud VM is "replace the machine humming in your closet." Lots of people run an always-on box at home — a Mac mini, an old laptop, a NUC — as a place to leave things running. Put it in a datacenter instead. Better uptime, better bandwidth, no fan noise.
So what does the closet machine actually cost to run?
A Mac mini idles around 4 W and peaks near 65 W. Call it 10 W average for a box that's mostly idle with occasional real work. That's 10 W × 730 h = 7.3 kWh a month. At the US residential average of 18.44¢/kWh (EIA, August 2026), 7.3 × $0.1844:
$1.35 a month. Sixteen dollars a year.
The closest cloud equivalent I could find — Hetzner's CAX31, 8 ARM vCPUs and 16 GB — runs €20.99 plus €0.50 for the IPv4, about $24.95 a month at current rates.
That's 18× the cost, for a machine with substantially worse single-core performance that can't run macOS. And that's against a mini you own, where the hardware is sunk. Buy one new to make the comparison fair and cloud still loses: the entry mini is now $899 — an M6 with a 12-core CPU, a 12-core GPU, 16 GB of unified memory at 153 GB/s and a 256 GB SSD — and a bit over a third of that comes back at resale in four years, so about $566 of real depreciation over 48 months. That's $11.79/month, plus the $1.35 of power: $13.14/month all-in. Cloud loses that one too, about 1.9:1.
There's no clever framing that rescues the owned case: hardware you already have is sunk cost, nearly free next to a monthly VM bill. New hardware at $899 is a closer call than it was when the mini started at $599 — but the amortized cost still lands comfortably under the cloud number.
Unless you turn it off
The one variable that changes the picture is duty cycle. The CAX31 works out to $24.95 ÷ 730 h = $0.0342/hour, so if you only pay while the machine exists:
| Hours/month | Cloud | vs. mini you own ($1.35) | vs. mini bought new ($13.14) |
|---|---|---|---|
| 30 (1 h/day) | $1.03 | cloud wins | cloud wins |
| 60 (2 h/day) | $2.05 | mini wins | cloud wins |
| 120 (4 h/day) | $4.10 | mini wins | cloud wins |
| 240 (8 h/day) | $8.21 | mini wins | cloud wins |
| 730 (always on) | $24.95 | mini wins 18× | mini wins 1.9× |
Two break-evens fall out, each just the mini's monthly cost divided by $0.0342/hour: $1.35 ÷ $0.0342 ≈ 40 hours a month against hardware you already own, and $13.14 ÷ $0.0342 ≈ 384 hours a month against buying it new.
Under about an hour and a half a day, cloud wins. Above it, the closet wins — and if the closet is already occupied, it wins by an order of magnitude.
So the consumer version of this feature isn't "replace your home machine." It's "rent a second machine for an hour." Those are different products with different UIs, and only one of them survives contact with a spreadsheet.
The exception worth naming: GPUs. A cloud RTX 4000 Ada runs about $0.84/hour. Twenty hours a month is $16.72, against $1,000+ to buy the card. There's no duty cycle at which owning wins for occasional GPU work. If your consumer story involves a GPU, everything above inverts.
The part every table above gives the cloud for free
All of that puts a monthly dollar figure next to a monthly dollar figure and quietly lets you assume the two boxes are interchangeable. They are not. $899 doesn't buy the same machine at a higher price — it buys a much larger machine, and the cloud does not sell that machine at $25.
| $899 mini (M6, 16 GB / 256 GB) | Hetzner CAX31 ($24.95/mo) | |
|---|---|---|
| Single-core (Geekbench 6) | ~3,800+ | 1,036 |
| Multi-core (Geekbench 6) | ~15,000+ | 5,477 |
| Cores | 12 native (2 super + 4P + 6E) | 8 shared Ampere Altra vCPUs |
| Memory | 16 GB unified @ 153 GB/s | 16 GB |
| Storage | 256 GB local NVMe | 160 GB local NVMe |
| GPU / Neural Engine | 12-core GPU + Neural Engine | none |
| OS | macOS | Linux only |
That's roughly 3.7× the single-core performance per thread and half again as many cores, the same 16 GB of memory but unified on-package at 153 GB/s rather than a shared allocation, and a real GPU and Neural Engine — for less per month than the cloud box costs.
Two rows are closer than the rest and I'd rather name them than bury them. Memory is a flat tie at 16 GB each. And storage is 256 GB against 160 GB — both local NVMe, so it's a capacity lead and not much of a speed one, and 256 GB is genuinely tight for a box you intend to keep four years.
Everywhere else it's a rout, and the escape route is expensive. To match the mini's single-core performance you have to leave shared vCPUs entirely for a dedicated-core instance, and a CCX33 (8 dedicated AMD vCPUs, 31 GB) runs about $188/month — for a Geekbench single-core score around 2,032, still barely half the mini's, and still no GPU, no Neural Engine, and no macOS at any price on the mainstream clouds. Apple silicon in the cloud does exist (MacStadium, AWS EC2 Mac) and starts around $0.65–1.00/hour with multi-day minimums — call it $400–700 a month — because you're renting a whole physical Mac, which is exactly the thing sitting on your desk for a one-time $899.
So on a pure dollars-per-month line the buy-new case sits at 1.9×. Weight the two boxes by what they actually compute and the gap widens enormously: at equal monthly cost the mini is several times the machine, and at equal performance the cloud is roughly fourteen times the price — $188/month for a box that still loses on single-core, against $13.14/month amortized.
The caveat that keeps this from being a fan post: most closet workloads — an agent looping, a build, a bot, a cron job — don't saturate even the CAX31, so the extra mini horsepower is latent capacity, not realized savings. The performance argument bites exactly when your work is CPU- or GPU-bound, and not much otherwise. And it doesn't touch the duty-cycle math at all: under an hour and a half a day, cloud still wins on cost, and a bigger idle machine just means more capability sitting switched off.
The business number that ends a different argument
Now price the same VM as a business input. A fully-loaded US developer costs roughly $100/hour, or $1.67/minute. Convert infrastructure into developer-minutes by dividing the monthly bill by $1.67:
| Infrastructure | $/month | = dev time/month |
|---|---|---|
| One Hetzner CX23, always on | $6.95 | 4.2 minutes |
| One machine0 small, always on | $9.49 | 5.7 minutes |
| Ten CX23s, always on | $69.50 | 42 minutes |
| Twenty CX23s, always on | $139.00 | 1 h 23 min |
| GitHub Codespaces, 2-core, 160 h/mo | $28.80 | 17 minutes |
A box has to save under five minutes a month to pay for itself. Twenty boxes have to save under an hour and a half, collectively, across a team.
No business declines this on cost. Which means every minute spent optimizing the cost of business dev VMs is wasted — the decision was never financial. It's about isolation, parallelism, whether the box has your tools on it, and how fast it comes up. Cost only reappears at hundreds of always-on instances, and by then it's a fleet-management problem, not a pricing one.
The asymmetry, which is the actual finding
Here's what I didn't see coming. Both segments want a cloud VM. They want opposite machines.
Business wants the box always on. It's a place things run — a build, an agent, a long job. Idle time costs four minutes of salary a month, so nobody thinks about it. Persistent presence is the entire value: it's there when you reach for it.
Consumer economics only work below roughly a ninety-minute daily duty cycle. Which means the machine must be off — suspended, destroyed, scaled to zero — for most of its life. For this user, the desirable steady state is not running.
That's not a preference difference. It's an architectural one, and it lands directly on the thing I'd already built.
reminal keeps a lightweight background host on every machine you own, so an idle box still appears in your list and can spawn a session on demand. Idle-but-reachable is the whole point. But a machine that is always reachable is a machine that is always billing — so for the consumer case, my architecture treats the economically correct state as a failure. An offline machine renders as a problem, when for that user it's the goal.
Fixing it isn't cosmetic. It means a third machine state — suspended — where the local record persists, the machine is genuinely gone from the network, and waking it goes through the provider's API rather than the relay. Nothing about ownership or presence gives you that for free. It only becomes visible when you price the idle hours.
Two smaller things the math settled
Billing granularity is a red herring. A 20-minute session costs about $0.011 billed by the minute or by the second, and $0.0342 on Hetzner's hourly (you buy the whole hour). The entire spread is two cents. Choose a provider for its suspend semantics, its API, or its boot time — never for billing resolution. It changes how the number reads, not what it is.
For consumers the risk isn't cost, it's forgotten cost. $25/month of VM that someone stopped using is invisible inside a company and a support ticket at consumer scale. Idle auto-destroy, a cap on machine count, and a visible running total are consumer requirements. For business they're barely worth building.
What I'm doing with this
I'm still building reminal new machine. But I'm not positioning it as a replacement for the machine in your closet, because that claim doesn't survive $1.35 a month. It's a way to get an extra box for an hour — and for teams, a way to stop running five things serially on one laptop.
The general lesson is cheaper than the specific one. The same feature, priced against two different alternatives, produced two different products with incompatible defaults. Not two markets to segment later — two architectures, diverging at the point where you decide what "idle" means. That's worth finding before you write the provider integration, not after.
Read the original version, as published 13 August 2026 ($599 mini, $18.14 CAX31)
Preserved unedited apart from heading levels. Every number here is superseded by the version above.
The consumer number that ends the argument
A Mac mini M4 idles around 4 W and peaks near 65 W. Call it 10 W average for a box that's mostly idle with occasional real work. That's 10 W × 730 h = 7.3 kWh a month. At the US residential average of 18.44¢/kWh, that's $1.35 a month. Sixteen dollars a year.
The closest cloud equivalent I could find — Hetzner's CAX31, 8 ARM vCPUs and 16 GB — runs €15.99 plus €0.50 for the IPv4, about $18.14 a month.
That's 13× the cost, for a machine with worse single-core performance that can't run macOS. And that's against a mini you own, where the hardware is sunk. Buy one new to make the comparison fair and cloud still loses: $599 up front, a bit over a third of that back at resale in four years, is about $379 of real depreciation over 48 months — $7.90/month — plus the $1.35 of power, so $9.25/month all-in. Cloud loses that one too, about 2:1.
Unless you turn it off
The CAX31 works out to $18.14 ÷ 730 h = $0.0248/hour, so if you only pay while the machine exists:
| Hours/month | Cloud | vs. mini you own ($1.35) | vs. mini bought new ($9.25) |
|---|---|---|---|
| 30 (1 h/day) | $0.75 | cloud wins | cloud wins |
| 60 (2 h/day) | $1.49 | cloud wins | cloud wins |
| 120 (4 h/day) | $2.98 | mini wins | cloud wins |
| 240 (8 h/day) | $5.96 | mini wins | cloud wins |
| 730 (always on) | $18.14 | mini wins 13× | mini wins 2× |
Two break-evens fall out: $1.35 ÷ $0.0248 ≈ 54 hours a month against hardware you already own, and $9.25 ÷ $0.0248 ≈ 371 hours a month against buying it new.
Under two hours a day, cloud wins. Above it, the closet wins — and if the closet is already occupied, it wins by an order of magnitude.
The exception worth naming: GPUs. A cloud RTX 4000 Ada runs about $0.84/hour. Twenty hours a month is $16.72, against $1,000+ to buy the card. There's no duty cycle at which owning wins for occasional GPU work.
The business number that ends a different argument
A fully-loaded US developer costs roughly $100/hour, or $1.67/minute:
| Infrastructure | $/month | = dev time/month |
|---|---|---|
| One Hetzner CX22, always on | $4.66 | 2.8 minutes |
| One machine0 small, always on | $9.49 | 5.7 minutes |
| Ten CX22s, always on | $46.60 | 28 minutes |
| Twenty CX22s, always on | $93.20 | 56 minutes |
| GitHub Codespaces, 2-core, 160 h/mo | $28.80 | 17 minutes |
A box has to save under three minutes a month to pay for itself. No business declines this on cost, which means every minute spent optimizing the cost of business dev VMs is wasted — the decision was never financial.
The asymmetry, which is the actual finding
Business wants the box always on. Consumer economics only work below roughly a two-hour daily duty cycle — the machine must be off for most of its life. For this user, the desirable steady state is not running. That's not a preference difference. It's an architectural one, and it lands directly on the thing I'd already built: reminal treats idle-but-reachable as the whole point, which for the consumer case means my architecture renders the economically correct state as a failure.
Two smaller things the math settled
Billing granularity is a red herring. A 20-minute session costs about $0.011 by the minute and $0.0248 on Hetzner's hourly. The entire spread is a penny and a half.
For consumers the risk isn't cost, it's forgotten cost. $18/month of VM that someone stopped using is invisible inside a company and a support ticket at consumer scale.