Heroku alternatives: where to host your app, and how to migrate without breaking it
Six destinations, one for each reason to leave, plus an eight-step migration plan.
The short answer: Render if you want the Heroku experience with more memory for the money, Railway for small apps billed by usage, DigitalOcean App Platform for flat pricing and a database migration with almost no downtime, Fly.io if your users are spread across continents, Coolify if you'll run your own server to cut the bill, and Scalingo if your data has to stay in the EU. One thing before you pick: moving the code takes an hour. Moving Postgres and your scheduled jobs takes real planning. We compared these six platforms, their 2026 pricing and their official Heroku migration guides.
Our ranking is editorial: a sponsored spot is always labeled on its card, and no affiliate link changes a score.
Why so many teams are leaving Heroku
Heroku made "git push to deploy" normal, and plenty of developers still love it. People aren't leaving because the product broke. They're leaving because of where it's headed, what it costs once an app grows, and a few incidents that stuck. Six reasons, all checked in 2026.
Feature development is frozen
In early 2026, Heroku announced a move to a "sustaining engineering" model: stability, security, reliability and support, not new features. New customers can no longer sign Enterprise contracts. If you pay by credit card, nothing changes for now, not your price and not your service, and no end date has been announced. Still, a platform that stops evolving falls a little further behind every year. The right move isn't panic. It's writing an exit plan while you have time.
Costs jump the moment an app matters
A Basic dyno (the container that runs your app) costs $7 a month for 512 MB of memory. Once you need the Standard tier, that same 512 MB costs $25, and 1 GB costs $50. Add Postgres Essential ($5 to $20) and Key-Value Store ($3 for Mini, $15 for Premium 0). On Render, $25 a month buys an instance with 2 GB. For a production app with one web process and one worker, the gap quickly reaches tens of dollars a month.
Eco is a tight squeeze
The free tier ended in late 2022. Its replacement, Eco, costs $5 a month for 1,000 hours shared by every Eco dyno on your account. An Eco app sleeps after 30 minutes without traffic, and the next visitor waits for it to wake up. Run out of hours and every Eco app sleeps until next month, with no option to buy more. Eco also isn't allowed on Heroku Teams apps, so as soon as you work with others, Basic is the floor.
An outage people remember
In 2025, an unintended system update hit Heroku's production infrastructure and took down much of the platform. Heroku says many customers saw up to 24 hours of downtime, and its own status page, running on the same infrastructure, went down with it. Heroku published a postmortem and corrective actions. For teams that sold Heroku internally as the "we never think about hosting" option, that day was often the trigger.
Support has slowed down, customers say
In Heroku community threads, customers describe support that used to come from engineers who knew the product, and since 2024 queues of two to three days, with answers pointing to help articles they had already read. One customer on a six-figure contract called renewal pricing "outrageous". Not everyone has that experience, but the same story shows up thread after thread.
Leaving takes some prep
Heroku doesn't support logical replication from its Postgres to an outside provider. By default, cutover means a write freeze: maintenance mode, backup, restore elsewhere. Add-ons (Redis, logging, email) get replaced one by one, and Heroku Scheduler jobs get recreated by hand. None of it is hard. But anything you don't write down before you leave will get missed.
You're leaving because… go to…
The right Heroku alternative depends on what's pushing you out. Usually only one row applies. Each card jumps to the full write-up below.
Official Heroku mapping, 2 GB for $25 a month.
You run several small apps that sit idle most of the dayRailwayPay per second for what runs, $5 of usage included on Hobby.
You can't afford more than a few minutes of database downtimeDigitalOcean App PlatformContinuous Postgres migration for up to two weeks.
Your users are on several continentsFly.ioRun close to them, small machines from $2.19.
You want to slash the bill and can run a serverCoolifyOpen source, on your own server.
Your data has to stay in the EUScalingoFrench PaaS, HDS option and a SecNumCloud region.
Heroku alternatives, platform by platform
For each one: why move there, who it's for, the catch, how to migrate from Heroku, and what it costs. Prices are the ones listed in 2026, in US dollars, except Scalingo, which only lists euros. The order follows how close each platform feels to Heroku, from "barely notice the switch" to "you're running servers now".
The platforms
Render: the closest thing to Heroku
Closest matchWhy switch to Render. Render is the platform that feels most like Heroku, and its docs map one to the other directly. A web dyno becomes a web service, a worker dyno becomes a background worker, Heroku Scheduler becomes a cron job, and your Procfile's release phase becomes a pre-deploy command. Deploys are zero-downtime by default. The Starter instance is $7 a month for 512 MB, same as Heroku Basic, but the Standard instance gives you 2 GB for $25, where Heroku's $25 dyno gives you 512 MB.
Who it's for. Teams that want off Heroku without relearning anything: a Rails, Django, Node or Laravel app, Postgres, Redis, a few scheduled jobs.
Who it's not for. A side project that has to run free all year. Render's free web services sleep, and its free database expires.
The catch. Free web services spin down after 15 minutes without traffic and take about a minute to wake. Free Postgres expires 30 days after creation (then a 14-day grace period before deletion) and has no backups. Background workers have no free plan. For a team, the Pro workspace costs $25 a month on top of compute, with unlimited seats. And Postgres storage can go up but never down, so don't oversize it on import day. One user on Render's forum found its Postgres pricier than Heroku's at the same size: compare on your actual database, not just the web instance.
How to migrate. Create Postgres and Key Value first, in the same region as your services. Then describe everything in a render.yaml Blueprint (web services, workers, cron jobs, databases) and keep it in your repo. Export config vars with heroku config --shell. On cutover day: Heroku maintenance mode, backup, restore into Render through the database's external URL, then DNS. Render advertises up to $10K in migration credits, so ask before you pay for anything.
- Free
- web sleeps after 15 min, DB 30 days
- Paid
- Starter $7, Standard $25 (2 GB)
- Team
- Pro $25/mo, unlimited seats
- Catch
- Postgres storage can't shrink
Railway: pay by the second for small apps
Usage-basedWhy switch to Railway. Railway doesn't sell fixed-size containers. You pay for the CPU, memory and egress you actually use, by the second. Hobby is $5 a month with $5 of usage included. For three or four small apps that get light traffic, the bill often stays near that floor, where Heroku would charge a Basic dyno per app. The dashboard is genuinely pleasant, and connecting a GitHub repo takes a couple of clicks.
Who it's for. Indie developers, small teams and side projects, with Postgres or Redis alongside.
Who it's not for. A revenue-critical app with no plan B. In spring 2026, the whole platform went down for about 8 hours after Google Cloud suspended Railway's account.
The catch. Usage billing surprises people. Budget about $20 per vCPU and $10 per GB of memory for a full month, plus $0.05 per GB of egress. On Railway's forum, Hobby users report bills of $19 or $25 instead of $5, mostly from memory. Support's advice is to set a hard usage limit in your workspace settings, so do that on day one. Pro is $20 a month per workspace, with unlimited seats.
How to migrate. Connect your repo, copy each Procfile command into the service start command, and create one service per process (web, worker). Railway has native cron jobs, with two gotchas: schedules run in UTC, and the minimum interval is 5 minutes. Your job also has to exit when it's done. If it's still running, the next run gets skipped and you keep paying for it.
- Free
- $0 with $1 of usage a month
- Paid
- Hobby $5, Pro $20 per workspace
- Best for
- small, low-traffic apps
- Catch
- set a usage limit
DigitalOcean App Platform: flat pricing and a gentle database move
Flat pricingWhy switch to App Platform. The smallest shared container is $5 a month for 512 MB, with 50 GiB of transfer included and $0.02 per GiB after that. That's $2 less than Heroku Basic, and it never sleeps. The real differentiator is the database: DigitalOcean offers continuous migration for Postgres that keeps syncing your data for up to two weeks. You pick the cutover moment, and downtime is measured in minutes instead of an evening.
Who it's for. Small businesses and agencies that want a predictable bill, or teams already running Droplets on DigitalOcean.
Who it's not for. Teams chasing maximum performance at the lowest price: the small containers are shared.
The catch. The free tier covers static sites only (three apps). The dev database is $7 a month, but a production database goes through Managed Databases, billed separately. And encrypted environment variables can't be read back from the dashboard, so keep your source of truth somewhere else.
How to migrate. The official Heroku guide maps it out: web becomes a Service, worker becomes a Worker, release becomes a job that runs before every deploy (and blocks the deploy if it fails), Scheduler becomes a scheduled job. Buildpacks are auto-detected as Cloud Native Buildpacks. Describe the app in an App Spec and ship it with doctl apps create --spec app-spec.yaml. Over 1 TB of data, go through their migration program.
- Free
- static sites, 3 apps
- Paid
- 512 MB container at $5/mo
- Edge
- continuous Postgres migration
- Catch
- production DB billed separately
Fly.io: run your app close to your users
Multi-regionWhy switch to Fly.io. Fly.io runs your app on small virtual machines in the region you choose, or in several at once. If your users are in New York, London and Singapore, each one talks to the nearest machine. Machines are cheap: $2.19 a month for 256 MB, $3.69 for 512 MB, $6.70 for 1 GB running full time, and outbound traffic is $0.02 per GB in North America and Europe.
Who it's for. Teams comfortable with the command line and Docker who want low latency everywhere, or lots of small apps for little money.
Who it's not for. Teams who picked Heroku so they'd never open a terminal. Fly.io is CLI-first and asks for more ops time.
The catch. No free plan for new organizations: the trial ends after 2 hours of machine time or 7 days, then a credit card is required. Managed Postgres starts at $38 a month, well above Heroku Essential. In 2026, Fly's community forum and status trackers logged repeated regional incidents on Managed Postgres (Frankfurt, Tokyo, Sydney). The older Fly Postgres isn't managed at all: backups and failover are on you. Many teams keep their database with another provider.
How to migrate. A Dockerfile is the safest path: build the image locally, confirm it boots, then deploy. Recreate each Procfile process as a process group, and put your database on Managed Postgres or elsewhere. Volumes are $0.15 per GB per month.
- Free
- no, 2-hour or 7-day trial
- Paid
- 512 MB machine at $3.69/mo
- Database
- Managed Postgres from $38/mo
- Catch
- more hands-on, regional incidents
Coolify (or Dokku): your own Heroku on your own server
Self-hostedWhy switch to Coolify. Coolify is open-source software that turns a rented server into a deployment platform: GitHub integration, deploy on push, HTTPS certificates, one-click databases. Self-hosted, it's free with no feature limits. You only pay for the server, and a DigitalOcean Droplet starts at $4 a month (see our VPS hosting ranking).
Who it's for. Developers and agencies hosting many apps, with someone who can run a Linux server.
Who it's not for. A team with nobody to handle updates, backups and security. You become the hosting provider, late-night pages included.
The catch. Everything depends on your server. If it goes down, everything goes down, and database backups are your job. If you don't want to maintain Coolify itself, Coolify Cloud is $5 a month for 2 servers, then $3 per extra server, 20% off yearly. It manages your servers but doesn't provide them.
The Dokku option. Older and more minimal, Dokku calls itself an open-source alternative to Heroku. It uses Heroku buildpacks and git push deploys on a single server. If your Procfile has to stay untouched, it's the shortest path.
How to migrate. Install Coolify on a fresh server, add your repo, pick a build method (buildpack or Dockerfile), paste your env vars, create Postgres and restore your Heroku backup. Then schedule automatic database backups to external storage right away.
- Free
- self-hosted, open source
- Paid
- Cloud $5/mo for 2 servers
- Server
- Droplet from $4/mo
- Catch
- you own updates and backups
Scalingo: the EU option for regulated data
EU hostingWhy switch to Scalingo. Scalingo is a French PaaS built on the Heroku model: git push deploys, Heroku-compatible buildpacks, your Procfile as is. Its data centers are in Europe, with no transfers outside the EU. It's ISO 27001 certified, offers an HDS option (the French health-data hosting certification) and a SecNumCloud region on Outscale. If you sell to European customers who ask where their data lives, this is the cleanest answer.
Who it's for. SaaS companies with European customers, health tech, public sector projects, anyone with GDPR in the contract.
Who it's not for. US-only teams on a tight budget: there's no free plan, only a 30-day trial, and prices are in euros.
The catch. Price. Container S (256 MB) is €7.20 a month excl. VAT, M (512 MB) is €14.40, L (1 GB) is €28.80, based on 30 days. Per GB it costs more than Render, but less than Heroku Standard. The SecNumCloud region adds 20%, and HDS requires a Business plan and at least two containers. Containers never sleep, and collaborators are unlimited.
How to migrate. Four commands: scalingo create, copy the vars from heroku config with scalingo env-set, then git push scalingo master. Move the database with a Heroku backup restored through scalingo db-tunnel. The heroku2scalingo tool automates app creation and variables, not data. Postgres Starter starts at €7.20 for 512 MB with no high availability, so use Business (from €20) for production.
- Trial
- 30 days, no free plan
- Paid
- S €7.20, M €14.40 excl. VAT
- Data
- EU only, HDS, SecNumCloud
- Catch
- pricier per GB than Render
Heroku and 6 alternatives side by side
Our default pick: Render to recreate Heroku with the least effort, DigitalOcean if database downtime is your biggest fear. For a baseline, take one always-on 512 MB web process and a small Postgres. On Heroku that's $7 (Basic) plus $5 (Essential-0), so $12 a month. On Render, $7 plus $6 (Basic-256mb), so $13. On DigitalOcean, $5 plus $7 (dev database), so $12. The gap opens up as you add memory: 1 GB costs $50 on Heroku Standard-2X and $6.70 on Fly.io. One row per platform: free tier on the left, first paid price and migration path on the right.
| Free tier or trial | First paid plan and migration | |
|---|---|---|
| HerokuWhere you're starting | None since 2022; Eco $5 for 1,000 shared hours, with sleep | Basic $7 (512 MB), Standard-1X $25, Postgres Essential from $5 |
| RenderClosest match | Web sleeps after 15 min, free DB for 30 days | Starter $7 (512 MB), Standard $25 (2 GB); official mapping, render.yaml |
| RailwayUsage-based | $0 with $1 of usage a month | Hobby $5 with $5 of usage, Pro $20 per workspace; one service per process |
| DigitalOcean App PlatformFlat pricing | Static sites, 3 apps | 512 MB $5; continuous Postgres migration |
| Fly.ioMulti-region | 2-hour or 7-day trial | 256 MB $2.19, 512 MB $3.69; Dockerfile recommended |
| CoolifySelf-hosted | Free on your own server | Cloud $5 for 2 servers, plus the server; buildpack or Dockerfile |
| ScalingoEU hosting | 30-day trial | Container S €7.20, M €14.40 excl. VAT; buildpacks and Procfile kept |
Entry prices before tax, subject to change. Always check against your real memory use and traffic.
Leave Heroku in eight steps
Order matters. Code moves fast. The database and scheduled jobs need a method. Each step protects something: your data, your users, your emails, your bill.
The steps
Inventory every app
Day 1For each app, list the Procfile processes (web, worker, release), buildpacks (heroku buildpacks), add-ons (heroku addons), domains (heroku domains), every Scheduler job with its frequency, and your Postgres version.
A simple sheet does the job: one row per item, with its equivalent at the destination. On cutover day it's your checklist. A forgotten add-on is a service that quietly stops the day you cancel.
- Time
- about an hour per app
- If rushed
- a forgotten add-on
Map each Heroku piece to the destination
Web dyno becomes a web service, worker becomes a background worker, release becomes a pre-deploy command (that's where your database migrations run). Heroku Scheduler becomes a cron job: on Railway it runs in UTC with a 5-minute minimum interval, on Render and DigitalOcean it's a dedicated job type.
Many add-ons are third-party services (email, logging, monitoring) that work anywhere once you copy their env vars. The rest (Postgres, Redis) get recreated at the destination.
- release
- pre-deploy command
- Scheduler
- cron job, watch the time zone
Export config vars without leaking them
Securityheroku config --shell prints every variable in .env format. Keep that file out of Git, and delete it when the migration is done: it holds your keys.
Three values will change no matter what: DATABASE_URL, REDIS_URL, and anything with your Heroku app name in it. It's also a good moment to rotate your most sensitive keys.
- Command
- heroku config --shell
- Trap
- .env committed by mistake
Stand up the app at the destination
Deploy against an empty database on a temporary URL. Check that the build passes, workers boot and cron jobs fire. Create the database on the same major Postgres version as Heroku: a mismatch can make the restore fail.
List your Postgres extensions too, and confirm the destination supports each one.
- Check
- Postgres version, extensions
Rehearse the database move and time it
CriticalTake a backup with heroku pg:backups:capture, download it with heroku pg:backups:download, then load it with pg_restore into the destination database. Time the whole thing: that's your downtime window on cutover day.
Above roughly 20 GB, follow Heroku's large-database procedure and run pg_restore -j to parallelize. If the window is still too long, look at DigitalOcean's continuous migration or ask the destination's support team for help.
- Threshold
- 20 GB, separate procedure
- Output
- measured downtime
Lower your DNS TTL the day before
Day beforeA day ahead, drop the TTL on your domain's DNS records to 60 to 300 seconds. On cutover day the change spreads in minutes, and so does a rollback.
Plan for the HTTPS certificate at the destination: it's issued once the domain points there, so leave a few minutes.
- TTL
- 60 to 300 seconds
Cut over: maintenance, backup, restore, DNS
D-dayTurn on maintenance mode (heroku maintenance:on) and stop workers (heroku ps:scale worker=0) so no write gets lost. Take the final backup, restore it, then compare row counts on critical tables (users, orders, invoices).
If the numbers match, point DNS at the destination. If they don't, you haven't lost anything yet: turn maintenance off and try again later.
- Writes
- frozen during cutover
- Check
- row counts per table
Keep Heroku as a fallback, then shut it down cleanly
Keep the Heroku database read-only until a rollback deadline you set in advance (one to two weeks). Delete Heroku Scheduler jobs immediately: if they run on both sides, every email goes out twice.
Only then cancel add-ons, then dynos. Download one last backup and store it outside Heroku.
- Fallback window
- one to two weeks
- Kill first
- Heroku Scheduler
Is your tool missing from this page? Email us: hello@hackceleration.com
What makes a Heroku migration go wrong
The same mistakes show up in platform guides and community threads alike. None of them are deeply technical. They're oversights, and each one costs more than the time it would have taken to avoid.
Running jobs in both places
Heroku Scheduler keeps firing as long as the app exists. If the destination runs the same jobs, every reminder, invoice and email goes out twice. Turn Scheduler off the moment the new cron job is live.
Forgetting the time zone
A job set for "8 a.m. every day" in Eastern time fires at a different hour if the destination thinks in UTC, like Railway. Convert every schedule and watch the first run.
Putting a free database in production
Render's free Postgres expires 30 days after creation, with no backups, and free web services sleep after 15 minutes. Fine for a demo, risky for a customer. Move to a paid plan before you import real data.
Restoring into a different Postgres version
A backup taken on Postgres 16 and restored into an older version fails, sometimes halfway through. Match the major version, list your extensions, and run a full rehearsal before cutover.
Missing an add-on
Logging, monitoring, transactional email, scheduled backups: every Heroku add-on does a job you no longer see. Cancel it and that job stops. Go through heroku addons line by line before shutting down.
Comparing prices without comparing units
Heroku bills per dyno, Render per instance plus $25 for a Pro workspace, Railway per second, Fly.io per machine plus egress, Scalingo per container in euros. Compare on your real usage: memory, number of processes, egress, team size. If a server of your own is on the table, see our VPS hosting ranking and our guide to leaving Hetzner. For a Next.js front end rather than an app with a database, our Vercel alternatives guide is a better fit.
- Processes, buildpacks, add-ons, domains and scheduled jobs inventoried
- Every Heroku piece mapped at the destination
- Config vars exported outside the repo, sensitive keys rotated
- App running on the destination, same major Postgres version
- Database move rehearsed and timed
- DNS TTL lowered the day before
- Maintenance mode on and workers stopped during cutover
- Row counts compared on critical tables
- Heroku Scheduler disabled at cutover
- Heroku database kept read-only for one to two weeks
Heroku alternatives: frequently asked questions
Is Heroku shutting down?
No shutdown has been announced. Since early 2026, Heroku runs on a "sustaining engineering" model: stability, security and support continue, but no new features and no new Enterprise contracts for new customers. End of sale isn't end of life. If your app runs fine, there's no rush, but keep an inventory and a fresh backup ready.
Is Heroku still free?
No. Free dynos, Postgres and Key-Value plans ended in late 2022, which Heroku blamed on fraud and abuse. The cheapest option is Eco: $5 a month for 1,000 shared hours, sleeping after 30 minutes, and only for personal apps, not Teams.
What's the best free Heroku alternative?
Render for a demo: free web services, but they sleep after 15 minutes, and free Postgres lasts 30 days. Railway gives you $1 of usage a month, enough for a tiny app. DigitalOcean's free tier is static sites only. If you want to pay the platform nothing, run Coolify or Dokku on your own server, from $4 a month for a Droplet. Fly.io no longer has a free plan for new accounts.
Is Render cheaper than Heroku?
At the entry level, no: both charge $7 for 512 MB. Above that, usually yes: $25 buys 2 GB on Render and 512 MB on Heroku Standard-1X. Two catches: teams need Render's $25 Pro workspace, and Render Postgres isn't always cheaper than Heroku's at the same size.
Render or Railway after Heroku?
Render if you want fixed prices and the same structure as Heroku (services, workers, cron jobs, managed Postgres). Railway if you run several low-traffic apps: you pay by the second, often around $5 a month. Set a usage limit on Railway, and keep a plan B for anything critical after its spring 2026 outage.
Do I have to rewrite my Procfile?
Not on Scalingo or Dokku, which read it as is. On Render, DigitalOcean and Railway, each line becomes a service or a job: you copy the command, unchanged. Only the release line needs care: it becomes a pre-deploy command.
How do I migrate a large Heroku Postgres database?
Up to about 20 GB, a Heroku backup plus
pg_restoreworks, with a few minutes to an hour of downtime. Beyond that, follow Heroku's large-database procedure and parallelize withpg_restore -j. Heroku doesn't allow logical replication out, so for minimal downtime look at DigitalOcean's continuous migration or Render's migration support.How much does Heroku cost in 2026?
Eco $5 a month (1,000 shared hours), Basic $7 per dyno, Standard-1X $25, Standard-2X $50, Performance-M $250. Add Postgres Essential at $5 to $20 and Key-Value Store from $3. A small production app with web, worker and database lands around $19 a month on Basic, and $55 once it needs Standard.
Can I keep my Heroku add-ons on another platform?
Often, yes. Many add-ons are third-party services (email, logging, monitoring): sign up directly with the vendor, copy the variable, and it works elsewhere. Heroku's own add-ons (Postgres, Key-Value, Scheduler) get replaced by the destination's equivalents.
PaaS or my own server after Heroku?
A PaaS like Render if nobody on the team wants to run servers. A server with Coolify if you host many apps and someone can manage it: the bill can drop by more than half. For bigger infrastructure, our public cloud ranking and our guide to leaving AWS round out the picture.
Get the next migration guide in your inbox
One tool to leave, one destination, one migration plan. Nothing else.