What you give up, and what you get back
Hobbyist is not a business and has nothing to sell you, which means this page has no reason to be an advertisement. Rows it loses stay in the table and say so. Every price is dated, and every assumption behind a scenario is printed next to it rather than in a footnote.
The short version
If you have ten mostly-idle side projects, Neon's free tier and Cloudflare's free tier both cost nothing and are genuinely good. That is the honest starting point, and no scenario below is rigged to hide it.
Hobbyist is worth running when you want the box to be yours, when your projects outgrow a free tier, when you want a Postgres and an app and a worker and a queue in one namespace on one machine, or when you would simply rather not be a row in somebody's usage table. It is also v0-alpha, and that is the row at the bottom of the parity table.
Feature by feature
| Hobbyist | Cloudflare | Neon | Supabase | Fly.io | |
|---|---|---|---|---|---|
| Postgres | yes1 | no | yes | yes | yes |
| Scale to zero | yes | n/a2 | yes | partial3 | yes |
| Wake on connect | yes4 | n/a2 | yes | no3 | partial5 |
| Runs on hardware you own | yes | no | no | partial6 | no |
| Self-hosted, and still sleeps | yes7 | no | no | no6 | no |
| Database branching | no8 | partial | yes | yes | no |
| Dashboard / studio | partial9 | yes | yes | yes | yes |
| HTTP apps from a Dockerfile | yes10 | partial | no | no | yes |
| Workers / edge functions | yes11 | yes | partial | yes | partial |
| Durable Objects | yes12 | yes | no | no | no |
| Queues | partial13 | yes | no | partial | no |
| Object storage | no14 | yes | yes | yes | partial |
| Backups you can restore | partial15 | yes | yes | yes | yes |
| Point in time recovery | no16 | partial | yes | yes | partial |
| Custom domains and TLS | partial17 | yes | n/a | yes | yes |
| MCP tools for agents | yes18 | yes | yes | yes | no |
| Multi-region | no19 | yes | yes | yes | yes |
| Auth as a service | no19 | yes | yes | yes | no |
| Realtime subscriptions | no19 | yes | no | yes | no |
| Walk away with your data | yes20 | partial | yes | yes | yes |
| Production ready today | no21 | yes | yes | yes | yes |
- Postgres 18, unmodified, on a plain data directory. The reliable part of the project.
- Cloudflare has no managed Postgres. D1 is SQLite and Workers are request scoped, so scale to zero is not a feature it has, it is how the platform works.
- Free tier projects are paused after a week of inactivity, and resuming is manual. That is pausing, not sleeping, and it is capped at two active projects.
- A proxy speaking the Postgres wire protocol holds the connection open, starts the container, waits for real readiness, then finishes the handshake. Measured p50 170ms.
- Fly Machines auto stop and auto start. It is closest to the same idea, on machines rather than on a database connection.
- Self-hosted Supabase is a large multi-container stack that never sleeps. You can own the hardware, and it will run at full cost whether or not anything is using it.
- This is the wedge, and the reason the project exists.
- Copy-on-write branching is Phase 1.5. The cloneTree primitive it needs is written. The feature is not.
- Studio browses tables, runs SQL and reads schema. It is v0-alpha, network exposed by design, and best kept behind a tunnel.
- Any Dockerfile. hobby deploy detects the kind from the directory contents.
- workerd, through Miniflare, which is a documented development tool being run as a server. The tradeoff and its fallback are recorded in ADR 0011.
- Including alarms that fire for an object whose container is stopped, verified against real Docker.
- Consuming works, and a message wakes a sleeping consumer. Producing from inside a container is broken on Linux.
- S3-compatible storage is Phase 3.
- Whole-project snapshots are implemented and tested in the daemon and reachable from no command or route. pg_dump and hobby eject both work today.
- Cut deliberately rather than deferred. PITR means WAL archiving, a retention policy and a restore path that needs its own testing discipline. ADR 0016.
- Caddy is wired and off by default. Certificates are not persisted across a container replacement, which matters against rate limits.
- Fourteen tools over the daemon API. Creating an app or worker from an agent is not wired yet.
- Explicitly out of scope. Adding it needs a decision record arguing the case, and the reason is that scope, not competition, is what kills this project.
- hobby eject hands you a docker-compose.yml and the data directory, and hobby eject --release stops it managing them.
- It is v0-alpha. This row is the one that matters most right now.
Hobbyist costs whatever the machine costs
There is no licence, no per-project fee and no usage metering, so the entire price of running it is the price of the box. Requires Ubuntu, Debian, or macOS, and Docker.
| Basis | Specification | Cost |
|---|---|---|
| Home server, hardware you already own Electricity only. At 15W average and $0.20/kWh that is $2.19 a month. | An old laptop or desktop under a desk | ~$1 to $4 / mo |
| Mac mini M4, bought for this Hardware over three years is $16.64, plus about $0.70 of electricity. Apple rates it at 4W idle and 65W maximum. | 10-core, 16 GB, 256 GB, $599 | ~$17.50 / mo |
| Cheap VPS The tier the cold start budget is written against, and the one that has never been measured. | DigitalOcean basic, 1 vCPU, 1 GiB, 25 GiB SSD | $6.00 / mo |
| Hetzner cloud The best price to performance in this list, and the machine most of this audience actually buys. | CX23, 2 vCPU, 4 GB, 40 GB NVMe, 20 TB traffic | €2.99 / mo |
| Hetzner dedicated Where a self-hosted box stops being a compromise. 64 GB of ECC memory runs a great many sleeping databases. | AX42, Ryzen 7 PRO 8700GE, 64 GB DDR5 ECC, 2 x 1.92 TB NVMe | €46 / mo + €39 setup |
Assumptions in that table
- Electricity at $0.20 per kWh. Yours will differ, and it is the figure to change first.
- Bought hardware amortised over three years, at which point it is still working.
- Bandwidth is not counted: every option here includes far more than a hobby project uses.
- A domain is not counted either. A `.sh` runs roughly $30 the first year and $45 to renew.
All hardware prices checked 2026-08-21.
The rates the scenarios are built from
| Platform | Free tier | First paid tier |
|---|---|---|
| Neon | 0.5 GB storage and 100 CU-hours per project, up to 100 projects. Scales to zero after 5 minutes. Hitting a monthly limit suspends compute until the next billing month | Launch: pay for use with no stated monthly minimum. $0.106 per CU-hour, $0.35 per GB-month. Scale: $0.222 per CU-hour |
| Supabase | 500 MB database, 5 GB egress, two active projects, and projects are paused after a week of inactivity | Pro from $25 per month, 8 GB disk per project then $0.125 per GB, 250 GB egress then $0.09 per GB, $10 of compute credits. Never pauses |
| Fly.io | No free tier for machines | shared-cpu-1x with 1 GB is $5.92 per month in Amsterdam. Volumes $0.15 per GB-month, snapshots $0.08 per GB-month with the first 10 GB free, egress $0.02 per GB in North America and Europe |
| Cloudflare | Workers 100,000 requests a day at 10ms CPU each. D1 5 GB storage. R2 10 GB-month. Durable Objects 100,000 requests a day. Queues 10,000 operations a day | $5 per month minimum. 10M requests and 30M CPU-milliseconds included. R2 $0.015 per GB-month. Queues $0.40 per million operations |
| Hobbyist | Not applicable. There is no tier, no metering and no account | The price of the box, above |
Platform prices read from each vendor's own pricing page on 2026-08-21. Fly.io Managed Postgres is priced separately and is not quoted here, because its pricing page was not reachable at the time of checking. Prices change; this page does not update itself.
Two scenarios, with the assumptions in the open
Ten small side projects, mostly idle
Assumed
- Ten projects, each one Postgres database, about 200 MB of data.
- Each is genuinely used about an hour a day, and idle the rest of the time.
- Negligible bandwidth. No custom domains.
| Option | Monthly | Why |
|---|---|---|
| Neon, free | $0 | Ten projects fit well inside 100. About 30 CU-hours each against a 100 CU-hour allowance, and 200 MB against 500 MB. This genuinely costs nothing |
| Cloudflare, free | $0 | Also nothing, but it is D1 and Workers rather than Postgres, so it is a different application, not a cheaper one |
| Hobbyist on a Hetzner CX23 | €2.99 | All ten on one box. Nine are asleep at any moment, which is the only reason they fit in 4 GB |
| Hobbyist on hardware you own | ~$2.19 | Electricity |
| Fly.io | ~$1.50+ | Machines auto stop, so idle time is cheap, but ten 1 GB volumes still bill at $0.15 per GB-month. Managed Postgres would add its own line |
| Supabase | ~$115 | The free tier allows two active projects and pauses them after a week, so ten needs Pro: $25 plus ten Micro instances at about $10 each, less the $10 credit |
Hobbyist does not win this one on price, and pretending otherwise would be the kind of comparison this project has no reason to publish. It wins on whose machine it is.
Ten real projects: a database, an app and a worker each
Assumed
- Ten projects. Each has a Postgres with 5 GB of data, an HTTP app, and a worker.
- Each is used a few hours a day. 50 GB of database storage in total.
- Custom domains on the ones that face the world.
| Option | Monthly | Why |
|---|---|---|
| Hobbyist on a Hetzner AX42 | €46 | 64 GB of ECC memory and 3.8 TB of NVMe. Thirty resources on one box, most of them asleep at any moment. One price, and it does not move when you add the eleventh project |
| Hobbyist on a Hetzner CX23 | €2.99 | Plausible if usage really is spread out, uncomfortable if several wake at once. 4 GB is the constraint, not the disk |
| Neon, Launch | ~$17.50 + compute | 50 GB at $0.35 per GB-month is $17.50 before a single CU-hour. Databases only: the apps and workers live somewhere else and cost something else |
| Supabase, Pro | ~$115+ | $25 plus compute per project, plus disk beyond the 8 GB included per project |
| Fly.io | ~$60+ | Twenty machines at $5.92 if they were always on, less with auto stop, plus 50 GB of volumes at $7.50, plus Managed Postgres |
The shape that matters is not the number, it is the slope. A box is a fixed price and a platform is a function of what you use. Below some usage the platform is free and the box is a waste. Above it, the box stops moving and the platform does not.
When Hobbyist is the wrong answer
- anything payingIt is v0-alpha with no warranty, written by one person. If someone is paying you for uptime, buy uptime from someone who sells it.
- other people's dataEvery tenant here is assumed to be the same person. There is no isolation between projects beyond what Docker gives you, and hardening that is deliberately out of scope.
- you need PITRPoint in time recovery was cut rather than deferred. Snapshots are written and not yet reachable. Today, backup means pg_dump.
- multi-region, or high availabilityOne box. If a feature needs a cluster it is out of scope, and that is a permanent answer rather than a roadmap item.
- you want auth, realtime, or edgeAll three are explicitly out of scope. Supabase and Cloudflare are good at them and this will never compete there.
The full status page is more detailed and is the thing to read before installing anything.