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.

Romain CochardCEO of Hack'celeration
Updated 20266platforms compared8migration steps2026prices checked

Our ranking is editorial: a sponsored spot is always labeled on its card, and no affiliate link changes a score.

The real reasons

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.

The 6 alternatives

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".

01

Render: the closest thing to Heroku

Closest match

Why 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
See Render pricing →
02

Railway: pay by the second for small apps

Usage-based

Why 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
See Railway pricing →
03

DigitalOcean App Platform: flat pricing and a gentle database move

Flat pricing

Why 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
See App Platform pricing →
04

Fly.io: run your app close to your users

Multi-region

Why 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
See Fly.io pricing →
05

Coolify (or Dokku): your own Heroku on your own server

Self-hosted

Why 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
See Coolify pricing →
06

Scalingo: the EU option for regulated data

EU hosting

Why 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
See Scalingo pricing →
The comparison

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 trialFirst paid plan and migration
HerokuWhere you're startingNone since 2022; Eco $5 for 1,000 shared hours, with sleepBasic $7 (512 MB), Standard-1X $25, Postgres Essential from $5
RenderClosest matchWeb sleeps after 15 min, free DB for 30 daysStarter $7 (512 MB), Standard $25 (2 GB); official mapping, render.yaml
RailwayUsage-based$0 with $1 of usage a monthHobby $5 with $5 of usage, Pro $20 per workspace; one service per process
DigitalOcean App PlatformFlat pricingStatic sites, 3 apps512 MB $5; continuous Postgres migration
Fly.ioMulti-region2-hour or 7-day trial256 MB $2.19, 512 MB $3.69; Dockerfile recommended
CoolifySelf-hostedFree on your own serverCloud $5 for 2 servers, plus the server; buildpack or Dockerfile
ScalingoEU hosting30-day trialContainer 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.

Migration plan

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.

01

Inventory every app

Day 1

For 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
02

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
03

Export config vars without leaking them

Security

heroku 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
04

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
05

Rehearse the database move and time it

Critical

Take 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
06

Lower your DNS TTL the day before

Day before

A 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
07

Cut over: maintenance, backup, restore, DNS

D-day

Turn 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
08

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

Migration pitfalls

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
FAQ · 10 questions

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_restore works, with a few minutes to an hour of downtime. Beyond that, follow Heroku's large-database procedure and parallelize with pg_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.

Hack'celeration Labs

Get the next migration guide in your inbox

One tool to leave, one destination, one migration plan. Nothing else.

No spam. Unsubscribe in one click.