Part of ComparisonsHeroku · Migration guide

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.

SourceWhat 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 HerokuOn Canner
BuildpacksDetected from your manifest: Node, Python, Ruby, PHP, Go, Java, Rust and static sites
web: process in the ProcfileDetected start command per framework; set your own under Settings → Build if needed. The Procfile is not read
release: processThe release command, under Settings → Build. It runs after the build and before the new version starts
worker: dynosNot supported as a second process yet. Run the queue inside the web process (Solid Queue or GoodJob for Rails)
Config varsEnvironment variables; paste them all at once in the bulk editor
Heroku PostgresCanner 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 SchedulerScheduled jobs: a cron expression that calls a URL in your app, so each task becomes an endpoint
Review appsPreview deploys for each pull request
Custom domains and ACMCustom domains with automatic TLS, on Live
Eco dynos that sleepStarter 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 deploy from the folder. Canner picks the runtime from your Gemfile, package.json, requirements.txt or composer.json.
  • Copy the config vars. Print them as KEY=value lines and paste them into the bulk editor (commands below). Skip DATABASE_URL.
  • Set the release command. Copy the release: line from your Procfile, for example bundle exec rails db:migrate or python manage.py migrate. A Rails 8 app with no release command gets bundle 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
SourceWhat 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.

Try the move on the free plan.

Deploy a copy of your app and database on Starter, check it, then point your domain.