███████ ██ ██████ ██████ ██ ██ ██ ██ ██ ██ ███████ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ███████ ████████ ██████ ██████
January 2026
We launched on Hacker News. Someone commented: "Have fun racing to the bottom."
They have a point. Beating a $4/month Hetzner box sounds impossible. It's not. This post explains how.
TL;DR: $0.02/hr running. $0.50/month parked. Cheaper than Hetzner under 186 hrs/month.
Shellbox is Linux boxes via SSH. It feels like a 24/7 server - your tmux sessions persist, background jobs resume, scp just works - but when you disconnect, the box stops. And so does billing.
Open VS Code, Zed, or a terminal. Connect. That's it. No web console, no "start instance" button, no CLI tools. When you're done, close your laptop. The box suspends, you stop paying, and everything's still there when you come back.
Traditional cloud providers charge you for a VM whether you're using it or not. Hetzner's CX22 (2 vCPU, 4GB RAM, 40GB SSD) costs a flat rate around the clock. Great if you're running a production server. Wasteful if you're a developer who codes a few hours a day.
"But AWS and Azure let you stop instances!" True. AWS t3.medium costs $0.0416/hr when running. Stop it, and you still pay ~$4/month for 50GB EBS storage. Azure B2s is similar. That's 8x our stopped cost, and their running rate is 2x ours.
Developers don't use their dev boxes 24/7. Most of us work 4-8 hours a day, maybe less. Why pay for the other 16-20 hours?
The key insight: Hetzner (and most providers) need to reserve memory for each VM, even when it's idle. Memory is expensive. Our boxes can stop and resume instantly. When stopped, we need zero memory - just disk space for the snapshot.
Our bottleneck is disk, not memory. And disk is cheap.
Let's compare shellbox vs the alternatives for a similar spec (2 vCPU, 4GB RAM, 50GB disk):
| Hours/month | Shellbox | AWS/Azure | Hetzner |
|---|---|---|---|
| 20 hrs | $0.89 | $4.83 | $4.09 |
| 40 hrs | $1.27 | $5.66 | $4.09 |
| 80 hrs | $2.04 | $7.33 | $4.09 |
| 120 hrs | $2.82 | $8.99 | $4.09 |
| 160 hrs | $3.59 | $10.66 | $4.09 |
| 186 hrs | $4.09 | $11.74 | $4.09 |
| 300 hrs | $6.29 | $16.48 | $4.09 |
| 720 hrs (24/7) | $14.40 | $29.95 | $4.09 |
Shellbox formula: running_hrs * $0.02 + stopped_hrs * $0.000694
AWS/Azure formula: running_hrs * $0.0416 + $4/month storage
If you use your box less than 186 hours per month, shellbox is cheaper than Hetzner. That's ~8.5 hrs every weekday, or ~6 hrs/day if you code weekends too. AWS/Azure with stop/start is never cheaper than either - you're paying premium rates for the privilege of stopping.
Won't cheap stopped instances attract crypto miners and other abuse?
Nope. Our running costs are roughly 3x Hetzner's rate. If you want to mine bitcoin or run botnets, you'd do it much cheaper elsewhere. Our pricing model naturally selects for legitimate dev workloads: burst usage with long idle periods.
We're not the only ones trying to solve this. Here's how we compare:
Sprites.dev offers persistent Linux environments with checkpoint/restore. Their pricing: $0.07/CPU-hour + $0.04375/GB-hour. For a 2 vCPU, 4GB RAM instance, that's roughly $0.315/hr while running - over 15x our rate. They use Firecracker too, but charge memory by the hour. Also: no real SSH access, only their CLI/API.
Exe.dev offers persistent SSH VMs at $20/month for up to 25 VMs - but here's the catch: all 25 VMs share a pool of just 2 CPUs and 8GB RAM total. Run a few VMs and you're quickly resource-starved. It's a flat subscription, so you pay whether you use them or not.
AWS and Azure offer pay-as-you-go too - but it's not the same experience. You have to log into a web console to start your instance, wait 30-60 seconds for it to boot, and remember to stop it when you're done or you keep paying. That's not "connect and code" - that's instance management.
| Service | Running Cost | Stopped Cost | Real SSH | Auto Start/Stop |
|---|---|---|---|---|
| Shellbox | $0.02/hr | $0.50/month | Yes | Yes |
| AWS t3.medium | $0.0416/hr | ~$4/month | Yes | No (manual) |
| Azure B2s | $0.0416/hr | ~$4/month | Yes | No (manual) |
| Sprites | ~$0.315/hr | storage only | No (CLI/API) | Yes |
| Exe | $20/month flat | Yes | Always on | |
| Hetzner | ~$4.09/month flat | Yes | Always on | |
Shellbox also offers features beyond the basics: duplicate lets you clone a box instantly - useful for testing changes without risking your setup. Each box gets a web endpoint (https://<box>.shellbox.dev) that wakes the VM on request, so you can expose dev servers without keeping the box running 24/7.
We run on Hetzner auction servers - dedicated hardware at steep discounts. This gives us predictable costs and full control.
The stack: Caddy handles TLS and routes traffic. Behind it, a custom Python SSH server built on asyncssh manages connections. HTTP requests to your box's URL endpoint go through an HTTP proxy that wakes the VM if needed.
Each box runs in a Firecracker microVM - the same technology behind AWS Lambda and Fargate. Sub-second boot times, strong isolation, minimal overhead.
Core/External architecture. The server is split into two parts. Core handles SSH connections - it's intentionally dumb, stateless, and stable. External handles all business logic: VM lifecycle, billing, commands. External runs as a subprocess, invoked fresh for each operation.
This split enables two things. First, fast disconnects: when you close your session, Core returns immediately. It fires off a background call to External which handles the snapshot and cleanup - you don't wait for it. Second, hot-swappable logic: we can update pricing, add new commands (like duplicate), or change billing algorithms without restarting the server or disturbing connected users. The next External call just picks up the new code.
Snapshots. When your last session disconnects, Firecracker pauses the VM and dumps memory to disk. Memory snapshots are memory-mapped files stored on NVMe - the OS pages them efficiently, and resume takes under a second. Rootfs images live on larger HDDs. When you reconnect, we restore from snapshot and you're back exactly where you left off - same processes, same shell history, same everything.
Btrfs and reflinks. Our HDD storage uses btrfs, which enables copy-on-write via reflinks. When you run duplicate to clone a box, we don't copy the entire 50GB disk image - we create a reflink using cp --reflink=auto. This is instant (just metadata), and the clone shares blocks with the original. Space is only consumed as you make changes. Creating a new box from the base image works the same way. This is why duplicate completes in under a second regardless of disk size.
Shellbox isn't for everyone:
But if you're a developer who wants a Linux box to hack on for a few hours a day, we're probably the cheapest option that actually works. Real SSH. Real persistence. Real savings.
Try it: ssh shellbox.dev help