Move a Heroku app to Canada.
Most Heroku apps move to Canner without code changes: Canner detects the same runtimes, reads PORT the same way, and gives you a Postgres database in Montréal. You copy your config vars, bring the database across with one command, and point your domain. Below is what each Heroku feature becomes, and the few that do not carry over.
Facts checked
Why teams are looking now
On February 6, 2026, Heroku said it is “transitioning to a sustaining engineering model focused on stability, security, reliability, and support”, with an emphasis on “maintaining quality and operational excellence rather than introducing new features”. Existing customers who pay by credit card see no change, and Enterprise Account contracts are no longer offered to new customers. Heroku has not announced an end date, and it remains a supported platform.
For a Canadian team, the other reason is location: Heroku’s standard runtime is in the US and the EU. Montréal exists only for Private Spaces.
| Source | What it says |
|---|---|
| Heroku blog, February 6, 2026 † | Sustaining engineering, no new features; no change for credit-card customers; no new Enterprise Account contracts |
† Competitor details come from each vendor’s own published pages on the dates shown; prices and plans change, so check the vendor before you decide. Heroku blog, February 6, 2026 (2026-10-29)
What each Heroku feature becomes
| On Heroku | On Canner |
|---|---|
| Buildpacks | Detected from your manifest: Node, Python, Ruby, PHP, Go, Java, Rust and static sites |
web: process in the Procfile | Detected start command per framework; set your own under Settings → Build if needed. The Procfile is not read |
release: process | The release command, under Settings → Build. It runs after the build and before the new version starts |
worker: dynos | Not supported as a second process yet. Run the queue inside the web process (Solid Queue or GoodJob for Rails) |
| Config vars | Environment variables; paste them all at once in the bulk editor |
| Heroku Postgres | Canner Postgres 17 or 18, with DATABASE_URL injected |
| Heroku Key-Value Store (Redis) † | Not offered. Rails 8’s Solid Cache, Queue and Cable use Postgres instead; Sidekiq needs a Redis you run elsewhere |
| Heroku Scheduler | Scheduled jobs: a cron expression that calls a URL in your app, so each task becomes an endpoint |
| Review apps | Preview deploys for each pull request |
| Custom domains and ACM | Custom domains with automatic TLS, on Live |
| Eco dynos that sleep | Starter projects sleep after 3 hours idle and wake on the next request; Live keeps two always on |
† Competitor details come from each vendor’s own published pages on the dates shown; prices and plans change, so check the vendor before you decide. Heroku Key-Value Store (Redis) (2026-10-29)
The move, step by step
- Create the project. Connect the GitHub repo, or run
canner deployfrom the folder. Canner picks the runtime from your Gemfile, package.json, requirements.txt or composer.json. - Copy the config vars. Print them as
KEY=valuelines and paste them into the bulk editor (commands below). SkipDATABASE_URL. - Set the release command. Copy the
release:line from your Procfile, for examplebundle exec rails db:migrateorpython manage.py migrate. A Rails 8 app with no release command getsbundle exec rails db:prepare. - Bring the database across. Use one of the two routes below, during a quiet moment or with your app in maintenance mode.
- Point your domain. Add it to the project, then change the DNS record. Keep the Heroku app running until traffic has moved.
# Print every config var as KEY=value lines
heroku config --shell --app your-app
# Paste the output into Settings → Environment variables → bulk editor.
# Leave DATABASE_URL out: Canner sets its own.Bringing Heroku Postgres across
Route A streams the database straight from Heroku with no file in between, which suits a large database. Route B uses Heroku’s own backup: Heroku documents pg:backups:capture and pg:backups:download for exporting, and its backups are in the pg_dump custom format that canner db import reads. Heroku describes its backups as intended for databases up to 20 GB.
Owners and privileges do not come across in either route: tables belong to your Canner database role. For a cutover with almost no downtime, the dedicated instance can follow a source server live; see the Postgres migration guide for what the source needs.
# Route A: stream straight from Heroku Postgres
heroku config:get DATABASE_URL --app your-app
canner db migrate-in --from "postgres://…from the line above…"
# Route B: download Heroku's backup and import the file
heroku pg:backups:capture --app your-app
heroku pg:backups:download --app your-app # writes latest.dump
canner db import latest.dump| Source | What it says |
|---|---|
| Heroku Dev Center, Importing and Exporting Heroku Postgres Databases † | Export with pg:backups:capture and pg:backups:download |
† Competitor details come from each vendor’s own published pages on the dates shown; prices and plans change, so check the vendor before you decide. Heroku Dev Center, Importing and Exporting Heroku Postgres Databases (2026-10-29)
What does not carry over
- A separate always-on worker process next to the web process.
- Redis. Use Postgres-backed queues and caches, or a Redis you run elsewhere.
- Heroku add-ons from the marketplace. Look for each one’s own hosted plan, or a Canner feature that replaces it (object storage, scheduled jobs, analytics).
- High availability and read replicas for Postgres. Canner runs one region with backups and point-in-time recovery, not failover.
Questions
Is Heroku shutting down?
No shutdown has been announced. In February 2026 Heroku moved to a sustaining engineering model: no new features, continued support, no change for existing credit-card customers.
Do I need to change my code?
Usually not. The app must read PORT from the environment, which Heroku already requires. Rails, Django and Spring apps that check the Host header must allow your canner.app host or custom domain.
Can Canner run my worker dyno?
Not as a second process yet. Run the job queue inside the web process; the background jobs guide shows it with Rails and GoodJob.
How much does it cost compared with Heroku?
Canner’s Starter plan is free and includes Postgres. Live is $9 a month and keeps two projects always on with custom domains. See pricing.
Related
- BlogCanada's AWS Alternative — By Accident
- BlogIs AWS Canada Subject to the CLOUD Act?
- BlogThe State of Canadian Cloud Infrastructure in 2026 — What Exists, What's Missing, and Why It Matters
- GuideHeroku alternatives in 2026: the Canadian options
- GuideDoes Render have a Canadian region? Alternatives
- GuideCanadian alternatives to Railway, compared
Try the move on the free plan.
Deploy a copy of your app and database on Starter, check it, then point your domain.