Skip to main content

Fly.io Quietly Metered Three More Things in 2026 — Here's What It Actually Costs Your Indie SaaS

9 min readDora NodaDora Noda
Share

Between January and February 2026, Fly.io turned on three new meters it had never billed before: volume snapshot storage, app-scoped egress IPs, and inter-region private network traffic. None of the three made a blog-post-worthy headline. Each shipped as a matter-of-fact community announcement, a line in the changelog, a new row on the invoice.

Fly's own numbers say this is a non-event for most people: about 98% of customers see no new charge at all, and of the remaining 2%, roughly 83% see less than a 10% bill increase. That's a genuinely honest disclosure, and it means the "Fly.io is nickel-and-diming everyone" framing that followed in some corners of the internet isn't quite right. The more useful question isn't "did my bill explode" — it's what specifically changed, what it costs for a real topology, and where the same setup lands if you own the box instead of renting it. Here's the identical two-region Postgres-backed stack, priced before and after:

SetupMonthly cost
Fly.io, pre-2026 metering$74.24
Fly.io, with 2026 meters$79.68
Self-hosted (2× Hetzner CX22 + 1 Storage Box)≈ $20.29

The new Fly meters add about $5.44/month here — a real but modest 7% bump, in line with Fly's own disclosure. The rest of this post shows exactly where that $5.44 comes from, what makes it grow past 20% for a slightly more cautious setup, and why the self-hosted column barely moves no matter which knobs you turn.

What actually changed, and when

Three separate changes landed inside about six weeks of each other:

ChangeEffective dateRateSource
Volume snapshot storageJan 1, 2026 (billed from Feb invoices)$0.08/GB-month, first 10 GB/month freeFly.io community
App-scoped egress IPsJan 1, 2026Static egress IP billed like a dedicated IPFly.io community
Inter-region private networkingFeb 2026 (Managed Postgres; general Machines traffic same window)$0.006/GB (NA/EU), $0.015/GB (APAC/SA), $0.05/GB (Africa/India)Fly.io community, Fly.io pricing

Each change is defensible in isolation. Snapshots consume real storage — Fly's default is a daily auto-snapshot with 5-day retention, and someone has to pay for that disk. A static egress IP is a discrete, allocable resource, same as a dedicated inbound IP has always cost $2/month. Cross-region WireGuard traffic between Machines rides real inter-datacenter links, and same-region traffic stays free — only the part that actually costs Fly money got a price tag.

What matters isn't that any single line is unreasonable. It's that this is the fourth time since 2024 that something previously bundled into "the price of running on Fly" became its own metered line: the 2024 removal of the free Hobby/Launch/Scale tiers (three free shared-cpu VMs, 160 GB bandwidth) was the first. Snapshots, egress IPs, and inter-region networking are the second, third, and fourth. That's not a one-off correction — it's the shape every hosted platform eventually takes as it matures from "generous flat price to acquire users" to "itemized to match cost." Render's April 2026 egress repricing and Heroku's move into sustaining-engineering mode are the same underlying pattern wearing different clothes.

The line-by-line bill

Price a stack most indie teams actually run: a web service, a background worker, and a Postgres primary with a cross-region read replica for basic redundancy — the setup Fly's own HA guidance points people toward. Everything on shared-cpu-1x for the app tier, performance-1x for Postgres:

Line itemFly.io tierMonthly
Web serviceshared-cpu-1x, 256 MB$2.02
Background workershared-cpu-1x, 256 MB$2.02
Postgres primary (compute)performance-1x, 2 GB$31.00
Postgres primary volume20 GB$3.00
Postgres replica, 2nd region (compute)performance-1x, 2 GB$31.00
Postgres replica volume20 GB$3.00
Egress, ~60 GB/mo (NA/EU)$0.02/GB$1.20
Pre-2026 subtotal$74.24

Now add the three 2026 meters, at realistic (not worst-case) usage:

New line itemAssumptionMonthly
Volume snapshotsDaily auto-snapshot, 5-day retention, ~3 GB/day of incremental change across 2 volumes → 30 GB stored, 10 GB free$1.60
Inter-region replication traffic~40 GB/month primary→replica WAL traffic, NA/EU rate$0.24
App-scoped egress IPOne static egress IP for a payment-processor/webhook allowlist$3.60
New meters subtotal$5.44
Post-2026 total$79.68

$5.44 is a 7.3% increase — small, and consistent with Fly's own "most customers barely notice" claim. The static egress IP is the biggest single new line here, not the snapshot or networking charges everyone talked about — which is itself the useful finding: the meter that gets announced isn't always the one that shows up on your invoice.

Where it stops being small

That 7% number holds only for a specific, moderate assumption set. Move any one knob and the delta grows, and it's worth seeing how far before drawing conclusions:

ScenarioNew metersTotal billIncrease over $74.24
Default 5-day snapshot retention, no egress IP$1.84$76.082.5%
Default retention + static egress IP (above)$5.44$79.687.3%
30-day snapshot retention (a real ask if you want a month of restore points) + egress IP$17.44$91.6823.5%
Same as above + a third region (a second read replica for global latency)$17.44 + ~$37 more compute/volume/snapshot≈ $128~73%

The pattern is exactly what you'd expect from a metering model: cost scales with the number of independently-metered resources you run, not with the size of your app. A single-region hobby project barely feels this. A team that added a second Postgres replica for compliance-grade backup retention, or a third region for latency, now has three volumes accumulating snapshots, three sets of inter-region traffic, and possibly multiple egress IPs — and the bill compounds across every one of them. That's the structural risk: none of the individual meters looks alarming, but they multiply with the exact kind of resilience investment a growing indie SaaS is supposed to make.

The same topology, self-hosted

Run the identical six resources — two app processes, a Postgres primary, a Postgres replica in a second location, their volumes, and daily backups — on owned hardware instead:

Line itemDetailMonthly
App box (web + worker)Hetzner CX22, 2 vCPU / 4 GB / 40 GB NVMe, region A≈ $4.83
Postgres primary boxHetzner CX22, region A≈ $4.83
Postgres replica boxHetzner CX22, region B≈ $4.83
Block storage volumes20 GB × 2, $0.0572/GB-mo (post-April-2026 rate)≈ $2.42
Backup storage (Storage Box, covers snapshots)1 TB — far more than the ~30–170 GB scenarios above need≈ $3.37
Inter-region private traffic (primary ↔ replica)Free — Hetzner does not meter traffic between your own servers$0.00
Egress, static IPsIncluded in each box's bandwidth allowance; no separate IP meter$0.00
Total≈ $20.29

The Fly bill moves from $74 to $80 to $92 to $128 as you add resilience. The Hetzner bill barely moves at all — the two resources Fly just started charging for, private inter-node traffic and snapshot storage, are the two things a self-managed box either gives away for free (private networking between your own machines) or lets you buy in bulk for pennies (a 1 TB backup target is overkill at any of the scenarios above, and it's the same $3.37 regardless of how many volumes you're backing up). That's not a Fly-specific failing — it's the same structural fact behind every hosted-vs-owned comparison: a platform has to itemize and price every resource it hands you, because it's paying for all of them too. Hardware you own doesn't bill itself for using its own network.

What the $20 doesn't include

The Hetzner column isn't free lunch, and pretending otherwise would undercut the honest framing this post is going for. What Fly's $80 buys that three raw boxes don't:

  • Managed Postgres failover. Fly (and Fly Postgres specifically) handles primary promotion if the primary dies. On three Hetzner boxes, you configure and test that failover yourself — Patroni, repmgr, or a supervised script — and an untested failover path is a false sense of safety.
  • Platform-level deploys, rollbacks, and health checks. fly deploy and its rollback path are gone the moment you're on raw boxes; you need a deploy tool on top.
  • TLS and routing. Fly terminates HTTPS and load-balances for you. On owned boxes, that's Caddy or Traefik with ACME, configured once and then largely left alone.
  • Your time when something breaks at 2 a.m. This is the real line item hosted platforms are selling, and it doesn't show up on either invoice.

This is exactly the gap a self-hosted PaaS layer exists to close — not by making the boxes free, but by putting the git-push deploy, managed TLS, and rollback experience back on top of hardware you already priced out above.

The honest read

Fly's 2026 metering wave isn't the villain story some threads made it out to be — the company disclosed the numbers, and for a majority of accounts the increase is genuinely small. But "small for most people" and "structurally one-way" are both true at once. Four unbundling events in two years is a trend, not a rounding error, and the meters that just got added — snapshots, egress IPs, inter-region traffic — are precisely the ones that compound as an indie SaaS does the responsible thing and adds a second region or a longer backup window. Price your own stack against the table above before you decide whether that trend is background noise or the thing that finally moves you to owned infrastructure.


Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with private inter-node networking and backups that don't show up as a new meter every year. Star the repo on GitHub or deploy your first app today.

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex