Skip to main content

Your PaaS Bill Lied to You: The Real Cost of Railway, Render, Fly.io and Vercel in 2026

12 min readDora NodaDora Noda
Share

Your PaaS bill lied to you. Not by rounding up — by never showing you the whole number in the first place.

In June 2026, independent researcher Tural Allahverdiyev published a teardown on Medium called "Your PaaS Bill Lied to You: The Real Cost of Railway, Render, Fly.io, and Vercel in 2026." It did something no vendor pricing page will do: it put Railway, Render, Fly.io, Vercel, Cloudflare Workers, and a flat-rate Hetzner box on the same page, recomputed the same mid-traffic app line by line under each vendor's live 2026 meters, and showed where the money actually goes once you add egress, cold starts, and the billing lines added after each vendor moved its prices.

The timing matters. Vercel has repriced four times since 2024. Heroku entered sustaining mode on February 6, 2026. Fly.io added volume snapshot and new egress meters on January 1, 2026. Render cut included egress from 100 GB to 5 GB. Railway rotated its free tier. A comparison written in early 2024 would quote plans that no longer exist at prices no one can still buy. Allahverdiyev's teardown landed after all of them moved — which is exactly why it is a better truth anchor than any single pricing page.

Here is the teardown reconstructed, pressure-tested, and priced against the one number that never needed a changelog: an owned Hetzner box under Cluster API.

The answer up front: one workload, seven bills

We priced the same reference app everywhere. It is the "embarrassingly normal" production workload most teams actually ship: a Node.js API plus Next.js frontend, Postgres, Redis, background worker, 2 vCPU / 4 GB RAM sustained, 10 million requests per month, 500 GB outbound bandwidth, 50 GB volume with daily snapshots retained for 7 days.

Every number below is drawn from live 2026 pricing pages and the June teardown's methodology, with Hetzner at post-June-15 2026 rates. Totals include compute, bandwidth, storage/snapshots, and the platform fee — the whole invoice, not the headline rate.

PlatformComputeEgress (500 GB)Storage + SnapshotsPlatform / seat feeTotal / month
Vercel Pro~$18 Active CPU + memory~$60 — $120*Included (Blob separate)$20 / user included as $20 credit$38 — $158
Railway~$15 — $22 (usage-based, ~$0.000231/GB-hour)$25 at $0.05/GB (no free tier)$5 — $10 volume$5 trial credit, then pay-as-you-go$45 — $57
Render$25 (Starter Plus 1 GB → Standard 2 GB needed for 4 GB)$74.25 (495 GB overage × $0.15, 5 GB Hobby / 25 GB Pro included)$7.50 (50 GB × $0.15)$0 — $19 (workspace fee)$56 — $125
Fly.io~$15 — $30 (shared-cpu-1x/2x, per-second)$10 at $0.02/GB (NA/EU)$3.20 (40 GB billable snapshots × $0.08) + $3.60 egress IP$0 base (pure pay-as-you-go)$32 — $47
Cloudflare Workers$5 (Workers Paid)$0 (zero egress)$5 — $15 (D1 / R2 / Durable Objects storage from Jan 2026)$0$10 — $20
Heroku (sustaining)$25 — $50 (Basic → Standard dyno)Included in dyno$9 — $50 (Heroku Postgres Mini → Standard)$0$34 — $100
Hetzner CX23/CPX22 (owned)€3.99 — €7.99€0 (20 TB included)€0 (40 — 80 GB NVMe included, snapshots are your own)€0€3.99 — €7.99 (~$4.30 — $8.60)

* Vercel egress math depends on Fast Data Transfer vs. Fast Origin Transfer split. The teardown pegs overage near $0.15/GB on Pro after the $20 credit, with the credit masking the first ~130 GB. At 500 GB, you burn through the credit and pay on the remainder.

The shape, not just the sum: the cheapest self-hosted line is 4× to 15× cheaper than any metered PaaS at this bandwidth, and the gap widens with traffic because only one column charges per GB after 20 TB. Change egress to 50 GB and the PaaS totals cluster near $20 — $40, almost competitive. Push it to 2 TB and the per-GB vendors add $150 — $300 while Hetzner still shows $8.60. The variable that drives the answer is bandwidth, not compute.

That is the number the pricing pages hide by design: each advertises compute, then prices bandwidth as a footnote.

Egress is the bill

Every 2026 PaaS teardown reaches the same conclusion through different math: if your app serves images, video, API JSON at scale, or any user-facing bytes at all, egress is the largest line item by the time traffic is real.

Here are the live rates that compose that line:

  • Railway: $0.05/GB outbound, no included free tier for new accounts (the $5 trial credit covers 100 GB once, then it is pay-as-you-go).
  • Render: 5 GB included on Hobby, 25 GB on Pro, then $0.15/GB. The cut from a flat 100 GB to 5 GB happened in the April 2026 repricing — a 20× reduction applied to every workspace auto-migrated by August 1, 2026.
  • Fly.io: $0.02/GB in North America and Europe, $0.04/GB in Asia Pacific. The headline is the cheapest of the three — until you add the new 2026 lines below.
  • Vercel: bundled into Fast Data Transfer with a $20 Pro credit. Once the credit is consumed, overage lands near $0.15/GB on Pro. Hobby allowances were renamed to 4 hours Active CPU + 360 GB-hours provisioned memory with tight bandwidth caps.
  • Cloudflare Workers: $0 on egress — still the outlier, and the reason Workers wins any bandwidth-heavy comparison on sticker price. Storage (D1, R2, Durable Objects) started metering separately in January 2026, which is where Cloudflare's bill actually grows for stateful apps.
  • Hetzner: 20 TB included on every Cloud server (CX23 at €3.99, CPX22 at €7.99 post-June hike). You cannot buy overage because there is no meter.

At 500 GB, the arithmetic is blunt:

  • Railway egress: 500 × $0.05 = $25
  • Render egress: (500 − 5) × $0.15 = $74.25 on Hobby
  • Fly.io egress: 500 × $0.02 = $10 (NA/EU)
  • Hetzner egress: $0, with 19.5 TB still headroom

The teardown's insight is not that egress is expensive — it is that egress is where metered platforms have repriced most aggressively while keeping compute headlines flat. Vercel's banner still says $20 per seat. Render's homepage still says "from $0." The line that moved 33% to 113% lives three scrolls down.

The four moves that invalidated last year's comparison

A cost comparison is a snapshot. These four moves mean any snapshot taken before mid-2026 is quoting plans you cannot buy.

1. Vercel repriced four times in 20 months

Allahverdiyev's teardown and Vercel's own changelog agree on the sequence: improved infrastructure pricing in mid-2024 (unbundling bandwidth and functions into granular meters), Fluid Compute and Active CPU pricing in early 2025 (bill for CPU actually executing, not wall-clock wait), a September 2025 conversion to credit-based billing where each $20 Pro seat includes a $20 usage credit consumed first, and a February 2026 build-pricing reset that made Turbo Build Machines the default at $0.126 per build minute against the same credit pool. Each step was framed as simpler. Each added a dimension to forecast.

2. Heroku entered sustaining mode on February 6, 2026

Salesforce's announcement was explicit: Heroku is transitioning to a sustaining engineering model focused on stability, security, reliability, and support, with no new features on the roadmap and no new Enterprise Account contracts. The platform still runs — it is production-ready — but the pricing story is frozen. For a team estimating next year's bill, "frozen" is not reassuring either: the dyno and Postgres prices will not improve while every competitor reprices around them, and the signal to migrate is now institutional, not anecdotal.

3. Fly.io started charging for what used to be free

On January 1, 2026, two lines appeared: volume snapshots at $0.08/GB-month (first 10 GB free, then pro-rated hourly, with the 5-day automatic daily retention most volumes ship with), and app-scoped egress IPs at $3.60 per month per IP. Shared-cpu-1x pricing itself barely moved (~$2.02/month if left on 24/7 at 256 MB), but a multi-region app with routine snapshot retention now carries a storage-and-networking surcharge that did not exist in any 2024 comparison table. The same 2026 docs also removed any free allowance for new orgs — legacy Hobby/Launch/Scale plans retain 100 GB transfer, new accounts are pure pay-as-you-go with a 2-hour trial.

4. Render and Railway rewrote the bottom tier

Render's April 2026 repricing cut included egress from 100 GB to 5 GB on Hobby (25 GB on Pro) and added flat workspace fees where per-seat pricing used to be. Railway rotated its free tier toward a $5 trial credit model, keeping its $0.05/GB egress but removing the cushion that made early comparisons look close. Neither change raised compute prices. Both raised the bill for the same bytes.

Any spreadsheet that does not encode all four moves is not a forecast — it is a history lesson.

Cold starts, free tiers, and the lines you only learn about from the invoice

Allahverdiyev paired price with performance for a reason. A cheap bill that serves a cold start on every request is not cheap.

  • Fly Machines cold start in roughly 2 — 5 seconds on the first boot after a scale-to-zero image pull. Keeping min_machines_running = 1 in fly.toml avoids it, at the cost of paying for one always-on machine — exactly the "flat box" economics the comparison is measuring.
  • Render free tier services spin down after 15 minutes of inactivity. The free tier exists, but any production app that cannot tolerate a wake-up latency is priced at Starter ($7/month) and up.
  • Vercel Hobby and Railway/Cloudflare free allowances have all tightened since 2024. The teardown's benchmark found that egress caps, build minutes, and function GB-hours — not compute — are the binding constraint that pushes a hobby project onto a paid meter.
  • Hetzner Cloud has no cold start in the PaaS sense — your box is always on — but it has its own failure mode the teardown flags explicitly: component shortages (DRAM/NAND) created repeated "limited availability" notices on specific server lines through 2026, meaning a MachineDeployment scale-up can hit "no capacity in this location." The mitigation is multi-location, multi-server-type fallback in the CAPH provider config, not assumed infinite capacity.

The honest read is not "self-hosting has no gotchas." It is that the gotchas are yours to see and fix, not a footnote you discover after the invoice.

Why one independent page beats five pricing pages

Vendor pricing pages are not lying. They are framing. Each optimizes the headline that makes its platform look inevitable — Vercel per seat, Railway per GB-hour, Render per workspace, Fly per second — and tucks the meter that hurts at scale into a subpage with regional pricing tables and pro-rated hourly footnotes.

Allahverdiyev's method is the antidote because it is boring:

  1. One workload, defined once. Same vCPU, RAM, requests, bandwidth, and retention window. No vendor gets to substitute a smaller box or ignore the snapshot count.
  2. Every line summed to a total. Compute plus egress plus storage plus the platform fee. Headline rates are not totals.
  3. Sensitivity, not one point. The teardown shows the same table at 50 GB, 500 GB, and 2 TB egress so a reader can interpolate their own traffic instead of trusting one convenient workload.
  4. After every repricing. Publishing in June 2026 — after Vercel's fourth repricing, Heroku's sustaining announcement, Fly.io's January meters, and Render's April cuts — means the "live pricing" claim can be verified today, not qualified with "at time of writing."
  5. Cold-start benchmarks alongside price. Cost without latency context is a partial answer.

That discipline is the same one you need when you recompute the bill yourself. If a comparison quotes a PaaS total without showing the bandwidth line, or quotes a Hetzner price without naming the generation (old CX22 at €3.79 no longer exists — post-June-15 2026 it is CX23 at €3.99, CCX/CPX lines up 30 — 50%), it is selling a headline, not a forecast.

What to do with this

If you are choosing where next quarter's app runs, do three things before you trust any number — including ours:

  1. Recompute from meters, not marketing. Pull the live pricing pages for the week you ship (Vercel's changelog dated the last change, Fly.io's January snapshot docs, Render's April migration notice, Railway's current egress page, Hetzner Cloud pricing for your target region and generation). Price the same workload you actually run, not the vendor's example.
  2. Run the bandwidth sensitivity. Keep everything else fixed and slide egress from your current p50 through 3×. The platform whose total line stays flattest is the one whose business model is least coupled to your growth — and the answer is almost always the flat box.
  3. Decide what you are buying beyond compute. Vercel sells preview deployments and zero-config framework integration. Railway sells fast git-push behind a clean usage meter. Fly sells global Anycast and Machines. Hetzner sells a box and 20 TB — you assemble the rest (Cluster API, cert-manager, ingress). If you value the managed piece more than the bandwidth delta, pay the meter with open eyes. If you value predictable cost more, cut the meter out.

The bill never lied about its math. It lied by letting you price the wrong thing.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. No per-GB egress meter, no seat-based billing, no credit pool to decode. A Hetzner-native PaaS with Cluster API fleet management, a Render-compatible API, and an MCP server your agents can already call. 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