Skip to main content

Fly.io After the Free Tier Died: What Per-Second Usage Billing With New 2026 Line Items Costs Against a Fixed Hetzner Invoice

16 min readDora NodaDora Noda
Share

On October 7, 2024, Fly.io deleted its pricing page's most reassuring sentence. Hobby, Launch, and Scale — the three named plans that told a small team what the maximum bill could be — were gone for every new customer. In their place: one line that sounded simpler and meant something very different. Pay for what you use.

Eighteen months later, the meter has not stood still. Volume snapshots started billing January 1, 2026. App-scoped egress IPs started billing the same day at $3.60 per month each. Managed Postgres inter-region private network usage started billing in February. GPUs were deprecated with an August 1, 2026 sunset. Each line item is individually defensible. Together they are the business model: where a plan used to cap what got metered, now more things get metered over time.

This post prices what that actually costs — the same small-team workload on Fly.io's per-second meter versus a flat Hetzner invoice — and reads the 2026 wave of "Fly.io alternatives" posts as what it is: a live signal about what happens to bill predictability when there is no plan left to predict against.

The bill in 30 seconds — meter versus fixed invoice

Fix a boring, representative workload and price it both places. The numbers below are for a calendar month (730 hours), NA/EU region, VAT excluded. Fly.io pricing from fly.io/docs/about/pricing and 2025–2026 billing announcements; Hetzner from its post-April-2026 price list (existing contracts grandfathered, new orders at new prices).

Fly.io (pay-as-you-go, always-on)Hetzner self-hosted PaaS (bex on CPX22)
Compute — 2 services × shared-cpu-1x / 512 MB, always-on~$3.32 × 2 = $6.64 (per-second, billed only while started; see §3 for RAM math)€7.99 ($8.60) flat — one CPX22 (2 vCPU / 4 GB / 40 GB NVMe) runs both services plus headroom
Postgres~$5–10 (1 GB Fly Postgres / Managed Postgres volume + compute) or external Neon/Supabase equivalent$0 marginal — Postgres as a tenant workload on the same box / volume
Egress — 200 GB/mo$4.00 at $0.02/GB (NA/EU). Same traffic at Fly.io's Africa/India rate: $24$0 marginal — included in Hetzner's 20 TB allowance
Egress IPs (if you need stable outbound IPs)$3.60 per app-scoped egress IP/mo (since Jan 1, 2026)$0 — node's public IP, no per-IP meter
Volume snapshots (if enabled)Metered since Jan 1, 2026Hetzner snapshots/backups ~€0.01/GB or local volume snapshots at disk cost
Typical floor for this stack~$18–$24 (before snapshots/IPs/extra RAM)~$9–$14 flat (CPX22 + volume/backups)

At the low end Fly.io can undercut the flat box. Add the second service's RAM headroom, add 200 GB of egress outside NA/EU, add an egress IP and snapshots, and the ranking flips — which is exactly why "cheapest" is the wrong question. The right question is predictable at what workload. Fly.io's bill moves with every dimension; Hetzner's bill moves when you rescale the machine, and not otherwise.

Sensitivity in one line: at 50 GB egress and one service, Fly.io wins cleanly; at 400 GB egress or three services, the flat box wins; at Africa/India egress pricing ($0.12/GB), Fly.io's egress line alone exceeds the Hetzner box.


What actually changed — October 2024 and the 2026 line items

The plan deletion

Fly.io's October 7, 2024 "We're making pricing simpler" post framed the change as simplification: no more grouping things into Launch or Scale, just pay for what you use. What left with the plans was three things that had nothing to do with simplicity:

  • A cap on what got metered. Under Hobby ($5/mo), Launch ($29/mo), and Scale (legacy pricing) a bundle of usage was included: up to 3 shared-cpu-1x VMs at 256 MB, 3 GB volume storage, and 100–160 GB transfer depending on plan vintage. New organizations created after October 7, 2024 get none of that — they get a one-time trial of 2 machine-hours or 7 days, then pay from the first dollar.
  • A ceiling. A plan is a commitment device: above the included allowance you pay overage, but the dimensions of overage are bounded. Pure usage billing has no bounded dimension list — new billable dimensions can appear without a plan revision.
  • A grandfather with a trapdoor. Existing Hobby/Launch/Scale customers keep their plans and allowances unless they convert to Pay As You Go, delete their payment method, or otherwise churn. The "downgrade" wording in the dashboard to move to Pay As You Go confuses even Fly.io's own forum threads — it reads like a downgrade and behaves like a one-way door.

Fly.io's billing docs are explicit that Fly.io no longer offers plans to new customers. If you bought Launch or Scale before the cutoff you can stay; everyone else is usage-only from day one. The docs and April 2026 price verifications put the smallest always-on shared-cpu-1x at roughly $1.94/mo (256 MB) to $5.92/mo (1 GB, see next section), billed per second in started state, plus RAM add-on, volumes, egress, and the newer lines below.

The 2026 line-item creep

Four billing-surface expansions landed between December 2025 and mid-2026, each announced in Fly.io's Fresh Produce / community forum:

  • Volume snapshots — billed since January 1, 2026. Announced in late 2025, first charges on the February 1 invoice. Previously snapshots were effectively free/unmetered.
  • App-scoped egress IPs — $3.60/mo each since January 1, 2026. Fly.io's December 22, 2025 post priced them identically to the legacy machine-scoped egress IPs: $3.60 per app-scoped IPv4 per month, IPv6 not billed independently. Any app that needs a stable outbound IP for an allowlist now carries a fixed monthly line, a category that did not exist before.
  • Managed Postgres (MPG) inter-region private network — billed since February 2026. Announced December 3, 2025, first charges on the March 1 invoice. Cross-region private traffic for Managed Postgres, previously unmetered, became a billed dimension.
  • GPU Machines — deprecated, unavailable after August 1, 2026. Fly.io's GPU docs mark GPU Machines as deprecated. This is not a price change but a surface reduction: a workload that needed Fly GPUs must move, and the briefly-promoted L40S at $1.25/hr price point matters less than the sunset that follows it.

None of these is a large number in isolation. That is the point. Metering creep is not a single hike; it is the slow addition of new meters where previously there was no meter to watch. A fixed-price Hetzner box cannot add a meter — Hetzner can raise the box price (and did, twice in 2026), but it cannot start metering egress IPs, snapshot storage, or inter-region private traffic as separate line items without changing the product. On a usage-based PaaS, each new meter is a unilateral pricing decision the tenant absorbs.


How the meter actually works

Fly.io's compute billing is per second a Machine is in started state, priced by the CPU/RAM combination. The docs describe it as a preset plus RAM add-on:

  • A Machine billed as shared-1x-cpu@1024MB is the shared-cpu-1x preset (which includes 256 MB) plus 768 MB of additional RAM. You pay the preset price plus the extra RAM at the per-GB rate.
  • The smallest preset, shared-cpu-1x at 256 MB, prices from roughly $1.94/mo always-on (region-dependent, per Fly.io pricing and community-verified snapshots). With the included 256 MB plus add-on RAM, the commonly quoted figures are ~$3.32/mo at 512 MB and ~$5.92/mo at 1 GB — the numbers in this post's TODO and in every 2026 comparison table that actually priced the workload.
  • A Machine that is stopped still incurs a small charge for its root filesystem — $0.15/GB per 30 days of stopped-machine rootfs — so "stopped means free" is not quite true either.

On top of compute, the bill stacks:

  • Volumes: GB-months for persistent storage.
  • Egress: $0.02/GB in NA/EU, $0.12/GB in Africa/India — a 6x regional multiplier that rarely appears in headline comparisons but dominates any media-heavy workload's bill.
  • Anycast / IPs / egress IPs: the new $3.60/mo app-scoped egress IP line, plus any dedicated IPv4.
  • Snapshots and MPG private network: the two new 2026 meters.

For a single-service hobby deploy that sleeps or scales to zero, per-second billing wins — you pay for seconds you ran, which is almost nothing. For the workload this post prices — two always-on services, a database, and real egress — the per-second granularity buys no savings because there are no idle seconds to not bill. The meter runs at 730 hours and every line above is additive.


Bill predictability — three scenarios, same code, different invoices

Predictability is not about the cheapest month. It is about the range between the cheapest and most expensive month for the same code and traffic shape, and how much warning the tenant gets before the range widens.

We run the same three-service stack (API + worker + Postgres) at three traffic shapes. Numbers are rounded; Postgres costed at the low end of managed ($5–10) on Fly.io and as a co-located workload on Hetzner.

ScenarioTraffic shapeFly.io (NA/EU egress)Fly.io (Africa/India egress)Hetzner CPX22 flat (bex)
A. Quiet side project — 1 service, 256 MB, 10 GB egress, sleeps 12h/day, no egress IP~362h running (~50% duty)~$2–$4~$3–$5~$9 flat (over-provisioned)
B. Small team production — 2 services × 512 MB always-on, Postgres, 200 GB egress, 1 egress IP, snapshots on730h always-on~$18–$28~$38–$48~$9–$14 flat
C. Spiky / media-heavy — 2 services × 1 GB, 500 GB egress, 2 egress IPs, snapshots, brief 2x scale-out 40h/mo730h + 40h burst~$35–$55~$75–$95~$9–$14 flat (same box or one rescale to CPX32)

What the table is trying to make visible:

  • Scenario A is the only one where the meter clearly wins. If the app sleeps half the day and ships almost no bytes, per-second billing is a discount machine. This is the demo, the side project, and the portfolio site — the workload the "simpler pricing" post was easiest to defend for.
  • Scenario B is where most small teams actually live, and where the bill is already a range, not a number. On Fly.io the same code costs $18 in one region and $38 in another for identical traffic — before anyone changed the code. On Hetzner it costs one number until you rescale, and rescaling is a tenant decision with a known price.
  • Scenario C shows the compounding problem. Egress is the largest single line on Fly.io at 500 GB ($10 at $0.02 vs $60 at $0.12), and the 40-hour 2x scale-out adds compute that a flat box absorbs as headroom if it was already sized there. The meter is accurate; it is also the reason the invoice cannot be predicted from the architecture diagram alone.

The structural difference is not "metered versus flat." It is who decides when the bill changes. On Fly.io the platform decides when a new dimension gets metered and what it costs; the tenant decides how much they use of it. On Hetzner the tenant decides when to rescale; Hetzner decides what the box costs. In 2026 Hetzner exercised that second power twice (April 1 broad hike, June 15 portfolio standardization with up to 3x jumps on some cloud families) — so "fixed price" does not mean "never repriced." It means repriced as a hardware contract, not as a growing list of line items whose next entry is unknown at signing time.


Why the "Fly.io alternatives" wave in 2026 is a signal, not a roundup

Search any variant of "Fly.io alternative" in 2026 and you get the same shape: not one viral departure essay but a steady spray of comparison posts — DigitalOcean's "10 Fly.io Alternatives for Global App Deployment in 2026," Northflank's Render/Fly.io alternatives pages, Back4App's Heroku-alternatives ranking that slots Fly.io as "pay-as-you-go, ~$5/mo effective starting cost," Techsy's 2026 Railway-vs-Render-vs-Fly.io benchmark that has to open with "Fly.io deprecated the Hobby/Launch/Scale plans ... new signups get a short free trial ... then pay from the first dollar" before any feature comparison can even start.

The through-line in what those posts flag is not performance or DX — Fly.io's DX is widely respected — but predictability at the low end:

  • No plan means no floor to reason from. Every comparison has to reconstruct the floor from per-second math ("~$1.94/mo for the smallest VM" plus "plus RAM, plus volumes, plus egress, plus ...") because there is no plan page that names a floor. Railway's $5 Hobby and Render's $7 Starter, whatever their tradeoffs, at least name a number a team can put in a spreadsheet.
  • New line items appear mid-year without a plan revision to anchor them. The 2026 snapshot, egress-IP, and MPG private-network meters each arrived as a forum post with a date and a rate, not as a new tier. A team budgeting in January did not have those lines in its model; a team budgeting in March did.
  • Egress region as a cost decision is under-surfaced. Fly.io's own pricing puts NA/EU at $0.02/GB and Africa/India at $0.12/GB, but few "alternatives" posts front-load that 6x. Teams serving a global audience discover it on the invoice.
  • The global-edge story cuts both ways. Fly.io's strength — 30+ regions, WireGuard, Anycast — is also why its metering surface is wide: private networking, regions, IPs, and volumes are each a dimension that a single-region PaaS does not meter separately. The alternatives pitch is often less "Fly.io is expensive" than "I did not need 30 regions and I am paying for the abstraction that supports them."

No single one of these is a reason to leave. The wave is a reason to treat "pay for what you use" as a pricing philosophy with a specific failure mode: it optimizes for the workload that uses almost nothing, and its cost curve steepens exactly where a small team stops being a side project.


The decision that actually matters — meter or hardware contract

If you are choosing today, the question is not "is Fly.io expensive." At 2026 list prices it is one of the cheapest ways to run one always-on service in NA/EU. The question is at what workload shape do you want the bill to stop moving.

Usage billing wins when:

  • The workload genuinely idles — scale-to-zero, nightly sleep, or spiky low-average utilization where per-second granularity saves real hours.
  • One service, low egress (under ~50 GB), NA/EU only, no stable outbound IP or snapshot retention. The meter's floor is the floor.
  • You value 30-region edge, Anycast, and WireGuard private networking more than invoice stability, and you want the platform to provision those primitives rather than building them.

A fixed hardware contract wins when:

  • The workload is always-on, multi-service, or egress-heavy — the meter's hours, RAM, and egress lines are all additive with no idle discount.
  • You need to tell finance what next quarter costs before it starts. A Hetzner CPX22 at €7.99/mo (or CPX32 at the next tier) is a number; a usage meter is a distribution.
  • You can absorb bursty build or batch work as headroom on a box you already rent, rather than paying per-second burst compute.

The migration math before you move:

  1. Count services and state. Per-service-fixed platforms (Render) multiply by service; per-resource-metered platforms (Fly.io, Railway) multiply by CPU/RAM-hours; a flat box multiplies by machines. Write the count down before any per-unit price.
  2. Price egress by region, not globally. If any meaningful share of users is outside NA/EU, Fly.io's $0.12/GB rate — and any CDN in front of it — belongs in the model as its own row.
  3. List every line item that exists today and one that might. Snapshots, egress IPs, private-network transfer, and stopped-machine rootfs are each a row on Fly.io; on Hetzner they are either included or priced as hardware, not as new meters. Your 12-month forecast should have a row for "new meter added" on the usage side and "hardware repricing" on the fixed side — because in 2026 both happened.
  4. Model the 90th-percentile month, not the median. Predictability is the cost of the bad month, not the good one. A flat box's bad month is one rescale; a metered platform's bad month is every line moving at once.
  5. Check the one-way doors. Leaving Fly.io's legacy plans for Pay As You Go is one-way; Hetzner existing contracts were grandfathered at old prices until rescale in both 2026 repricings, but new capacity prices at the new level. Know which door you are walking through.

For teams that want the git-push ergonomics without inheriting the meter's open-ended surface, that is the gap Bex.co is built for: git push to a PaaS you own, running on Hetzner hardware under Cluster API, where the invoice is a hardware contract and the platform's own control plane — machines, node pools, revisions — is declarative and API-driven rather than a dashboard of additive meters. The tradeoff is real: you own the machine lifecycle, you own the region choice, you own the backup policy. The upside is that no vendor can add a line item to your invoice without you first choosing a larger box.

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.


Sources

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