tl;dr
Heroku was the default for deploying side projects and MVPs for a decade. Then they killed the free tier, and the cheapest always-on dyno costs $7/mo. Railway gives you a better experience for $5/mo. Render has a real free tier. Coolify turns a $5/mo VPS into your own private Heroku. The alternatives are not just cheaper — most of them are actually better now.
Why founders look for Heroku alternatives
For years, the deployment story for indie builders was simple: push to Heroku, get a URL. The free tier handled hobby projects, MVPs, and demo apps. When you needed more, you scaled up to paid dynos. The developer experience was excellent and the pricing was fair for what you got.
Two things changed this.
First, Heroku removed the free tier in November 2022. Overnight, hundreds of thousands of hobby projects needed a new home. The Eco dyno at $5/mo (shared across apps, with sleep after inactivity) and the Basic dyno at $7/mo (always on) replaced what used to be free.
Second, the competition got better. Railway, Render, and Fly.io all launched with developer experiences that matched or exceeded Heroku, at lower prices, with more transparent billing. Heroku's dashboard, CLI, and deployment pipeline — once best-in-class — started to feel dated.
For a bootstrapped founder deploying a SaaS product, the hosting decision matters because it is a recurring cost that compounds. A $20/mo difference in hosting is $240/year. Over 3 years, that is $720 — enough for a domain, an email service, and a few months of marketing tools. Burn rate optimization starts with infrastructure.
How we evaluated these alternatives
We deployed the same application (a Node.js API with Postgres, Redis, and a background worker) to each platform and measured:
- Deployment speed: Time from git push to live URL
- Cold start latency: How fast the first request is served after a period of inactivity (important for free tiers that spin down)
- Reliability: Uptime over 30 days with synthetic monitoring
- Cost at low traffic: Monthly bill for an app handling 10,000 requests/day
- Cost at moderate traffic: Monthly bill for an app handling 100,000 requests/day
- Database experience: How easy is it to provision, connect, and manage a Postgres instance?
We prioritized the indie builder profile: shipping a product fast, keeping costs low, and avoiding infrastructure that requires a full-time DevOps hire to manage.
Deep dive: what each alternative does best
Railway — the Heroku successor
Railway is what Heroku would be if it were built today. The deployment experience is seamless: connect a GitHub repo, Railway auto-detects the framework and language, builds the app, and deploys it. The whole process takes under 90 seconds for a typical Node.js or Python application.
The built-in database experience is where Railway surpasses Heroku. Click a button to provision Postgres, MySQL, Redis, or MongoDB. The connection string is automatically injected as an environment variable. No add-on marketplace, no third-party configuration, no copying connection strings between dashboards. It just works.
Preview environments are another win. Every pull request gets its own deployment with its own database. This is standard in enterprise CI/CD but rare in indie-friendly platforms. For a solo founder using GitHub PRs even for personal projects, preview environments catch bugs before they hit production.
The Hobby plan at $5/mo includes $5 in usage credits. A small app (one web service, one Postgres instance, low traffic) typically costs $3-8/mo in usage. This means the $5 credit often covers the entire bill for a low-traffic side project. However, there is no true free tier — the $5/mo minimum applies even if your usage is $0.
Usage-based pricing is Railway's double-edged sword. You pay for compute (per vCPU-hour), memory, network egress, and database storage. For predictable low-traffic apps, this is cheap. For apps with traffic spikes (like getting featured on Hacker News or Product Hunt), the bill can jump unexpectedly. Set up billing alerts.
Railway's region options are limited compared to Fly.io. Most deployments run in US regions. If your users are primarily in Europe or Asia-Pacific, the added latency may be noticeable for API latency-sensitive applications.
When to pick Railway: You want the easiest migration from Heroku, the best developer experience, and transparent pricing. Ideal for SaaS MVPs and production apps with predictable traffic.
Render — the free tier champion
Render positioned itself as the Heroku alternative with a real free tier, and it delivers. Free static site hosting with 100 GB bandwidth per month. Free web services with 750 compute hours per month. These are genuinely usable for side projects, documentation sites, and staging environments.
The catch with free web services is spin-down. After 15 minutes of inactivity, your service goes to sleep. The first request after sleep triggers a cold start that takes 30-60 seconds. For a personal API that you hit occasionally, this is fine. For a user-facing product, cold starts are a conversion rate killer.
The paid Individual tier at $7/mo per service removes spin-down and gives you a dedicated instance. This is comparable to Heroku's Basic dyno at $7/mo, with the added benefit of Render's better deployment pipeline.
Render's managed Postgres is solid but has a sharp edge: the free tier database expires after 90 days. You can create a new one (migrating data manually) or upgrade to the paid plan at $7/mo. This is transparent in the documentation but still catches people off guard.
Build times are Render's weakest point. Complex applications with large dependency trees can take 5+ minutes to build. Railway typically builds the same application in 1-2 minutes. For a solo founder deploying multiple times per day, the difference in iteration speed is noticeable.
The infrastructure backing is solid. Render runs on AWS and GCP with automatic SSL, CDN for static assets, and DDoS protection. Uptime has been reliable in our monitoring.
When to pick Render: You need a free tier for static sites, staging environments, or low-traffic projects. Also strong for paid deployments if build speed is not a priority.
Fly.io — the global edge platform
Fly.io takes a fundamentally different approach. Instead of running your app in one data center, Fly.io deploys your containers to points of presence worldwide. Your API request is served from the data center closest to the user making the request.
For a SaaS product with users in New York, London, and Tokyo, this means sub-100ms response times for everyone, without the complexity of managing a multi-region deployment yourself. Traditional PaaS platforms run your app in one region (usually US East or EU West), and users far from that region experience added latency.
The Machines API is powerful for cost optimization. Scale-to-zero means your app stops when no requests are coming and starts within a few seconds when traffic arrives. Unlike Render's free tier spin-down (30-60 second cold starts), Fly.io machines typically restart in 1-3 seconds.
The free allowance includes 3 shared-cpu VMs with 256MB RAM each. This is enough for a small API or web service. Postgres is available with read replicas, and Fly.io offers LiteFS for distributed SQLite — a compelling option for read-heavy applications that want global replication without a full Postgres cluster.
The learning curve is steeper than Railway or Render. Deployment uses a CLI tool (flyctl) and a fly.toml configuration file. The concepts (machines, volumes, regions, secrets) require more upfront learning. Debugging is harder — logs are less accessible than on Railway or Render's web dashboards, and you sometimes need to SSH into the machine to investigate issues.
Pricing is granular. CPU, memory, bandwidth, and storage are all billed separately. A small app typically costs $3-10/mo, but predicting the exact bill requires understanding the pricing dimensions. The billing dashboard helps, but it is less intuitive than Railway's usage-credit model.
When to pick Fly.io: Your users are globally distributed and response time matters. Also compelling for edge computing use cases, real-time applications, and apps where scale-to-zero saves meaningful money.
Coolify — your own PaaS
Coolify is an open-source platform that turns any VPS into a Heroku-like deployment platform. Install it on a $5/mo Hetzner or DigitalOcean server, and you get git push to deploy, automatic SSL via Let's Encrypt, one-click database provisioning, and a web dashboard for managing everything.
The cost math is compelling. A single $10/mo Hetzner CPX21 (3 vCPU, 4GB RAM) can host 5-10 small web applications, several databases, and background workers. The same workload on Railway would cost $5-15 per service, easily exceeding $50/mo. On Render, similar pricing. Coolify collapses this into a flat infrastructure cost.
The deployment experience mirrors Heroku closely. Connect a GitHub repo, Coolify detects the buildpack, builds the application, and deploys it as a Docker container. Nixpacks (the same builder Railway uses) handle automatic language and framework detection. Custom Dockerfiles work too.
Database management is one-click. Postgres, MySQL, MongoDB, Redis, and more deploy as managed containers on your server. Coolify handles automatic backups (configurable schedule and retention) and connection string injection.
The trade-offs are the trade-offs of self-hosting. Server maintenance (OS updates, security patches, disk monitoring) is your responsibility. There is no automatic failover — if your server goes down, all your apps go down. There is no global CDN or multi-region deployment unless you set it up yourself. Monitoring your server with tools like Uptime Kuma (which Coolify can deploy for you) is essential.
For a technical founder who is comfortable with basic Linux administration, Coolify is the highest-value option on this list. The savings compound over time, and you own your entire infrastructure.
When to pick Coolify: You are technical, comfortable with Linux servers, and want to minimize hosting costs by consolidating multiple services onto a single VPS.
DigitalOcean App Platform — the safe enterprise choice
DigitalOcean App Platform is the managed PaaS offering from one of the most established cloud providers for indie developers. If you already use DigitalOcean Droplets, Managed Databases, or Spaces, App Platform integrates seamlessly.
The deployment experience is competent but not remarkable. Connect a GitHub repo, select your branch, configure environment variables, deploy. Build detection works for common frameworks. The dashboard lets you monitor logs, metrics, and deployment history.
Free static site hosting covers 3 sites with 1 GB storage and 1 GB bandwidth. This is modest compared to Render (100 GB bandwidth) but functional for documentation sites or landing pages.
Per-container pricing is the main limitation. A Basic container at $5/mo runs a single instance. Add a worker process and that is another $5/mo. Add a managed Postgres database ($7/mo minimum) and you are at $17/mo for a standard web app stack. Railway handles the same workload for $5-10/mo with usage-based pricing.
The value of App Platform is context. If your infrastructure is already on DigitalOcean — Droplets for compute, Managed Databases for data, Spaces for files — App Platform fits naturally into that ecosystem. Private networking between App Platform services and your existing DigitalOcean resources works out of the box.
When to pick DigitalOcean App Platform: You are already invested in the DigitalOcean ecosystem and want a PaaS that integrates with your existing infrastructure.
Dokku — the original self-hosted Heroku
Dokku is the oldest project on this list and the simplest. It is literally a bash script that installs a Heroku-compatible deployment platform on any Ubuntu server. If you know Heroku, you know Dokku.
The Heroku buildpack compatibility is Dokku's killer feature. If your app deploys to Heroku with a Procfile, it deploys to Dokku with zero changes. Same buildpacks, same process types, same environment variable management. The migration is a DNS change and a git remote update.
Dokku is extremely lightweight. It runs comfortably on a 1GB RAM VPS. The plugin ecosystem covers the essentials: Postgres, MySQL, Redis, Let's Encrypt SSL, HTTP auth, and more. Each plugin installs with a single command.
The limitation is management interface. Dokku is CLI-only. There is no web dashboard. Deploying, scaling, viewing logs, and managing databases all happen through SSH commands. For a developer who lives in the terminal, this is fine. For anyone who wants a visual overview of their deployments, Coolify is the better self-hosted option.
Single-server architecture means no redundancy. Dokku does not natively support clustering, load balancing, or automatic failover across multiple servers. For a side project or early-stage SaaS, this is acceptable. For a product with paying customers who expect uptime guarantees, you need additional infrastructure around Dokku or a managed platform.
When to pick Dokku: You have existing Heroku apps, want to migrate with minimal changes, and are comfortable with CLI-only management on a VPS.
The real infrastructure cost for indie founders
Here is what a typical SaaS MVP actually costs to run on each platform (web service + Postgres + Redis + background worker):
- Heroku: $7 (Basic dyno) + $9 (Mini Postgres) + $15 (Mini Redis) + $7 (worker dyno) = $38/mo
- Railway: Usage-based, typically $8-15/mo for this workload
- Render: $7 (web) + $7 (Postgres) + $7 (Redis) + $7 (worker) = $28/mo
- Fly.io: Usage-based, typically $10-18/mo depending on regions
- Coolify on Hetzner: $5-10/mo (VPS cost only, all services included)
- DigitalOcean App Platform: $5 (web) + $7 (DB) + $5 (Redis) + $5 (worker) = $22/mo
- Dokku on VPS: $5-10/mo (VPS cost only)
The self-hosted options (Coolify, Dokku) are dramatically cheaper for multi-service deployments because you pay for the server, not per service. The managed platforms (Railway, Render, Fly.io) charge per service but handle all the infrastructure management.
Your choice depends on whether you value your time (managed platform) or your money (self-hosted). For a pre-revenue side project, self-hosting saves real dollars. For a product generating revenue, the managed platform frees up hours you can spend on features and growth.
When to stick with Heroku
Heroku still makes sense if:
- You have production apps on Heroku with complex add-on dependencies (Heroku Scheduler, Papertrail, New Relic) that would require migration
- Your team relies on Heroku Pipelines for staging and review apps in a mature CI/CD workflow
- You need Heroku's enterprise certifications (SOC 2, HIPAA compliance on Shield dynos)
- The Salesforce ecosystem integration matters for your business (Heroku Connect for Salesforce data sync)
- The switching cost exceeds the savings when you factor in engineering time for migration
Heroku's developer experience is still good. It is not the best anymore, but it works reliably. If your Heroku bill is $50/mo and a migration would take 8 hours of engineering time, the payback period is a year or more. Make sure the switch is worth it before committing.
Making the switch: practical tips
- Start with a non-critical app. Deploy a side project or staging environment to the new platform first. Get comfortable with the deployment pipeline, logging, and monitoring before moving production.
- Document your Heroku add-ons. List every add-on, its configuration, and its purpose. Find the equivalent on the new platform or a standalone service that replaces it.
- Test database migration. Use
pg_dumpandpg_restoreto migrate Postgres data. Test the full cycle on a copy before touching production. Verify that all constraints, indexes, and extensions are preserved. - Set up monitoring immediately. Deploy uptime monitoring (Uptime Robot, Better Uptime, or Uptime Kuma for self-hosted) before routing traffic to the new platform. Silent failures are the biggest risk during migration.
- Use DNS-based cutover. Point your domain to the new platform via DNS. Keep Heroku running in parallel for 48 hours in case you need to roll back. DNS TTL of 300 seconds gives you a fast rollback path.
| feature | Heroku | Railway | Render | Fly.io | Coolify | DigitalOcean App Platform | Dokku |
|---|---|---|---|---|---|---|---|
| Monthly cost (small app) | $5/mo (Eco dyno) | $5/mo (Hobby) | Free — $7/mo | $3-10/mo | $5-10/mo (VPS) | $5/mo | $5-10/mo (VPS) |
| Free tier | No (removed 2022) | $5 credit/mo | Yes (with spin-down) | Yes (3 small VMs) | Yes (self-hosted) | Yes (static sites) | Yes (self-hosted) |
| Git push to deploy | Yes | Yes | Yes | Yes (via CLI) | Yes | Yes | Yes |
| Built-in databases | Yes (Heroku Postgres) | Yes (Postgres, Redis, MySQL, MongoDB) | Yes (Postgres, Redis) | Yes (Postgres, Redis) | Via plugins | Yes (DO Managed DB) | Via plugins |
| Global regions | 2 (US, EU) | Limited | Limited | 30+ | Your server location | 8 regions | Your server location |
| Open source | No | No | No | No | Yes | No | Yes |
| Docker support | Yes | Yes | Yes | Yes (native) | Yes | Yes | Yes |
Alternative picks
Railway
Modern deployment platform with the best developer experience in this category. Git push to deploy, instant preview environments, and built-in databases.
pricing: Hobby plan $5/mo (includes $5 usage credit). Pro $20/mo. Usage-based after credits.
pros
- + Deploy from GitHub repo in under 90 seconds — automatic buildpack detection for Node, Python, Go, Ruby, Rust, and more
- + Built-in Postgres, MySQL, Redis, and MongoDB — provision a database with one click, no external setup
- + Environment variable management, preview deployments, and team collaboration out of the box
cons
- - $5/mo minimum on the Hobby plan even for dormant projects — no true free tier for always-on services
- - Usage-based pricing can be unpredictable if your app has traffic spikes
- - Fewer regions than Fly.io — primarily US-based infrastructure with limited global points of presence
Render
Cloud platform that combines the simplicity of Heroku with the scalability of AWS. Free tier for static sites and web services with generous limits.
pricing: Free tier (static sites, web services with limits). Individual $7/mo per service. Team $19/mo per service.
pros
- + Free tier includes static site hosting (100 GB bandwidth/mo) and web services (750 hours/mo) — genuinely usable
- + Automatic SSL, custom domains, and CDN on all plans including free
- + Native support for Docker, background workers, cron jobs, and private networking between services
cons
- - Free tier web services spin down after 15 minutes of inactivity — first request after sleep takes 30-60 seconds to respond
- - Postgres free tier limited to 90 days, then requires a paid plan ($7/mo for the cheapest)
- - Build times can be slow compared to Railway — complex projects sometimes take 5+ minutes to build
Fly.io
Edge-first deployment platform that runs your containers close to users worldwide. Your app runs in data centers near your actual traffic.
pricing: Free allowance (3 shared-cpu VMs, 256MB each). Pay-as-you-go after. Typical small app: $3-10/mo.
pros
- + Deploy to 30+ regions globally — your API responds from the data center closest to each user
- + Machines API gives fine-grained control over scaling, including scale-to-zero for cost optimization
- + Built-in Postgres with read replicas and LiteFS for distributed SQLite
cons
- - Steeper learning curve than Railway or Render — the CLI and configuration require more upfront investment
- - Debugging deployment issues is harder — logs are less accessible than on Railway or Render dashboards
- - Pricing is harder to predict — CPU, memory, bandwidth, and storage all billed separately
Coolify
Open-source, self-hosted PaaS that turns any VPS into a Heroku-like deployment platform. Git push to deploy, SSL, databases — all on your own server.
pricing: Free and open source. You pay for the VPS only ($5-20/mo on Hetzner, DigitalOcean, etc.).
pros
- + Full Heroku-like experience on a $5/mo VPS — git push to deploy, automatic SSL, one-click databases
- + No per-service pricing — run 10 apps on the same server for the cost of one VPS
- + Supports Docker, Nixpacks, and static builds with automatic container management
cons
- - Server maintenance is your responsibility — updates, security patches, disk space, and backups
- - No built-in global CDN or multi-region deployment — your apps run wherever your server is
- - Single server means single point of failure — no automatic failover unless you set up clustering yourself
DigitalOcean App Platform
Managed PaaS from DigitalOcean. Simpler than managing droplets manually, with automatic builds, deployments, and scaling.
pricing: Free tier (3 static sites). Basic $5/mo per container. Professional $12/mo per container.
pros
- + Backed by DigitalOcean infrastructure — battle-tested reliability and uptime guarantees
- + Seamless connection to DigitalOcean managed databases, Spaces (S3-compatible storage), and other services
- + Free static site hosting with 3 sites, 1 GB storage, and 1 GB bandwidth per month
cons
- - Per-container pricing adds up fast — a web service plus a worker plus a database easily exceeds $25/mo
- - Build system is less sophisticated than Railway or Render — custom buildpacks require Docker
- - Developer experience trails Railway and Render — the dashboard feels like an afterthought compared to DigitalOcean core Droplets product
Dokku
The smallest PaaS implementation you have ever seen. A single bash script that turns any Ubuntu server into a Heroku-like deployment target using Docker.
pricing: Free and open source. You pay for the server only ($5-20/mo).
pros
- + Heroku buildpack compatible — existing Heroku apps deploy to Dokku with zero changes
- + Incredibly lightweight — runs on a 512MB RAM VPS (though 1GB+ is recommended for real apps)
- + Plugin ecosystem covers Postgres, Redis, MySQL, Let's Encrypt SSL, and more
cons
- - CLI-only management — no web dashboard for monitoring, logs, or configuration
- - Single-server architecture with no built-in clustering, load balancing, or auto-scaling
- - Setup requires comfort with SSH, Linux server administration, and DNS configuration
FAQ
Why did Heroku kill the free tier?+
Heroku removed its free tier in November 2022, citing abuse (crypto mining, spam bots) and the cost of maintaining infrastructure for free users. The cheapest option is now the Eco dyno at $5/mo (shared across up to 5 apps, with sleep after 30 minutes of inactivity) or the Basic dyno at $7/mo (always on). This pushed tens of thousands of hobby projects and side projects to alternatives like Railway and Render.
What is the cheapest way to host a Node.js or Python web app?+
For zero cost: Render free tier (spins down after inactivity, cold starts on first request) or Fly.io free allowance (3 small VMs). For always-on at minimum cost: Coolify or Dokku on a $4-5/mo VPS from Hetzner or DigitalOcean gives you a Heroku-like experience at fixed infrastructure cost with no per-service fees. Railway at $5/mo with included credits is the easiest paid option.
Should I use Railway or Render?+
Railway has a better developer experience — faster builds, better dashboard, built-in database provisioning. Render has a more generous free tier with static site hosting and free web services (with spin-down). If you are willing to pay $5/mo, Railway is the better product. If you need free hosting for a side project or staging environment, Render wins.
Is self-hosting with Coolify worth the effort?+
If you run more than 2-3 services, absolutely. A single $10/mo Hetzner VPS running Coolify can host 5-10 small apps, multiple databases, and background workers. The same workload on Railway or Render would cost $50-100/mo. The trade-off is maintenance time: server updates, disk monitoring, backup management. For a technical founder comfortable with basic Linux administration, Coolify pays for itself immediately.
Can I migrate a Heroku app to these alternatives without code changes?+
Mostly yes. Railway and Render support Heroku buildpacks and Procfile-based deployments. Dokku is explicitly Heroku-compatible. Fly.io requires a Dockerfile or its own configuration file (fly.toml). The main migration work is usually environment variables, database connection strings, and add-on equivalents (like replacing Heroku Redis with Railway Redis or a self-managed instance).