Fly.io's cheapest Machine still costs $2.02 a month. The same app's monthly invoice just grew two new line items that did not exist on last year's bill.
Starting January 1, 2026, volume snapshots cost $0.08 per GB per month after the first free 10 GB. Starting February 1, 2026, inter-region private network traffic for Managed Postgres (MPG) moved off the bundled price and onto granular bandwidth metering — free inside one region, billed cross-region at $0.01/GB inbound and $0.02/GB outbound, with a zero-price preview line showing on December 2025 invoices. Neither meter touches a single-region hobby app. Both bite the exact multi-region, replicated topology Fly's own docs recommend for production.
Here is the number you came for — before you read the why, with both extremes shown so you can find your own row.
The answer up front: two workloads, three bills each
Two reference workloads, priced from Fly's public pricing page and the two January/February change notices, against one Hetzner CX22.
Workload A — single-region hobby: 1× shared-cpu-1x 256 MB (24/7), one 10 GB volume provisioned with ~4 GB of actual data, automatic daily snapshots (5-day retention) enabled, no cross-region traffic. This is the app most Fly tutorials still price.
Workload B — multi-region production: 2× shared-cpu-1x 256 MB in ord + fra, two 20 GB volumes (40 GB provisioned, ~20 GB actual data), MPG Postgres primary + standby across regions, ~50 GB/month cross-region replication + app read traffic, 5 daily snapshots of the data volumes, 100 GB public egress.
| Fly.io — before Jan/Feb 2026 (snapshots + MPG private net = $0) | Fly.io — after (with both new meters, range shows retention × replication sensitivity) | Same containers on Hetzner CX22 (2 vCPU / 4 GB / 40 GB / 20 TB included, €3.79 ≈ $4.10) | |
|---|---|---|---|
| A. Single-region hobby | ~$7.12/mo — compute $2.02 + volume 10×$0.15=$1.50 + 100 GB egress $2.00 + shared IPv4 $0* + snapshots $0 + private net $0 | ~$7.12/mo — identical. 4–8 GB of snapshot storage sits under the 10 GB free line; no cross-region traffic to meter. Delta: $0 | €3.79/mo flat — 20 TB already paid for; snapshots are local restic/Storage Box, cross-region is not a concept. Over 20 TB: ~€1/TB |
| B. Multi-region production | ~$52.04/mo — compute 2×$2.02=$4.04 + volumes 40×$0.15=$6.00 + MPG ~$38 + 100 GB egress $2.00 + dedicated IPv4 $2 | ~$52.94 – $61.24/mo — base + snapshots $0.40–$3.20 (15–50 GB stored above free) + MPG private net $0.50–$6.00 (25–200 GB cross-region). Delta: +$0.90 to +$9.20 (≈2–18%) | €3.79–€7.58/mo — one CX22 runs both app + Postgres via Docker/K8s ($4.10); two for HA is €7.58. No new line appears in month 6 because traffic stayed the same. |
* New orgs get one shared Anycast IPv4/IPv6 free; a dedicated IPv4 is $2. Many hobby apps still see $0 here. Production with a dedicated Egress IP (billed from Jan 1 2026 at $3.60/mo per address) would add that row — another 2026 line item this table leaves out to stay conservative.
Two things to read off this before you read anything else:
- The hobby app's delta is zero. If your app is one region, one volume, and your data stays small, the January/February changes are invisible. The 10 GB free snapshot cushion covers a 10 GB volume's daily snapshots with room to spare.
- The production app's delta is not a price hike — it is a meter-count increase. Each new row is small ($0.40 here, $1.50 there). The effect is that the invoice now has seven ways to grow month-to-month instead of five. That is what makes "just compare the $2.02 sticker" fail as a budgeting method, even when the absolute dollars this month look modest.
The rest of this post shows where every row comes from, how to reproduce the math, and where the flat-rate box still loses.
What exactly changed in January and February 2026
Fly's published pricing does not jump on a single page — it arrives as Fresh Produce announcements that later become a pricing-table row. Two shipped back-to-back.
January 1, 2026 — volume snapshots billable
The volume snapshots announcement is short: from January 1, 2026, snapshot storage costs $0.08/GB per month, first 10 GB free each month, pro-rated to the hour. First charges appeared on February 1 invoices.
Details that matter for the recompute:
- Enabled by default. New volumes get automatic daily snapshots with 5-day retention. You have to opt out via
fly volumes snapshotsconfig. Most teams never touch the default. - Stored size, not provisioned size. A 40 GB volume with 5 GB of actual data snapshots as ~5 GB, not 40 GB. Fly's pricing note: "You're only charged for the actual data stored — if you've written 1 GB to a 10 GB volume, you'll be charged for around 1 GB of snapshot storage."
- Retention multiplies it. Five daily snapshots of a dataset that churns 20% a day do not cost one snapshot — they cost roughly five incremental snapshots. A write-heavy Postgres WAL churns faster than a static asset volume at the same provisioned size.
Before January 2026 that row was $0 regardless of retention. After, it is $0 under 10 GB stored, then $0.08 per GB beyond — small in a quiet month, metered in a busy one.
February 1, 2026 — MPG inter-region private networking billed
The MPG private-network announcement reads: starting February 2026, inter-region private network usage for Managed Postgres is billed. Same-region private traffic stays free. A zero-price preview line appeared on December 2025 invoices (with incomplete data — collection started December 3) so teams could see the meter before it burned dollars, with first real charges on the March 1 invoice.
The rate underneath is Fly's granular bandwidth schedule, already documented for non-MPG private traffic: same-region private transfer free, cross-region $0.01/GB inbound / $0.02/GB outbound. Hostinger's current comparison summarizes the February change as "inter-region private networking is billed at machine rates" — Fly's forum frames it narrower as "for MPG" because MPG had been exempt from the granular schedule while ordinary app-to-app private networking already had the same-region-free / cross-region-billed split since 2024.
Two adjacent 2026 billing changes sit beside these: app-scoped egress IPs billed from January 1, 2026 ($3.60/mo per IPv4) and persistent volume storage at $0.15/GB/month that bills even when Machines are stopped — neither new, but both frequently missed when teams compare only compute.
Method: inputs you can re-run for your own app
Comparisons that pick one flattering workload prove nothing. We show a low end where the new meters do nothing and a high end where they do, and we surface the sensitivity so you can interpolate.
Fly rates used (all USD, monthly, region: ord/fra ~ Amsterdam table; sjc/sin carry small regional markups):
- shared-cpu-1x 256 MB: $0.00000078/sec = $0.0028/hr = $2.02/mo (730 hrs, always-on). Source: Fly pricing table.
- Volume storage: $0.15/GB/month provisioned, bills even when Machines are stopped.
- Volume snapshots: $0.08/GB/month stored above 10 GB free, hourly pro-rated.
- MPG: ~$38/mo for the two-node HA Starter shape (Fly's announced entry shape; single-node scale-down is not offered — all MPG clusters are HA). Larger MPG plans are higher; we use the floor so the comparison is not padded.
- Private cross-region: $0.01/GB in + $0.02/GB out (granular schedule). Same-region = $0.
- Public egress: $0.02/GB NA/EU (the rate most Fly tutorials quote; Fly's egress split runs $0.02 for NA/EU up to $0.12 for Africa/India, and H1 2026 reporting already tracks that spread).
- IPv4: one shared Anycast free per org; dedicated $2/mo; app-scoped Egress IPs $3.60/mo from Jan 2026 (left out of the main table to keep it conservative — add it if you need a static egress).
Hetzner rate used:
- CX22: 2 vCPU / 4 GB RAM / 40 GB SSD / 20 TB traffic included for €3.79/mo (ex-VAT, ~$4.10). Overage: ~€1/TB in EU/US, ~€7.40/TB in Singapore. Source: Hetzner Cloud pricing, widely mirrored in community cost guides. CX22 is the deliberate "cheapest flat" pick; a three-node HA fleet on CX22s is €11.37, still under one MPG cluster's base.
Everything below is arithmetic on those inputs.
Workload A: single region — where the new meters change nothing
Take the app behind most Fly "deploy in five minutes" tutorials:
- 1× shared-cpu-1x 256 MB, always-on: $2.02
- 1× 10 GB volume (4 GB actual data): 10 × $0.15 = $1.50
- Snapshots: daily × 5-day retention, incremental storage ~4–8 GB → under 10 GB free → $0 (even at full 10 GB stored, still $0). Disable snapshots and it stays $0; keep them and it stays $0 until you store past 10 GB.
- Private networking: single region → $0
- Egress: 100 GB × $0.02 = $2.00 (a generous allocation for a hobby app; 10 GB would be $0.20)
- IP: shared free → $0
Total: ~$5.52 before and ~$5.52 after with 100 GB egress, ~$3.52 with 10 GB egress (add $2 for a dedicated IPv4 if you need it, add $3.60 for an Egress IP). Either way the January/February changes are a rounding error here.
On Hetzner, the same container on one CX22 is €3.79 flat with 20 TB included. Snapshots are a cron + restic to a Storage Box or another CX volume — not a billing event. The flat box is cheaper in absolute euros, but at this scale the hosting delta is under a coffee and the hosted path buys zero-ops deploys, preview apps, and a team that never patches a kernel. Many teams should still pick Fly here.
The new meters become material only when an app graduates past "one of everything in one region."
Workload B: multi-region production — line by line
This is the topology Fly's production guidance implies: app Machines in two regions for latency and failover, MPG Postgres with a standby in the second region so the 6×/hr health-check failover actually has somewhere to fail to. It is also the first topology where both new meters fire at once.
Base that did not change
| Dimension | Math | Monthly |
|---|---|---|
| Compute — 2× shared-cpu-1x 256 MB | 2 × $2.02 | $4.04 |
| Volumes — 2× 20 GB (40 GB provisioned) | 40 × $0.15 | $6.00 |
| MPG Postgres HA (floor plan) | published entry | ~$38.00 |
| Public egress — 100 GB | 100 × $0.02 | $2.00 |
| Dedicated IPv4 | $2.00 | |
| Subtotal — billed before and after | $52.04 |
Storage and MPG dominate. Compute — the $2.02 sticker — is 8% of this base. That ratio is why comparing only compute misprices the platform.
New meter 1: snapshots — retention × churn, not provisioned GB
Assumptions: 20 GB of actual data across the two volumes, daily snapshots, 5-day retention, hourly pro-rated, first 10 GB free.
- Low churn / deduplicated (15 GB stored): (15 − 10) × $0.08 = $0.40
- Mid churn (30 GB stored — one full logical copy): (30 − 10) × $0.08 = $1.60
- High churn / write-heavy Postgres (50 GB stored): (50 − 10) × $0.08 = $3.20
Fly's note that snapshots bill on stored bytes makes this highly dataset-dependent. A 40 GB provisioned volume that holds 3 GB of logs and snapshots to 3 GB never pays this line. A 40 GB Postgres volume with 20 GB of live data and five rolling daily snapshots at 30–50 GB stored does. The "first 10 GB free" is the reason workload A's 8 GB never trips it.
Takeaway for this line: $0.40–$3.20/mo for the production shape, $0 for the hobby shape. Not the line that makes anyone migrate — but a line that did not exist last year.
New meter 2: MPG inter-region private networking — replication distance matters
Same-region private traffic is still $0. Split the standby into a second region and WAL/streaming replication plus cross-region app reads cross the meter.
Granular rates: $0.01/GB inbound, $0.02/GB outbound. Effective round-trip for replication is roughly $0.03/GB if you count both sides; some teams model only outbound at $0.02/GB to be conservative. We show both.
| Cross-region traffic (replication + cross-region reads) | At $0.02/GB (outbound only) | At $0.03/GB (round-trip proxy) |
|---|---|---|
| 25 GB — light, mostly-idle Postgres | $0.50 | $0.75 |
| 50 GB — moderate OLTP | $1.00 | $1.50 |
| 100 GB — busy, or app fans out cross-region reads | $2.00 | $3.00 |
| 200 GB — write-heavy, or analytics replica | $4.00 | $6.00 |
A Postgres that replicates ~1–2 GB a day plus app traffic lands near 50 GB/month. An analytics replica that replays a large WAL or a misconfigured app that reads across regions on every request lands at 200 GB without ever serving a public egress byte.
Range for this line: $0.50–$6.00/mo for the production shape, $0 for single-region.
Summing it with sensitivity
| Snapshot stored | Private cross-region | New-meter total | Workload B all-in |
|---|---|---|---|
| 15 GB (+$0.40) | 25 GB (+$0.50) | $0.90 | $52.94 |
| 30 GB (+$1.60) | 50 GB (+$1.00–$1.50) | $2.60–$3.10 | $54.64–$55.14 |
| 50 GB (+$3.20) | 200 GB (+$4.00–$6.00) | $7.20–$9.20 | $59.24–$61.24 |
That is the whole effect of January and February in dollars. For the canonical production shape it adds 2–18% on top of a base that already mixed compute, volumes, MPG, and egress.
Same topology on a flat Hetzner box — what "the disk and the network are just there" actually means
One Hetzner CX22 — 2 vCPU, 4 GB RAM, 40 GB SSD, 20 TB traffic — is €3.79/mo (~$4.10). Put the same containers and Postgres on it (Docker Compose, or K3s, or a Bex MachineDeployment pointing at CX22s) and every row that grew above becomes flat:
- Compute: €3.79 whether the Machine idles or not. There is no per-second meter.
- Volumes: 40 GB included on the box. Add a 40 GB Cloud Volume at €2.00/mo if you want separation, but there is no "$0.15/GB billed while stopped" — stopped is still billed for Cloud Volumes, but it is a flat ±€2, not a per-GB curve.
- Snapshots: Hetzner Snapshots exist as a billed feature (€0.011/GB/month for backups in some pricings), but most self-hosted teams roll
restic/pgBackRestto a Hetzner Storage Box BX11 (€3.30 for 100 GB) or to R2 with zero egress. The point is not that backups are free — it is that backup storage is a flat you chose, not a second meter the platform adds between invoices. - Inter-region traffic: There is no second Hetzner region to cross on one box. Run two CX22s in
fsn1andhel1and traffic between them rides Hetzner's included 20 TB per box. Hetzner's EU/US overage is ~€1/TB; even 200 GB cross-region is €0.20, not a separate private-networking product. - Egress: 100 GB is 0.5% of the 20 TB included pool. The Fly egress row that was $2.00 on 100 GB is $0.00 on the flat box until you pass 20,000 GB.
Two-way delta:
- Workload A: Fly ~$5.52 vs Hetzner €3.79 (−$1.40) — mostly a wash, hosting ergonomics outweigh the euros.
- Workload B: Fly ~$53–$61 vs Hetzner €3.79 (single box) or €7.58 (two for HA) — ~7–16× cheaper flat, even before you count that Hetzner's 20 TB swallows the 100 GB egress that was $2 on Fly. Two CX22s for HA (€7.58) still undercut Fly's base $52 by ~$44 before the new meters are counted.
Two honest debits on the flat side that the delta table hides:
- You operate it. Patching, Postgres failover (Patroni/Stolon/repmgr vs Fly MPG's automatic HA), snapshot restore drills, and on-call are now your problem. The $38 MPG line is not just bytes — it is a pager you do not carry. A flat number that omits operator time is a partial price.
- Hetzner's catalog itself is not flat forever. The June 15, 2026 repricing lifted CX/CAX ~33% and CCX/CPX 113–175% depending on family. A CCX13 fleet tripled in a single notice. Picking CX22/CAX11 is the cost discipline now; defaulting to CCX because it was the "dedicated" value twelve months ago erases the delta above.
The flat pitch is not "Hetzner never raises prices." It is that when traffic doubles, the number you already pay does not.
Why a growing meter count costs more than any single new meter
Each new line is defensible on its own. Snapshots consume real disk. Cross-region traffic consumes real backbone. Billing for them is not unreasonable. What changes with each addition is predictability, not just sum.
A bill with three meters (compute + volumes + egress) has three ways to spike between invoices. A bill with five (add snapshots + private networking) has five. The 2026 Fly production invoice now has at least seven independently moving dimensions before edge extras: compute, volumes, volume snapshots, MPG, private networking, public egress, and IPs — and that is before GPU Machines (now deprecated, unavailable after August 1, 2026), Egress IPs (now billed), and snapshot retention policies the operator never set intentionally.
That growth is the pattern to watch, not any one price. A January row for storage, a February row for traffic, a prior year's removal of the permanent free tier and addition of a 2-hour/7-day trial, egress splits from $0.02 NA/EU to $0.12 in Africa/India — each line reads as "small." Together they make invoice shape a function of architecture decisions (retention days, replica region, read locality) that previously had no dollar consequence. Teams discover the cost of a second region at invoice time, not at deploy time.
A flat box inverts that: the second region's cost is a second €3.79 you chose when you added the Machine, visible in the dashboard before it runs. The replication traffic, snapshot retention, and cross-region reads that move the Fly invoice have no counter on Hetzner's side — they are already inside the 20 TB you already bought.
That is why "the bandwidth and the disk are just there" lands sharper each time a new meter appears, even when the first invoice after the change adds only a dollar.
When Fly still wins — and how to keep its bill honest
This is not a "never use Fly" post. There are shapes where Fly's usage-based pricing is the whole point:
- Scale-to-zero / bursty. An app that idles 80% of the month pays per-second compute ($2.02 is the always-on price; idle Machines billed only for the integer seconds they run plus $0.15/GB volumes while stopped). Hetzner bills €3.79 while idle.
- Global anycast + WireGuard mesh. Fly's private networking is a real product — 6PN mesh, automatic DNS, no VPC to wire — and same-region free makes a single-region Fly app cheaper in networking complexity than rolling WireGuard between Hetzner regions yourself.
- Zero ops Postgres. MPG's HA, daily snapshots, and automatic failover out of the box are worth the $38+ line for teams that never want to run
pg_auto_failoverthemselves.
If you stay on Fly, three settings directly control the two new 2026 lines:
- Snapshot retention. Audit
fly volumes snapshots listand drop retention from 5 days to 2 for static volumes, or disable snapshots entirely on volumes that already ship backups to R2/Storage Box. Every retained daily snapshot past 10 GB stored is $0.08/GB. - Replica locality. Keep MPG standby in the same region as primary unless latency/failover policy requires a cross-region standby. Same-region private traffic is still $0. Same decision gates the 2024 granular schedule — now it gates MPG too.
- App read locality. Replicas of the app in a second region that read from a primary-region Postgres on every request generate cross-region traffic on every request. Serve reads from the local region or cache at the edge.
Do not benchmark Fly on a single-region hobby app and extrapolate to a multi-region production topology — the new meters only appear in the second case.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. A MachineDeployment that says cax11 instead of a second invoiced region keeps the network traffic and the snapshots inside capacity you already own. Star the repo on GitHub or deploy your first app today.
Sources
- Fly.io Fresh Produce — "We are going to start charging for volume snapshots from January 2026" — $0.08/GB/mo, first 10 GB free, hourly pro-rated, 5-day daily default; first charges February 2026.
- Fly.io Fresh Produce — "We are going to start charging for MPG inter-region private network usage from Febuary 2026" — MPG inter-region private net billed from Feb 2026; same-region free; Dec 2025 zero-price preview.
- Fly.io Docs — Resource Pricing — shared-cpu-1x 256 MB $0.00000078/s = $0.0028/hr = $2.02/mo (730 hrs); volumes $0.15/GB/mo; granular bandwidth schedule (same-region private free, cross-region $0.01 in / $0.02 out; public egress from $0.02/GB NA/EU).
- Fly.io Fresh Produce — Billing for App-Scoped Egress IPs starts Jan 1, 2026 — $3.60/mo per egress IP; useful context for "growing meter count 2026."
- Hostinger / Techsy.io comparisons (2026) — summaries that capture the February private-networking change as billed at granular/machine rates and egress splits.
- Hetzner Cloud Pricing — CX22 2 vCPU / 4 GB / 40 GB / 20 TB for €3.79/mo; overage ~€1/TB EU/US — cited via community cost guides and Hetzner's official pricing pages.