A typical two-region app on Fly.io costs about $14 a month at 100GB of egress, $32 a month at 1TB, and $112 a month at 5TB — while the same app on a single flat-rate box costs about $15 a month at all three tiers. The crossover sits at a few hundred gigabytes, and two new billing lines that took effect on January 1, 2026 moved it.
That is the short version of what happened to Fly.io pricing this year. The June 2026 "Your PaaS Bill Lied to You" teardown of Railway, Render, Fly.io, and Vercel flagged it first: on top of killing the permanent free tier for new accounts in 2024, Fly.io added two new metered line items in early 2026 — volume snapshots and app-scoped egress IPs. Neither is large on its own. Together with per-region egress tiers and cross-region private-transfer metering, they complete Fly.io's transformation from "a $5 bill with a free allowance" into a genuinely usage-based invoice where every dimension of a multi-region deploy has its own meter. Below is that invoice, worked out line by line for one concrete app, with the egress math and the flat-rate alternative.
| Monthly egress | Fly.io (2 regions, HA) | Flat-rate box (20TB included) | Multiple |
|---|---|---|---|
| 100GB | ~$14 | ~$15 | ≈ parity |
| 1TB | ~$32 | ~$15 | 2.1× |
| 5TB | ~$112 | ~$15 | 7.5× |
The rest of this post shows the receipts behind each row: what the two new lines charge, every other dimension of the 2026 bill, how region multipliers move the math, and the decision rule for when global-edge placement is worth a meter that keeps gaining rows.
The two new lines, itemized
Both lines took effect on January 1, 2026, and both first appeared on the early-February invoice. If your Fly.io bill grew this year without any deploy changing, one of these is probably why.
Volume snapshots: $0.08 per GB-month, first 10GB free. Fly.io takes daily snapshots of persistent volumes, and until this year that retention rode along unbilled. Now every gigabyte-month of retained snapshots past the 10GB free band is metered. A single 10GB volume with default daily retention stays inside the free band; the apps that get bitten are the ones with many volumes — one per region plus a database volume — where a week of dailies quietly stacks past 10GB. Our reference app keeps about 20GB of retained snapshots across two regions, which works out to roughly $1 a month. Small, but it is a line that did not exist last year, and it grows with volume count rather than traffic, so it surprises exactly the teams that thought they had modeled their bill as "compute plus egress."
App-scoped egress IPs: $3.60 per IPv4 per month. Fly.io launched app-scoped static egress IPs in beta in late 2025 — a stable outbound address per app, for allowlisting with third-party APIs and banks — and started billing on January 1, 2026 at the same rate as the legacy machine-scoped egress IPs ($0.005 per hour). IPv6 egress is not billed independently. Not every app needs one, which is what makes it a classic new-line-item gotcha: it is $0 for most apps and $7.20 a month for a two-region app whose payment provider demands an allowlisted source IP. Budget it as a conditional adder, not part of the base.
Neither line is a price hike on an existing meter — that is precisely the pattern to notice. Fly.io's 2026 strategy is unbundling: things that used to ride along (snapshot retention, a stable outbound IP) become separately metered dimensions. The July 2026 Techsy benchmark of Railway, Render, and Fly.io titled its Fly.io section "Usage-Based With a Learning Curve" and quoted the standard developer complaint — Fly.io pricing "requires a spreadsheet" to predict. Every new line item makes the spreadsheet one row longer.
The full 2026 bill, dimension by dimension
Here is every meter on the current invoice, with the rates that matter for a small production app. All of this is pure pay-as-you-go: there is no base subscription, org seats are free, and for accounts created after October 7, 2024 there is no ongoing free tier — just a one-time trial of 2 VM-hours or 7 days, after which the first dollar of usage bills.
| Dimension | Rate (2026) | Notes |
|---|---|---|
| Machines (compute) | shared-cpu-1x 256MB ≈ $2/mo always-on | Per-second billing; fly launch creates 2 machines by default |
| Volumes | $0.15/GB-month provisioned | Bills 24/7, even when the machine is stopped |
| Snapshots | $0.08/GB-month, 10GB free | New Jan 1, 2026 |
| Public egress | $0.02 (NA/EU), $0.04 (APAC/Oceania/SA), $0.12 (Africa/India) per GB | Inbound free |
| Cross-region private transfer | $0.006 / $0.015 / $0.050 per GB by region group | Same-region private transfer free |
| Dedicated IPv4 | $2/mo per app | Shared IPv4 + IPv6 free |
| Static egress IP | ~$3.60/mo per IPv4 | New Jan 1, 2026 (app-scoped) |
| SSL certs | 10 free, then $0.10/mo each; wildcard $1/mo | Per org |
| Managed Postgres | $38/mo Basic minimum, up to $1,922/mo + $0.28/GB-mo storage | No free or hobby tier |
| Stopped-machine rootfs | $0.15/GB per 30 days | Stopped machines still bill for disk |
Three rows in that table deserve a warning label each. First, Managed Postgres starts at $38 a month with no hobby tier, which means "add a database" is the single biggest jump on most small invoices — larger than the entire stateless base. Second, fly launch defaults to two machines for high availability, so the tutorial-following version of "one small app" bills double the compute a newcomer estimated. Third, there are no billing alerts and no spend caps anywhere on the platform; a runaway loop or a misconfigured replica bills until a human opens the dashboard. The spreadsheet is mandatory because the guardrails do not exist.
Egress math at three traffic tiers
Now the worked example. The reference app: a stateless web service with a 10GB volume per region, deployed high-availability in two regions (Amsterdam and San Jose), two shared-cpu-1x 256MB machines per region. Base cost before a single byte leaves the network:
- Compute: 4 machines × ~$2 = $8
- Volumes: 20GB × $0.15 = $3
- Snapshots:
20GB retained minus 10GB free = **$1**
Base total: ~$12 a month. Everything below is egress on top of that base, and this is where region choice stops being a latency decision and becomes a billing decision.
| Monthly egress | Served from NA/EU ($0.02) | Served from APAC ($0.04) | Served from Africa/India ($0.12) |
|---|---|---|---|
| 100GB | $2 → $14 total | $4 → $16 total | $12 → $24 total |
| 1TB | $20 → $32 total | $40 → $52 total | $120 → $132 total |
| 5TB | $100 → $112 total | $200 → $212 total | $600 → $612 total |
Two things to read off this table. First, egress becomes the biggest line item somewhere between 500GB and 1TB in NA/EU — past that point you are not really buying compute from Fly.io, you are buying bandwidth with compute attached. Second, the region multiplier is brutal at scale: the same 5TB costs $100 out of Frankfurt and $600 out of Johannesburg or Mumbai, a 6× spread for the identical app. Multi-region cuts latency for far-away users, but every region whose traffic crosses into the $0.12 tier reprices the whole tier column.
One more meter hides inside multi-region itself: cross-region private transfer. An app in San Jose chatting with its database in Amsterdam pays $0.006–$0.015 per GB for traffic that never touches the public internet. At chatty-app volumes (tens of gigabytes) that is pennies; at analytics-pipeline volumes it is a line item of its own. The fix is architectural — colocate the app and its database in one region so private transfer stays free — but that fix trades away the redundancy the second region was bought for. Meters shape architectures; this one pushes you back toward single-region without ever saying so.
For context, Fly.io's $0.02 NA/EU egress is still the cheapest metered bandwidth in the PaaS tier — Railway charges a flat $0.05 per GB everywhere, and Vercel's overage pricing ($40 per 100GB past the Pro allowance) is what produced the $286 invoice that opened the Medium teardown. Fly.io wins the metered-egress comparison on every provider's home turf. The comparison that actually threatens it is not another meter; it is no meter at all.
The same app on one flat-rate box
The alternative to a meter that keeps gaining rows is a bill with one row. A Hetzner Cloud CPX31 (4 vCPU, 8GB RAM) runs about $15 a month and includes 20TB of outbound traffic; overage past that is about €1 per TB in the EU and US. A Hetzner dedicated box with the same 20TB allowance starts around $45 a month. Our reference app — four shared vCPUs' worth of web serving, 20GB of disk, Postgres self-run on the same box — fits comfortably on the $15 VPS, and all three egress tiers (100GB, 1TB, 5TB) land inside the included 20TB. Total: ~$15 a month at every tier, with the next dollar of bandwidth costing a thousandth of Fly.io's cheapest per-GB rate.
| Monthly egress | Fly.io (2-region HA, NA/EU) | Hetzner VPS (1 box, 20TB incl.) | What the delta buys on Fly |
|---|---|---|---|
| 100GB | ~$14 | ~$15 | Global anycast + HA for $1 less |
| 1TB | ~$32 | ~$15 | Same, for $17 more |
| 5TB | ~$112 | ~$15 | Same, for $97 more |
Read the last column before the middle one, because the honest version of this table prices what each side includes that the other does not. Fly.io's delta buys genuine things: anycast IPs in 18 regions, machines that scale to zero when idle and bill per second when they wake, and two-region redundancy with no failover runbook to write. The Hetzner column's $15 buys none of that — single region, single box, and whatever Postgres backup cron job you remembered to write. It also bills you in ops hours instead of dollars: OS patching, Postgres upgrades, and the 3 AM page are all yours. Teams that price their on-call time at billing rates often find the $17–$97 delta is the cheapest pager replacement on the market.
But the shape of the two bills matters more than any single row. Fly.io's bill is a function of traffic with a slope of $20 per terabyte (NA/EU) that steepens to $120 per terabyte in the priciest regions — plus new rows arriving yearly. The flat-rate bill is a step function: $15 until 20TB, then roughly $1 per terabyte after. For predictable, bandwidth-heavy workloads — asset serving, API responses at volume, anything where traffic grows faster than compute — the metered model's slope is the whole story, and no amount of per-second compute efficiency offsets it. The crossover for our reference app sits around 300–400GB a month; past it, every additional gigabyte is a vote for the flat bill.
When the edge meter is worth it
The decision is not "Fly.io versus Hetzner" — it is "what shape is your workload," and the two 2026 teardowns plus the rate card converge on the same rules:
- Stay on the edge meter when your users are genuinely global and latency-sensitive. If p99 response time across continents is the product — realtime collaboration, gaming backends, interactive APIs — no single-region box competes regardless of price. Pay the meter; colocate app and database per region to keep private transfer free.
- Stay when your load is spiky or mostly idle. Per-second billing with scale-to-zero is the one dimension where Fly.io undercuts every flat-rate box: a staging environment or a nights-and-weekends side project can bill under a dollar a month in compute. Flat-rate hardware charges for idle; meters do not.
- Consolidate when your audience lives in one region. A second region that serves 5% of traffic still bills 100% of its machines, volumes, snapshots, and cross-region chatter. One region on Fly.io — or one box anywhere — halves the base before egress even enters the picture.
- Consolidate when traffic is predictable and bandwidth-heavy. Past roughly half a terabyte a month in NA/EU (less in APAC, far less in the $0.12 regions), egress dominates the invoice and the flat-rate slope wins by an ever-widening margin. This is the asset-serving, bulk-API, AI-agent-orchestration profile: the workloads whose bytes grow faster than their CPU.
- Re-audit yearly, because the rows keep coming. Snapshots and egress IPs were unbilled eighteen months ago. Whatever rides along free today — and today that list is short: inbound transfer, same-region private traffic, shared IPs, ten certs, 10GB of snapshots — is a candidate for next January's invoice. Budget a morning each year to re-run your own spreadsheet against the live rate card; the platforms will not send you a diff.
Zoom out and the pattern is bigger than one provider. Heroku entered sustaining-engineering mode in February 2026, Vercel has repriced four times since 2024, Render restructured its team plans in April 2026, and Fly.io's invoice gains rows every January. The PaaS market is converging on fully metered, spreadsheet-required billing — which is fair, in the sense that meters track costs, and exhausting, in the sense that nobody's side project has a FinOps team. The teams that thrive under it are the ones that treat the invoice as an architecture input: model the bill before the deploy, know their egress tier the way they know their p99, and move the workload to the flattest bill whose shape matches its traffic.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Star the repo on GitHub or deploy your first app today.



