SaaSOffers' September 2026 Fly.io review reads like a capstone on the post-Heroku PaaS conversation: the global edge (machines in 30+ regions for low-latency reads), the Postgres-on-Fly story, and a modern CLI and UX that beats Heroku's aging tooling. It lands at the end of a year in which Fly.io finished a pricing break with its past — the Hobby, Launch, and Scale org plans deprecated for any organization created after October 7, 2024, the $5 monthly free credit gone with them, new accounts on pay-as-you-go behind a one-time trial of two machine-hours or seven days.
But "the Postgres-on-Fly story" the review praises is actually two stories wearing one name, and they point in opposite directions. There is legacy fly pg: Postgres running on Machines you operate, with stolon-based high availability and genuine multi-region read replicas — and a deprecation notice pointing at its replacement. And there is Managed Postgres (MPG): plans you rent from $38 to $1,922 a month — available in a limited set of regions, with replicas that exist for failover rather than geo-distributed reads. (One naming trap to clear up front: MPG's cluster plans are also called Basic, Starter, Launch, Scale, and Performance. Those are live product tiers, unrelated to the deprecated org-level billing plans of similar names.)
So here is the crux in one sentence: multi-region Postgres reads on Fly today are a deprecated product's strength, while the managed replacement is single-region-first — and that gap is exactly what decides whether you rent, self-host on Fly, or build on owned hardware. The rest of this post prices all three.
The inventory, up front
Fix a reference workload first: one small-production Postgres, roughly 2 vCPU and 8 GB of RAM, 100 GB of data, high availability required. Here is what each path buys or must build:
| Capability | Legacy fly pg (unmanaged) | Managed Postgres (MPG) | Self-hosted CloudNativePG on owned hardware |
|---|---|---|---|
| Multi-region read replicas | Yes — clone Machines into other regions, proxy routes reads | Limited regions; replicas failover-focused, not a geo-read story | Yes, but you assemble it: replica Cluster recovering from object-store WAL |
| Automated failover | Yes — stolon leader election, same-region HA by adding a node | Included in every plan | Yes — declarative failover, self-healing, rolling updates via the operator |
| Backups + point-in-time recovery | Daily volume snapshots; PITR is your runbook | Automated backups included | Barman object-store backups + PITR, plus volume snapshots since CNPG 1.21 |
| Snapshot/backup metering | Volumes $0.15/GB/mo; snapshots billed since Jan 2026 | Storage $0.28/provisioned GB/mo covers the replicated set | Node volumes (~€0.048/GB/mo on Hetzner) + object-store bucket for WAL |
| Connection pooling | Your PgBouncer | Included in every plan | Your PgBouncer (sidecar or standalone) |
| Metrics and alerting | Machine metrics; Postgres alerting is yours | Prometheus-compatible metrics included; customer-facing alerting still in development | kube-prometheus + postgres_exporter dashboards you keep |
| Extensions | Any image you run | Trusted contrib set + pgvector + optional PostGIS; more in development | Any image you run |
| Postgres version upgrades | Your maintenance window | Not yet — patches and major upgrades still in development | Declarative rolling updates for minors; majors are your tested runbook |
Two rows deserve emphasis because they invert the usual intuition. First, the managed option is the one with the shortest extension and upgrade story — those are explicitly "under development" in the MPG docs — while both self-operated paths run whatever image you hand them. Second, the multi-region row is where the deprecated product beats its replacement: if your requirement is literally "reads served near every region," legacy fly pg is currently the only Fly-native way to get it.
What Managed Postgres gets right
MPG is the honest kind of managed database: one plan price that already includes the three things teams forget to budget — high availability, backups, and connection pooling — plus Prometheus-compatible metrics and automatic storage management. The current plan ladder runs Basic ($38, shared 2x CPU, 1 GB RAM) through Starter ($72, shared 2x, 2 GB), Launch ($282, performance 2x, 8 GB), Scale ($962, performance 4x, 32 GB), and Performance ($1,922, performance 8x, 64 GB), with storage at $0.28 per provisioned GB-month on top. Our reference workload (8 GB RAM, 100 GB) sits on Launch: $282 plus $28 of storage, $310 a month, everything included.
The limits are documented rather than hidden. MPG is available in a limited subset of regions — fly platform regions now carries an MPG column, and the docs say plainly to pick a region close to your app. Storage tops out at 1 TB with a 500 GB initial allocation cap. Version upgrades, customer-facing alerting, migration tooling, and extensions beyond pgvector and PostGIS are all listed as in development. And since February 2026, inter-region private network usage for MPG is billed at Machines data-transfer rates — same-region traffic stays free, but the moment your app and your database live in different regions, the meter runs.
The fairest summary: MPG gets the single-region production story right — the shape most apps actually need — and charges a visible premium for it. What it does not yet get you is the thing the review headlines praise Fly for: Postgres near every region.
What legacy fly pg gets right, and what it costs you
Legacy Fly Postgres is an automated database, not a managed one — Fly's own long-standing distinction. fly pg create provisions Postgres on Machines with stolon handling leader election and streaming replication; adding a second node in the same region buys high availability, and cloning Machines into other regions with the platform's proxy routing buys a genuinely globally distributed cluster with read replicas near your users. Daily volume snapshots come with the platform. This is the architecture behind every "Postgres in 30+ regions" claim, and the docs still teach it under the "High Availability & Global Replication" guide.
What it costs you is the DBA hat. Sizing, patching, failover drills, backup-restore testing, monitoring, and 3 a.m. recovery are yours — Fly runs the Machines and the volumes, you run the database. And the product direction is unambiguous: unmanaged Fly Postgres is deprecated in favor of fly mpg, with community reports of that notice dating to mid-2025 and the docs now titling the section "Fly Postgres (Unmanaged)." New teams can still walk this path, but they should walk it knowing it is the path Fly is winding down, with Managed Postgres v2 (rebuilt on Machines, in beta) as the stated future.
Priced at our reference shape, a three-node legacy cluster of shared-cpu-4x/8 GB Machines runs about $128 a month in compute (2026 list figures put that preset near $42.79) plus $45 for three 100 GB volumes at $0.15/GB — roughly $173 before egress and snapshots, with volume snapshots billed since January 2026 adding a metered line on top. Smaller shared-CPU nodes cut the compute roughly in proportion for lighter workloads; egress at $0.02/GB in North America and Europe (up to $0.12/GB in Africa and India) and cross-region private transfer at $0.006–$0.05/GB complete the metered picture. That is the "metered Machines plus egress" bill the old flat plans used to hide.
What the CloudNativePG fleet must assemble itself
CloudNativePG (CNPG) is the Kubernetes-native operator that turns Postgres into declarative infrastructure: you describe a Cluster resource, and the operator handles provisioning, streaming replication, automated failover, self-healing, and rolling updates. EDB's distribution sits at 1.29+ in 2026 with the upstream project in the 1.2x series. Against the inventory table, here is the assembly checklist, split the way the bill will be split.
For the single-region pair, CNPG covers failover, replication, and updates natively. You add: object-store WAL archiving (Barman-based continuous backup to any S3-compatible bucket) for point-in-time recovery, which doubles as your cross-region shipping mechanism later; a PgBouncer layer for pooling; kube-prometheus plus the Postgres exporter for metrics and alerting; and a tested upgrade runbook — minors roll declaratively, majors stay a planned operation. None of this is exotic; all of it is yours to install, monitor, and drill.
For the multi-region fleet, you add a replica Cluster in each remote region recovering from the object-store WAL stream — CNPG's documented pattern for geographic distribution and disaster recovery. The honest costs here are lag (async WAL shipping means replicas trail the primary by seconds, not milliseconds), transfer (WAL bytes cross region boundaries on someone's meter), and operational surface (each region is another cluster to watch). Fly's legacy multi-region story has the same physics; it just hides the plumbing behind fly machine clone and the proxy.
The build-vs-rent trade is therefore unusually legible: CNPG automates the Postgres internals about as far as automation goes, and every remaining line item is standard platform engineering rather than database wizardry. What you cannot get is Fly's 30+ edge regions on owned hardware — your fleet lives where your machines live, which for most self-hosters means one to three Hetzner-class regions.
The worked monthly bill
Assumptions: trial credits exhausted and zero free allowances (the post-October-2024 reality for new Fly orgs); reference shape of 2 vCPU / 8 GB / 100 GB with HA; euro figures converted near €1 ≈ $1.08. Hetzner dedicated-vCPU pricing is post–June 15, 2026, when the CCX line nearly tripled — the old €15.99 CCX13 is now €42.99, which matters enough to show its effect below.
Single region, HA, per month:
| Cost line | MPG Launch | Legacy fly pg, 3 nodes | CNPG pair on Hetzner (2× CCX13) |
|---|---|---|---|
| Compute | $282 (perf 2x, 8 GB, HA incl.) | ~$128 (3× shared 4x/8 GB) | ~$93 (2× €42.99) |
| Storage | $28 (100 GB × $0.28) | $45 (3× 100 GB × $0.15) | ~$10 (2× 100 GB volumes) |
| Backups / snapshots | Included | Metered (billed since Jan 2026) | Single-digit $ (WAL bucket) |
| Egress / transfer | App egress extra | App egress + x-region extra | ~$0 (20 TB included traffic) |
| Total | ~$310 | ~$173 + meters | ~$105–115 |
The deltas: self-hosting on owned hardware runs about a third of the managed price and roughly two-thirds of DIY-on-Fly at this shape — after Hetzner's 2026 hike. At pre-hike CCX prices the CNPG pair would have been near $45, a 7x gap to MPG; the hike compressed self-hosting's advantage without erasing it. That sensitivity cuts both ways and is worth keeping in mind before treating any 2025 cost comparison as current.
Multi-region fleet (primary region + 2 read-replica regions), marginal over single-region:
| Extra-region cost | Legacy fly pg (the only Fly-native multi-region read story) | CNPG fleet |
|---|---|---|
| Per extra region | ~$58 (1 node + 100 GB volume) + WAL/replication transfer at $0.006/GB (NA/EU) | ~$52 (1 CCX13 + 100 GB volume) + WAL transfer inside 20 TB included |
| Two extra regions | ~$116 + transfer | ~$104 + effectively $0 transfer at this scale |
Two things stand out. First, the per-region hardware cost is nearly a wash — Fly's metered Machines are competitive with rented dedicated vCPUs at small sizes; the managed premium lives in MPG's plan price, not in Fly compute. Second, transfer is where topologies diverge: Fly meters every cross-region byte while Hetzner's 20 TB allowance swallows WAL shipping for anything short of a write firehose. Sensitivity summary: storage scale favors owned volumes ($0.28 vs $0.15 vs ~$0.05/GB), egress volume favors included transfer, and snapshot retention deserves its own line in your spreadsheet on both Fly paths now that snapshots are metered.
One primary or Postgres everywhere?
With the bill in hand, the topology question gets a decision rule instead of an aesthetic. Start from one well-placed primary unless you can name the reads that need to be local. The physics: same-region queries cost ~1 ms, transatlantic hops cost tens of milliseconds — and most apps' p99 is dominated by a handful of chatty query patterns that connection pooling, caching, or one read replica in the second-largest market fixes without a six-region topology. The SaaSOffers review is right that Fly makes the exotic easy; the mistake is buying the exotic by default.
Go multi-region when the reads are genuinely global and latency-sensitive: user-facing read paths on multiple continents with no cacheable shape, or compliance-driven data locality. On Fly that means legacy fly pg replicas today, with eyes open about deprecation; on owned hardware it means CNPG replica clusters and a lag budget your application owns (stale reads are a consistency decision, not just an ops detail). Either way, price each extra region the way the table above does — node, volume, transfer — and compare it against the actual latency revenue: a second region that saves 60 ms on 10% of queries is a product decision you can now put a monthly number next to.
The genuinely good news for small teams: the single-region story has never been cheaper to do well. MPG Launch at $310 buys zero-DBA operations; a CNPG pair near $110 buys the same shape for the price of one afternoon of operator setup plus ongoing drills. Both are sane; the wrong answer is the topology you didn't choose — replicas in regions your users don't live in, billed monthly.
Who should rent, and who should build
- Rent MPG if one region serves your users and you have no DBA hours: $310 all-in for the reference shape, with HA, backups, pooling, and metrics in the plan price — but verify your region is MPG-served and your extensions fit the supported list.
- Run legacy
fly pgonly if multi-region reads are today's requirement on Fly's edge and you accept operating a deprecated product: ~$173 plus meters for the reference cluster, with a migration to MPG v2 or off Fly in your future. - Build the CNPG fleet if you already operate Kubernetes on owned hardware and can staff the checklist: ~$105–115 for the reference pair, full control of versions and extensions, and multi-region via WAL-shipped replicas — at the cost of the runbooks, the drills, and the regions you don't have.
The September reviews tell a true story about Fly's edge and its tooling. The fine print — two Postgres products, one deprecated; metered everything once the trial ends; multi-region as a line item, not a default — is where the actual decision lives. Price your shape, place your primary deliberately, and let the exotic topology earn its way onto the invoice.
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.



