There used to be a standard answer to "where do I put my side projects": scatter them across free tiers and pay nothing. That answer expired. Railway's free tier is gone, replaced by a trial credit. Fly.io retired its free tier back in October 2024. Heroku killed free dynos in November 2022 and never looked back. As of September 2026, exactly one mainstream PaaS still offers a genuinely free-forever compute tier — Render — and even there, the database that makes a side project real comes with a 30-day self-destruct timer.
So what does the classic portfolio actually cost now? I priced it: five small projects, each a web app plus a Postgres database, low traffic, data that must survive longer than a month. Here is the September 2026 scoreboard, the full math per platform, and the spend threshold where the free-tier arbitrage stops being free.
The September 2026 free-tier scoreboard
Four platforms, four different answers to "can I host for free":
| Platform | Free compute? | Free Postgres? | The catch |
|---|---|---|---|
| Render | Yes — 512 MB / 0.1 CPU instances, 750 hours per workspace per month | Yes — 1 GB storage, but expires 30 days after creation | Free web services sleep after ~15 min idle; 750 hours ≈ one always-on instance shared across the workspace |
| Railway | No — $5 one-time trial credit, then pay-as-you-go | No — same meter as everything else | Hobby plan starts at $5/month (includes $5 of usage); when trial credit runs out, deployments are removed until you upgrade |
| Fly.io | No — $5 one-time trial credit, then pay-as-you-go from the first machine | No — self-managed Postgres on your own machines, or managed Postgres from $38/month | Cheapest always-on machine (shared-cpu-1x, 256 MB) runs ~$2/month; even stopped machines bill a small rootfs fee |
| Heroku | No — none since November 2022 | No | The cheapest entry is a paid dyno plus a paid database |
Two details in that table do most of the work. First, Render's free Postgres expiring after 30 days (plus a short grace period, then deletion) means the free tier is a trial for anything with state — which is nearly everything. Community trackers that catalog free database tiers have started delisting Render's Postgres entirely for exactly this reason. Second, Railway and Fly.io both converge on the same shape: a small one-time credit, then meters running from dollar zero. There is no placement trick left, no region where the free tier secretly survives. The arbitrage era is over; only the pricing math remains.
The portfolio we are pricing
To keep this honest, the workload is fixed and deliberately boring — the median side-project fleet:
- Five projects. A SaaS experiment, a Discord bot dashboard, a personal API, a blog with comments, a weekend MVP. Each one: a web service plus its own Postgres database.
- Low traffic. Hundreds of requests a day, not thousands a minute. Nothing here needs more than the smallest instance type on any platform.
- Data must persist. This is the binding constraint. A database that evaporates after 30 days is not a database; any option that cannot keep five small databases alive indefinitely fails the portfolio, no matter what its compute costs.
- Two variants. Variant A is always-on: every project answers instantly. Variant B is sleep-tolerant: cold starts are fine, but the data stays.
Five projects is not cherry-picked to flatter the conclusion — it is the point where the portfolio stops fitting inside any single free quota (Render's 750-hour pool covers roughly one always-on instance) while still being small enough that nobody would hire a DevOps engineer for it. One project and the answer is trivially "use Render free." Fifty projects and the answer is trivially "you run infrastructure now." Five is where real people actually live.
The math, line by line
All prices below are per month, from each platform's current pricing plus independently verified community pricing research. Bandwidth beyond the included allotments is the one meter I hold constant — these are low-traffic projects, so egress is noise next to compute and databases on every option except pathological ones.
Variant A: always-on, five projects with persistent Postgres.
| Line item | Render | Railway | Fly.io (self-managed PG) | Hetzner box (CPX22) |
|---|---|---|---|---|
| Compute, 5 × smallest always-on | 5 × $7 Starter (512 MB, no sleep) = $35 | Metered, | 5 × | Included in the box |
| Postgres, 5 × smallest persistent | 5 × $6 Starter (256 MB) = $30 | Metered, inside the same usage = ~$5–10 | 5 × | 5 containers on the box = $0 marginal |
| Total | ~$65 | ~$30–50 | ~$25–30 | €9.51 (~$11) flat |
A few notes on how those rows are built. On Render there is no interpolation available: free instances sleep, so always-on means Starter at $7 each, and expired free databases mean paid Postgres at roughly $6 each — Render's own write-ups put one Starter web service plus one basic database at about $13/month, and five copies is five copies. On Railway everything is one meter, so the honest presentation is a range: one community teardown prices an app plus Postgres at roughly $20/month in RAM alone at larger sizes, but our projects are far smaller, so $30–50 for the fleet is the realistic band — with the caveat that meters move and PR-preview environments multiply it. On Fly.io the compute is genuinely cheap (~$2 per tiny machine) but each database needs its own machine and volume, and managed Postgres at $38/month per database is so far outside this workload's budget it is not a line item, it is a different product.
And the Hetzner CPX22 — 2 shared AMD vCPUs, 4 GB RAM, 80 GB NVMe at €9.51/month after 2026's repricing rounds — absorbs all five apps and all five databases as containers with headroom left over, for one flat price that does not move when traffic wiggles.
Variant B: sleep-tolerant. Month one versus month two.
| Render | Railway / Fly.io | |
|---|---|---|
| Month 1 | ~$0 — free instances sleep and wake; free Postgres instances are alive | Trial credit covers it, or a few dollars of meter |
| Month 2+ | ~$30 — compute can stay free, but all five Postgres databases must move to paid ($6 × 5) | Same as Variant A: ~$25–50 |
This is the cruelest row in the whole comparison. Render's free tier looks like it covers the sleep-tolerant portfolio right up until day 30, when every database in the fleet expires simultaneously. The forcing function is never compute — it is always Postgres-per-project. Any platform that charges per database (or per machine running one) multiplies the portfolio's project count against you; the flat box does not care whether it hosts one database or five.
The threshold: the second persistent database
Pull the sensitivity across portfolio sizes and the crossover is sharp:
- One sleep-tolerant prototype: Render's free tier wins outright at $0. Nothing else is close, and reaching for a VPS here is hobbyist cosplay, not economics.
- One always-on project with a real database: Render at ~$13, Railway/Fly.io at ~$7–12, Hetzner box at ~$11. A wash — pick on ergonomics, not price.
- Two or more projects with persistent databases: the Hetzner box wins and the gap widens with every project added. Two paid Render databases alone ($12) already exceed the entire flat box; five projects put managed options at 2–6× the box.
- The exact threshold is the second persistent database. The first one fits inside somebody's free quota or trial credit. The second one is where per-database metering starts compounding and the flat-rate box pulls ahead for good.
Egress deserves one sentence because someone will ask: none of these workloads push enough bytes for bandwidth to change the ranking. If one of your five projects serves video or large downloads, re-run the math with that project's egress priced per platform — Fly.io and Railway meter it, Hetzner bundles far more — and the box's advantage only grows. Low-traffic is an assumption; check it before you commit.
The honest other side: what the €9.51 box costs you
The box wins the spreadsheet and loses everything the spreadsheet does not measure. Say it plainly:
- You are the on-call rotation. Postgres backups, OS patching, disk-full-at-2am, expired TLS certs — managed platforms sell the absence of these, and the absence has real value. One engineer's public 2026 ledger of migrating off self-run Kubernetes onto Fly.io (roughly $3,000/month down to $200, one two-hour outage in six months) is worth reading as the mirror image of this post: sometimes managed wins, with receipts.
- Backups are not automatic. A containerized Postgres on a single box with no backup job is a database with an expiry date of its own. Budget an hour to set up daily dumps to object storage before you declare victory.
- Managed still wins when: the portfolio is one prototype (Render free), nobody on the team will ever SSH anywhere, or the data has compliance requirements that make a SOC 2 report worth more than $50/month in savings.
The box is cheaper at essentially every portfolio size above one persistent database. It is not easier. Price the ops time at whatever your evenings are worth and make the call with both columns filled in.
Bottom line
September 2026 leaves exactly one free-forever compute tier standing, and its 30-day database expiry means it covers prototypes, not portfolios. The moment your side projects need a second database that outlives the month, per-service and per-database metering starts compounding — $30–65/month across the managed options for five small projects — while a €9.51 Hetzner box holds the whole fleet flat. That crossover, the second persistent database, is the number to remember. Everything else is ergonomics and who gets paged.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. If this post talked you into the flat-rate box, bex is the layer that makes five side projects on one machine feel like five free tiers that never expire. Star the repo on GitHub or deploy your first app today.



