Two hours. That is how long Fly.io gives a new account to learn what running on Fly.io costs — a trial measured as 2 VM-hours or 7 days, whichever comes first, after which a credit card is required and every line on the invoice starts ticking. Two hours is enough time to deploy the sample app. It is not enough time to see a single full invoice, let alone to learn how that invoice behaves across a quiet month, a traffic spike, and a retention-policy change.
And starting this year, the invoice has more behaviors to learn: on January 1, 2026, volume snapshots became a metered line at $0.08 per GB per month, and on February 1, inter-region private network traffic for Managed Postgres started billing at standard data-transfer rates. Two things that read as "included" became meters within 60 days.
This post prices the whole stack, not just the two new lines. Below is a worked line-by-line monthly bill for one typical small production app on Fly.io under 2026 metering, the same workload's all-in number on a flat Hetzner box, what both numbers do across a quiet month and a busy month — and what a 2-hour trial means when the thing you are buying is a bill whose shape you cannot yet see.
The short version, for readers in a hurry:
| One small production app, one month | Fly.io (2026 metering) | One Hetzner CX22, backups on |
|---|---|---|
| Typical month | ≈$14.00 across six metered lines | ≈€5.40 (≈$5.80) — one number |
| Busy month (5x traffic, longer retention) | ≈$40.40 — same app, no new features | ≈€5.40 (≈$5.80) — unchanged |
The rest of this post shows where every dollar in that table comes from, and why the right-hand column never moves.
What actually changed in 2026
Three facts, each with its number. First, Fly.io announced that starting January 1, 2026, volume snapshots bill at $0.08 per GB per month, with the first 10 GB free — first charges landing on the early-February invoice. Snapshots are stored incrementally, but Fly.io keeps automatic snapshots with multi-day retention, so the billed footprint is the volume size times retained copies, not the volume size.
Second, a December 2025 announcement said that from February 2026, inter-region private network usage for Managed Postgres bills at the same rate as existing private network usage, sharing the same free quota, with same-region traffic staying free. December invoices carried a zero-price preview line — a considerate move that also signals the vendor expected the numbers to surprise people.
Third, the on-ramp: Fly.io retired its free tier for new orgs in October 2024, replacing it with a one-time trial of 2 machine-hours or 7 days. The old free allowances let a hobbyist run a small app continuously and watch a full billing cycle take shape. The trial lets you confirm that fly launch works. Those are different things to learn, and only one of them is the price.
None of these changes is a rate hike on an old line — the kind of increase you can comparison-shop. Each one is newly metered surface: traffic that flowed unmeasured gets measured, storage nobody purged gets priced. That distinction matters because a higher price on a line you already model is arithmetic, while a new line is a budgeting unknown. This year added two unknowns in 60 days.
The worked bill: one app, every line, both invoices
Take the modal first production app on the platform: one shared-cpu-1x Machine with 1 GB of RAM running full-time in a single region, a 10 GB data volume, automatic daily snapshots with seven copies retained, about 100 GB a month of public egress, and a dedicated IPv4 address. Nothing exotic, nothing multi-region — the setup Fly.io's own docs describe as the default.
Fly.io's side, line by line, at 2026 rates:
| Bill line | Math | Monthly |
|---|---|---|
| Compute, per-second while started | shared-cpu-1x, 1 GB, 24/7 | ≈$5.70 |
| Volume, provisioned capacity billed hourly | 10 GB × $0.15 | $1.50 |
| Snapshots, 10 GB × 7 retained minus 10 GB free | 60 GB × $0.08 | $4.80 |
| Public egress, North America/Europe | 100 GB within the 100 GB free quota | $0.00 |
| Dedicated IPv4 | flat per address | $2.00 |
| Stopped-machine rootfs | machine runs full-time, none stopped | $0.00 |
| Total | ≈$14.00 |
Two lines deserve a second look. The snapshot line is the largest variable on the invoice at $4.80 — nearly as much as the compute it protects — and it scales with data × retention, the two quantities that only ever grow. The egress line reads $0.00, which looks like generosity until you notice it sits exactly at the edge of the free quota: the 101st gigabyte starts billing at $0.02, and there is no intermediate tier. The free quota is a cliff edge, not a cushion.
The same workload on owned hardware is one Hetzner CX22 — 2 vCPU, 4 GB of RAM, 40 GB of disk, 20 TB of included monthly traffic — at about €4.50 a month, plus automated backups (seven daily slots, one click) at 20% of the server price, roughly €0.90. All-in: about €5.40 (≈$5.80), one number, every month. The 100 GB of egress vanishes inside the 20 TB allowance; the backup copies sit on already-paid capacity with no per-GB meter. This is the correct apples-to-apples comparison — backup protection included on both sides — and the flat side still costs less than half.
Intellectual honesty requires the other half of the ledger: the flat number buys you out of nothing operational. Postgres failover, replica monitoring, point-in-time recovery, and backup-rotation scripts are yours to write and page on. Fly.io's snapshot meter funds automatic daily snapshots with real retention that most self-hosted setups never actually implement — the modal self-hosted backup strategy is a cron job nobody tested restoring from. Keep both halves in mind; the next section is about what happens when the workload stops being modal.
Quiet month vs busy month: the same app, two invoices
A single number is an anecdote; a range is a cost model. Same app, two months of its real life.
The quiet month. Traffic dips to 20 GB of egress — still inside the free quota, still $0. Compute, volume, IPv4 unchanged. Snapshots unchanged too, and that is the point worth pausing on: nothing about a quiet month shrinks the snapshot line. Retention does not autoscale down at night, and nobody shortens backup history because traffic dipped. Fly.io total: ≈$14.00. Hetzner total: ≈€5.40. The meters that can shrink (compute, if you scale to zero) did; the meters that cannot (snapshots, provisioned volumes, IPv4) are the floor.
The busy month. A launch quintuples egress to 500 GB, and an incident scare convinces the team to extend snapshot retention from 7 days to 30. No new features shipped, no architecture changed — the app is identical, the month is different:
| Bill line | Quiet month | Busy month |
|---|---|---|
| Compute + volume + IPv4 | $9.20 | $9.20 |
| Snapshots (7 retained → 30 retained) | $4.80 | (300 − 10) × $0.08 = $23.20 |
| Egress (20 GB → 500 GB) | $0.00 | (500 − 100) × $0.02 = $8.00 |
| Fly.io total | ≈$14.00 | ≈$40.40 |
| Hetzner CX22 total | ≈€5.40 | ≈€5.40 |
The bill nearly tripled while usage, generously measured, grew a fraction of that — and the two lines that moved are the least controllable ones on the invoice. You cannot cache your way out of retained snapshots, and the month you most need your backups (an incident, a growth spike) is the month the retention meter runs hottest. Flat pricing is not cheaper on every workload; it is legible on every workload. The Hetzner number is the same kind of number every time — it moves only when the vendor republishes the catalog.
The metered invoice, by contrast, changes shape between cycles: new lines appear, free quotas get consumed by growth you wanted, and the spike month and the incident month are the same month.
One boundary to state plainly, because the single-region reader deserves it: none of the busy-month pain requires the February inter-region meter. Same-region private traffic is free, and co-locating app Machines with the database is Fly.io's own stated advice. But notice what that advice concedes — the platform now financially rewards you for not using the multi-region topology it spent years selling as the default. And the January snapshot meter applies in every region equally. There is no placement clever enough to dodge backups.
What two hours can and cannot teach you
Return to the trial, because it is the other half of the title and it interacts with everything above. Two VM-hours is enough to verify that deployment works. Here is what it cannot show you, concretely:
- Not one full invoice. Billing is monthly; the trial expires in hours or days. You commit a credit card before ever seeing the shape of a complete bill — how many lines it has, which ones dominate, where your workload sits relative to each free-quota cliff.
- Not the retention multiplier. Seven retained snapshots take seven days to accumulate. During the trial, the snapshot line reads near-zero and looks negligible; it reaches its steady-state $4.80 only after the trial is long over.
- Not the busy month. The $14-to-$40 band above is driven by events — launches, incidents, retention scares — that happen on month timescales. A trial that fits inside an afternoon cannot contain one.
The old free tier, for all its generosity-cost complaints, taught the thing a trial cannot: the shape of your bill across a full cycle. Its replacement teaches deployment mechanics and prices discovery at full metering from day one. That is a defensible business decision — free tiers cost real money — but its cost lands on the smallest teams, the ones doing capacity planning in a spreadsheet, who now budget against a bill they have never seen. "No base plan fee" sounds like the absence of commitment; paired with a 2-hour preview and a growing stack of meters, it is the absence of a number you can plan around.
Who should still pick the meter
None of this makes per-second billing wrong — it makes it a specific bet, and the bet has a clear customer. If your workload is genuinely spiky — idle most of the time, bursting occasionally — Fly.io's per-second compute with scale-to-zero is a case the vendor's own pricing page wins outright, and no flat box can touch "pay nothing while idle." Preview environments, side projects with bursty traffic, workloads that sleep 20 hours a day: the meter is your friend, and the predictability tax is small because the totals are small.
The honest decision rule for everyone else: if you are single-region with a small database, the managed control plane is worth more than the meters cost you — stay, and set a billing alert at 80% of each free quota so the cliff edges do not surprise you. If you run steady-state compute 24/7 with a growing database, lengthening retention, and meaningful egress, price the full six-line bill — not the compute line — against a flat box including your own on-call time for Postgres. The meters punish exactly the topologies that serious apps grow into: replicated, retained, always-on. "It is only $14" is true of the starting point and misleading about the trajectory — and two hours is not enough time to see the trajectory bend.
The meter-expansion pattern is one reason to own the fleet the meters run on. Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with flat bandwidth instead of a per-GB meter. Star the repo on GitHub or deploy your first app today.
Sources
- We are going to start charging for volume snapshots from January 2026 — Fly.io community announcement (rate $0.08/GB/month, first 10 GB free, effective January 1, 2026)
- We are going to start charging for MPG inter-region private network usage from February 2026 — Fly.io community announcement, December 2025 (same rate as existing private network usage, shared free quota, same-region free)
- Fly.io resource pricing — per-second Machine pricing (shared-cpu-1x 1 GB ≈ $5.70/month full-time), volumes $0.15/GB/month provisioned, egress $0.02/GB North America/Europe with 100 GB free, dedicated IPv4 $2/month, stopped-machine rootfs $0.15/GB/month
- Fly.io free trial — one-time trial of 2 machine-hours or 7 days; free allowances removed for new orgs October 2024
- Fly.io pricing history 2017–2026 — free-tier removal timeline and 2-hour trial terms, verified March 2026
- Vercel vs Hetzner in 2026 — CX22 specs (2 vCPU, 4 GB RAM, 40 GB NVMe, 20 TB traffic, ~€3.79–4.59/month)
- Hetzner Cloud backup vs snapshot pricing — automated backups at 20% of server price (7 daily slots), manual snapshots ≈ €0.012/GB/month



