Skip to main content

Heroku vs Railway vs Render vs Fly.io: Read the Feature Matrix, Not the Price List (2026)

10 min readDora NodaDora Noda
Share
On this page

Every 2026 Heroku-alternative showdown ends in the same argument: dollars per unit of compute. And almost every one of them is answering the wrong question. For a typical side project — one web service plus a small Postgres — the gap between the cheapest and the priciest of the big four is roughly a lunch. The gap that actually bites later lives in rows the price lists bury: whose free Postgres deletes your data after 90 days, whose bill has three independent axes that can each surprise you, and whose cheapest tier sleeps through your first real user.

So here is the four-way table everyone keeps redrawing, annotated with what each row really costs you in 2026 — and then a row-by-row read that separates the pricing rows a self-hosted fleet beats on day one from the operational rows it has to answer honestly.

The table everyone argues about

This is the standard 2026 head-to-head (Heroku, Railway, Render, Fly.io), with the numbers filled in from current pricing and the footnotes the marketing pages skip:

FeatureHerokuRailwayRenderFly.io
Free tierNone (killed Nov 2022)$5 trial credit, then $5/mo HobbyYes — services sleep, static sites freeNo ongoing tier; 2-VM-hour trial only
Starting price$5 Eco (sleeps) / $7 Basic$5/mo Hobby (includes $5 usage)$7/mo Starter~$1.94/mo (shared-cpu-1x, 256 MB)
Managed PostgresMini $5 (10K rows) / Basic $9Metered usage, private networkingFrom $7; free tier expires after 90 daysSelf-manage on volumes, or managed ~$43+/mo
Deploy from gitYesYesYes (+ Blueprint render.yaml)Yes (Docker image via flyctl)
RegionsLimited (US/EU)US/EU (+APAC select)US/EU/Asia30+ regions, anycast by default
Preview environmentsVia add-onsYes, per-PRYes, per-PRManual (DIY with Machines API)
Volumes/snapshotsNone (ephemeral dynos)Volumes metered as usageDisks billed per GB-monthVolumes $0.15/GB-mo, snapshots billed
EgressBundled per dyno tier$0.10/GB metered100 GB included, then metered$0.02/GB (NA/EU)

The rest of this post is that table with the lid off.

The free-tier row, decoded

"Free tier" means four completely different things here, and the difference decides whether your prototype survives its first quarter.

Render has the only tier you could call genuinely free: web services get 750 hours a month but sleep after 15 minutes idle (expect a ~50-second cold start), while static sites are free with no sleep penalty. The trap is the database: free Postgres expires after 90 days and takes your data with it. It is a trial with a deadline, and teams that miss the deadline learn about it from a dead app.

Railway no longer has an ongoing free tier either — new accounts get a $5 trial credit (roughly a 30-day runway), after which Hobby at $5 a month is the floor. The good news: paid services don't sleep, and idle usage often lands inside the included $5 of credit.

Fly.io retired its free tier in October 2024. What's left is a one-time trial — 2 VM-hours or 7 days, whichever ends first, with machines auto-stopping after 5 minutes. After that, the smallest shared-CPU VM costs about $1.94 a month if left running, less with autostop. Cheap, but never zero.

Heroku has had no free anything since November 2022. The floor is $5 Eco (1,000 shared dyno-hours, sleeps after 30 minutes idle) or $7 Basic per dyno, always-on but with no horizontal scaling.

The honest summary: in 2026, "$0" gets you a Render static site, a 90-day Postgres countdown, a $5 Railway coupon, or a 2-hour Fly.io demo. Plan the paid step on day one, because every platform now forces it by day 90 at the latest.

The Postgres row

Compute is fungible; the database is where platforms lock you in. Here's what a small app's Postgres actually costs and constrains on each platform.

Heroku's Mini plan ($5) caps you at 10,000 rows — fine for a todo demo, a wall for anything real — and Basic ($9) jumps to 10 million rows. Neither sleeps nor expires; Heroku's data layer is the oldest and most boring here, which is a compliment. Row caps, not uptime, are the forcing function.

Render's paid Postgres starts at $7 and behaves like a grown-up managed database (backups, high availability on higher tiers), but the free tier's 90-day expiry means the upgrade isn't optional — it's scheduled. Budget the $7 from the start and treat "free Postgres" as a countdown, not a plan.

Railway's Postgres, MySQL, Redis, and Mongo all ride the same usage metering as compute, with private networking between services in a project. There is no separate database bill to decode, which is clarifying until traffic spikes — then the database is just another service burning vCPU-minutes and memory-minutes on the same three axes as everything else.

Fly.io inverts the model: Postgres runs as an app you operate on $0.15/GB-month volumes. It never sleeps, never expires, and never pages anyone but you at 3 a.m. Fully managed Postgres exists through extensions at roughly $43–50 a month — which tells you exactly what Fly thinks operating a database is worth.

The pattern: Heroku and Render sell you database peace of mind in fixed steps; Railway folds it into usage; Fly hands you the pager. None is wrong, but "managed database: yes" in a feature table hides a 10x spread in who does the managing.

The meters that move without warning

Now the part price-per-unit comparisons never survive: what a typical one-web-service-plus-database app costs at idle versus under load, and which variable moves the bill. All four, low to high:

Railway: ~$5 idle → $20–30+ busy. The drivers are compute ($20 per vCPU-month), memory ($10 per GB-month), and egress ($0.10/GB), all metered per second. An idle side project fits inside the Hobby credit; a traffic spike moves all three axes at once, and egress at ten cents a gigabyte is the one nobody models. Railway's own guidance puts production backends on Pro ($20/seat including $20 of usage) precisely because Hobby's ceiling arrives fast.

Render: $7 idle → $14–57+ busy. The drivers are per-service flat steps, not usage curves: $7 Starter plus $7 Postgres is the honest floor for anything always-on with persistent data. Bandwidth is generous — 100 GB included (500 GB on Professional workspaces) — so egress rarely surprises. What surprises is multiplication: each service, worker, cron job, and database is its own line item, and a three-tier setup with point-in-time recovery lands around $57 or more.

Fly.io: ~$2–5 idle → $12–20+ busy. The drivers are machine-seconds (autostop makes idle genuinely cheap), egress at $0.02/GB in North America and Europe, and volumes at $0.15/GB-month with snapshots billed on top. The bill scales smoothly with real usage, which means it also scales smoothly with a misconfigured autoscaler or a chatty multi-region deployment. Fly's meters are the most honest and the least capped.

Heroku: $10 idle → $50–100+ busy. The drivers are tier steps, not curves: $5 Eco plus $5 Mini Postgres is the floor (with sleep and a 10K-row ceiling), and the first serious step is $25 Standard-1X dynos plus $9 Basic Postgres — per dyno, per add-on. There is no smooth ramp between $10 and $50; you jump. For a basic three-tier app, every 2026 comparison lands at $50–100 a month minimum, before add-ons.

Two lessons fall out. First, idle cost and loaded cost are different competitions: Fly wins idle, Render wins predictability, Railway wins the middle until egress shows up, Heroku wins nothing on price. Second, sleep and expiry status matters as much as dollars — Render's 90-day Postgres cliff and Heroku Eco's sleep are the only entries in this table that can delete your data or miss your users, and neither appears on a pricing page's hero numbers.

The rows price lists hide

Price decides the first month. These four rows decide the second year — and they are where "managed versus self-hosted" actually gets argued:

Operational rowWho wins, and why
Edge presenceFly.io by a mile: 30+ regions with anycast routing is a product, not a region picker. The other three are US/EU-first with Asia as an option.
Preview environmentsRailway and Render (native per-PR deploys); Heroku needs add-ons; Fly makes you build it on the Machines API.
Compliance and SLAsHeroku, for enterprises already there: Shield/Private Spaces plus 99.95% SLAs. The other three target 99.9% and advertise SOC 2; HIPAA/BAA terms vary by plan — verify before betting a regulated workload on a blog table's row.
Managed backups / PITRHeroku and Render bake it into paid database tiers; Railway inherits whatever its managed offering snapshots; Fly gives you volume snapshots and the runbook.

Notice what happened: the platform that loses every pricing row (Heroku) wins compliance, and the platform that wins idle pricing (Fly) hands you the most operational homework. That inversion is the whole point of reading the matrix instead of the price list — the cheapest compute often ships with the most expensive operations, just denominated in your time instead of dollars.

What a self-hosted fleet beats on day one — and must answer honestly

This is the row-by-row read's real payoff for anyone running (or considering) their own platform on owned machines. Split the matrix in two:

Beaten on day one: per-unit compute (a Hetzner-class box doesn't meter vCPU-minutes), egress (flat or bundled transit versus $0.02–0.10/GB), idle cost (your machines don't bill per second), database row caps and expiry cliffs (your Postgres doesn't delete itself at day 90), and per-service multiplication (ten services on your cluster don't cost 10x one service).

Must answer honestly: edge presence (you won't match 30+ regions; say which regions you actually cover), compliance paperwork (SOC 2 reports and BAAs are documents, not architectures — managed platforms have them on file), managed backups with tested restores (snapshots you never restore are Schroedinger's backups), and preview environments (per-PR deploys are a solved problem, but you still have to build and operate them).

A self-hosted PaaS that publishes this split — "here's where we're cheaper today, here's the operational row we're still closing" — is making the strongest argument in this entire post: not that managed platforms are overpriced, but that their price buys specific operations you can choose to own or rent per row.

The matrix is the memo

The 2026 four-way race has a clear shape once you stop sorting by price: Railway owns developer experience, Render owns the free on-ramp, Fly owns the global edge, and Heroku owns the enterprise installed base it built a decade ago. The buying decision was never in the per-gigabyte column — it's in the free-tier expiry footnote, the Postgres row cap, the egress axis, and the compliance row, read together against the app you're actually shipping.

Start from the matrix, pick the rows you refuse to operate yourself, and let that — not the hero price — choose your platform. And if the rows you refuse to operate keep shrinking, that shrinking list is your self-hosting roadmap.

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.

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