Why every PaaS pricing comparison is useless
Almost every PaaS pricing comparison published in 2026 is a table of starting prices. "From $5/mo" next to "From $7/mo" next to "Free tier available." None of that survives contact with a real application, because the platforms do not bill for the same things. Heroku sells you a fixed-size dyno. Railway meters your CPU by the second. Vercel charges for function execution and data transfer and has no concept of a long-running process at all. Render charges for an instance and then bills you separately for the bandwidth that instance served.
The only comparison that means anything is: take one specific application, define it precisely, and price it on each platform using the vendor's own published rates. That is what this post does. The arithmetic is shown so you can disagree with it.
All prices verified 13 August 2026 from the vendors' own pricing pages: heroku.com/pricing, railway.com/pricing, vercel.com/pricing, render.com/pricing. Where a figure is not published, this post says so instead of estimating one.
The reference app
One Node/Next.js application. Nothing exotic. Every assumption below is load-bearing, so change any of them and the numbers move.
- Web service: 1 vCPU, 2 GB RAM, running 24/7 — 730 hours per month
- Background worker: 0.5 vCPU, 512 MB RAM, also 24/7 (queue consumer, not a cron job)
- PostgreSQL: roughly 10 GB of data, a small instance — call it 0.5 vCPU and 1 GB RAM where the platform lets you choose
- Egress: 200 GB per month leaving the platform
- Traffic shape: 5 million HTTP requests per month, averaging 120 ms of CPU time and 200 ms of wall-clock time per request
- Team: one developer, one seat
- Region: single region, no multi-region replication, no autoscaling, no HA database replica
The traffic-shape line only matters for Vercel, which is the one platform here that bills compute per request rather than per hour. It is included so the same app can be priced everywhere.
Two things this deliberately does not model: build minutes, and logging/observability add-ons. Both are real costs, both vary wildly by team, and including guesses for them would undermine the rest.
Heroku: $84/mo, or $284 if you size it honestly
Heroku publishes fixed dyno tiers. The relevant ones:
| Dyno | RAM | Price |
|---|---|---|
| Basic | 0.5 GB | $7/mo |
| Standard-1X | 0.5 GB | $25/mo |
| Standard-2X | 1 GB | $50/mo |
| Performance-M | 2.5 GB | $250/mo |
Here is the interesting part, and it is the single most consequential fact on Heroku's pricing page: there is no 2 GB tier. The ladder goes 1 GB for $50, then 2.5 GB for $250. A fivefold price jump for 2.5x the memory, with nothing in between.
So the reference app has two honest answers on Heroku:
Undersized (Standard-2X, 1 GB — half the target memory)
Web Standard-2X $50
Worker Standard-1X $25
Postgres Essential-1, 10GB $9
Egress not published —
TOTAL $84/mo
Right-sized (Performance-M, 2.5 GB)
Web Performance-M $250
Worker Standard-1X $25
Postgres Essential-1, 10GB $9
Egress not published —
TOTAL $284/mo
Heroku Postgres Essential-1 is $9/mo for 10 GB of storage, which happens to match the reference app exactly — that is a genuinely fair price and worth saying out loud.
Egress: Heroku's pricing page does not publish a data transfer rate. We are not going to invent one. Assume your 200 GB is included, and verify that against your own invoice before you plan around it.
If you are on Heroku today, the Heroku cost calculator works from these published rates against your actual dyno formation.
Railway: $88/mo at full allocation, ~$32 if your app idles
Railway is the hardest platform to price in advance and the most interesting to work through, because it meters resources per second of actual consumption. Published rates:
- Memory: $0.00000386 per GB per second
- CPU: $0.00000772 per vCPU per second
- Volumes: $0.00000006 per GB per second
- Egress: $0.05 per GB
- Hobby plan $5/mo including $5 of usage credits; Pro $20/mo per workspace including $20 of usage credits
Converted to a 730-hour month (2,628,000 seconds):
Memory 0.00000386 x 2,628,000 = $10.14 per GB / month
CPU 0.00000772 x 2,628,000 = $20.29 per vCPU / month
Volume 0.00000006 x 2,628,000 = $0.16 per GB / month
Upper bound — assuming every service pins its full allocation continuously:
Web 1 vCPU + 2 GB 20.29 + 20.29 = $40.58
Worker 0.5 vCPU + 0.5 GB 10.14 + 5.07 = $15.21
Postgres 0.5 vCPU + 1 GB 10.14 + 10.14 = $20.28
+ 10 GB volume = $1.58
Egress 200 GB x $0.05 = $10.00
USAGE SUBTOTAL = $87.65
Realistic — the same app averaging 15% CPU on the web service, 10% on the worker and database, with resident memory of 700 MB / 250 MB / 600 MB rather than the allocation ceiling:
Web 3.04 + 7.10 = $10.14
Worker 1.01 + 2.54 = $3.55
Postgres 1.01 + 6.09 + 1.58 = $8.68
Egress = $10.00
USAGE SUBTOTAL = $32.37
One honest caveat on the plan fee. Railway's page says the Pro plan is "$20/month per workspace, including $20 of monthly usage credits", and also says resource consumption "is billed in addition to the plan fee". Those two statements pull in different directions and the page does not resolve it. So at the upper bound your bill is somewhere between $88 and $108 depending on how the credit applies, and at realistic utilisation between $32 and $52. We are not going to pick one and present it as fact.
That spread is the real story of Railway. It is either the cheapest platform here or the most expensive, and which one depends on a load profile you will not know until you are running. The Railway cost calculator lets you plug in your own utilisation assumptions.
Vercel: $50/mo, and it cannot run the whole app
Vercel Pro is $20 per user per month plus usage. Published Pro rates and allowances:
- Fast Data Transfer: 1 TB/mo included, then $0.15 per GB
- Edge Requests: 10M/mo included, then $2 per 1M
- Function Invocations: $0.60 per 1M
- Active CPU: $0.128 per hour
- Provisioned Memory: $0.0106 per GB-hour
Against the reference traffic — 5M requests, 120 ms CPU, 200 ms wall, 2 GB configured memory:
Seat $20.00
Data transfer 200 GB (under 1 TB) $0.00
Edge requests 5M (under 10M) $0.00
Invocations 5M x $0.60/1M $3.00
Active CPU 5M x 0.120s = 166.7 hr
166.7 x $0.128 $21.33
Prov. memory 5M x 0.200s = 277.8 hr x 2 GB
555.6 GB-hr x $0.0106 $5.89
PARTIAL TOTAL $50.22/mo
Two omissions, both deliberate:
- The background worker has no equivalent. Vercel does not sell a long-running process. You either restructure the worker into queued function invocations, or you run it on another provider. There is no number to put here, so there isn't one.
- Vercel's pricing page does not publish managed database pricing. Storage is sold through marketplace partners with their own rates. Your Postgres cost on Vercel is real and it is not on that page, so this comparison cannot include it.
One more caution: the included-allowance column on Vercel's pricing page shows figures for Hobby (1M invocations, 4 CPU-hours, 360 GB-hours). For Pro it shows rates. If Pro carries a compute allowance, it is not displayed, which means $50.22 is an upper bound on the compute portion. Work your own numbers with the Vercel cost calculator.
Comparing Vercel to the others on price is close to a category error. It is a frontend delivery platform that happens to run functions. If your app is a Next.js frontend with light API routes, the per-request model can be very cheap. If it has a 24/7 worker and a database, you are buying a partial platform and completing it elsewhere.
Render: $83–$105/mo, and the sizing actually matches
Render is the only platform here whose instance ladder lines up with the reference app without compromise. Web Services: Starter $7/mo (512 MB, 0.5 CPU), Standard $25/mo (2 GB, 1 CPU), Pro $85/mo (4 GB, 2 CPU). Exactly what we specified, no rounding up.
Workspace plans are separate from compute: Hobby $0/mo (5 GB bandwidth included, 1 seat), Pro $25/mo (25 GB bandwidth, unlimited seats), Scale $499/mo (1 TB bandwidth). Bandwidth overage is $0.15/GB on all three. Postgres Basic-1gb is $19/mo (0.5 CPU, 1 GB RAM); expandable storage is $0.30/GB; persistent disks are $0.25/GB/month.
On Hobby workspace (solo dev)
Workspace $0.00
Web Standard 2GB/1CPU $25.00
Worker Starter 512MB/0.5CPU $7.00
Postgres Basic-1gb $19.00
Storage 10 GB x $0.30 $3.00
Bandwidth (200 - 5) x $0.15 $29.25
TOTAL $83.25/mo
On Pro workspace
Workspace $25.00
...same compute... $54.00
Bandwidth (200 - 25) x $0.15 $26.25
TOTAL $105.25/mo
Note what happened to bandwidth. At 200 GB/month — not a large number — egress is $26–29/mo, roughly a third of the bill, more than the web service itself. Render's own page frames 5 GB and 25 GB as workspace features; in practice they are the smallest line item on the invoice and the one that scales with your success.
Two figures Render does not publish that affect this total: whether Postgres instance types include any storage before the $0.30/GB expandable rate kicks in, and build pipeline minutes beyond the included 500 (Hobby) or 1,000 (Pro), which run $5 per 1,000 minutes. The $3.00 storage line above assumes zero included storage, so it is a ceiling.
Hostwares: $13/mo
For completeness, the same app on our own platform. One pack is one deployment slot and runs any app type.
Web Standard 1 vCPU / 2 GB / 25 GB $7.00
Worker Starter 0.5 vCPU / 512 MB $3.00
Postgres Managed database, from $3.00
Egress not metered $0.00
Seats not charged $0.00
TOTAL $13.00/mo
The two lines doing the work there are egress and seats. On Render the same 200 GB costs $26–29; here it is not metered. On Vercel a second developer costs another $20/mo; here seats are free.
What you give up being honest about it: Hostwares is a smaller and newer platform than any of the four above. There is no Private Spaces equivalent, no HIPAA BAA, no SOC 2 report, no contractual uptime SLA. If your procurement process requires any of those, this comparison ends here and you should buy Render Scale or Heroku Shield. That is a real reason to pay more and we are not going to pretend otherwise.
Side by side
| Platform | Monthly | Covers the whole app? |
|---|---|---|
| Hostwares | $13 | Yes |
| Railway (light load) | $32–52 | Yes |
| Vercel Pro | $50+ | No — no worker, database priced elsewhere |
| Render (Hobby workspace) | $83 | Yes |
| Heroku (1 GB web dyno) | $84 | Yes, undersized |
| Railway (full allocation) | $88–108 | Yes |
| Render (Pro workspace) | $105 | Yes |
| Heroku (2.5 GB web dyno) | $284 | Yes |
What the arithmetic actually shows
Three patterns come out of doing this properly rather than reading starting prices.
The pricing model matters more than the price. Railway's cheapest and most expensive outcomes for the identical application differ by 3x, decided entirely by how hard your app works. Heroku's fixed tiers mean you cannot be wrong about your bill, and also cannot avoid paying $250 for 2.5 GB when you needed 2 GB. Neither model is better; they fail differently, and you should pick the failure mode you can live with.
Egress is the line nobody budgets for. 200 GB/month is a modest, unremarkable amount of traffic. It costs $26–29 on Render, $10 on Railway, $0 on Vercel Pro (because 1 TB is included), and is not published by Heroku. Anything media-heavy will make this the largest number on your invoice long before compute is.
Sizing gaps cost more than rates do. The gap between Heroku's $84 and $284 is not Heroku charging more per gigabyte. It is a ladder with a hole in it at exactly the size most small production apps want. Check that the tier you actually need exists before you compare per-unit prices.
Do this yourself
Do not take this table and apply it to your app. Take the method: write down your services with their real CPU, memory, storage and egress, then multiply by each vendor's published rate. It is twenty minutes of work and it is the only way to get an answer that is true for you rather than true for our reference app.
Prices verified 13 August 2026 against Heroku, Railway, Vercel and Render. Vendors change rates; re-check before you commit.