Heroku-22 end of life: dates, commands and upgrade notes
Updated · Rotomal
Heroku-22 was deprecated on 20 May 2026 and reaches end-of-life on 30 April 2027, when Ubuntu 22.04 standard support ends. Apps keep running after that, but from 1 May 2027 Heroku no longer allows builds for Heroku-22 apps. Upgrade with heroku stack:set heroku-24 or heroku-26 on a test or staging app, rebuild, fix what breaks, then promote to production.
Key dates
| Date | What happens |
|---|---|
| 20 May 2026 | Heroku-22 deprecated; apps keep running but should be upgraded |
| 1 November 2026 | The first build of each Heroku-22 app in a 30-day period fails with a deprecation error; retrigger it to deploy |
| 1 February 2027 | The same deliberate build error, now once in every 7-day period |
| 1 April 2027 | The same deliberate build error, now once in every 24-hour period |
| 30 April 2027 | Heroku-22 end-of-life; no more stack security updates |
| 1 May 2027 | Builds no longer allowed for Heroku-22 apps; running apps and non-build functions continue |
| April 2029 | Heroku-24 supported through this date |
| April 2031 | Heroku-26 supported through this date |
Find your Heroku-22 apps
heroku plugins:install @heroku-cli/plugin-apps-tableheroku apps:table --filter="STACK=heroku-22"Upgrade steps
- Test first on a Review App, a separate test app or your staging app.
- Set the stack: heroku stack:set heroku-26 -a <app name> (or heroku-24).
- Trigger a build; the new stack applies only on the next build. With no changes, push an empty commit.
- Check the app, then update the stack in app.json so Review Apps and Heroku CI match.
- In a pipeline, upgrade and verify staging, then promote; promotion copies the slug and sets the target's stack.
heroku stack:set heroku-26 -a my-app-staginggit commit --allow-empty -m "Upgrading to heroku-26"git push heroku mainWhat breaks moving from Heroku-22 to Heroku-24
| Change on Heroku-24 | What to do |
|---|---|
| Git only at build time | Use SOURCE_COMMIT at build time or HEROKU_BUILD_COMMIT at run time, or add git through the APT buildpack |
| System Python only at build time, as python3 | Add the Python buildpack and a .python-version file if you need Python at run time |
| Only C, C.utf8, POSIX and en_US.utf8 locales | Add the locale buildpack for others |
| No US/* time zone names | Use names like America/Chicago, or add tzinfo-data (Ruby) or time/tzdata (Go) |
| OpenJDK no longer defaults to 8 | Pin your Java version explicitly |
| Google Chrome and Redis stunnel buildpacks unsupported | Use the Chrome for Testing buildpack; use Redis native TLS |
| APT sources moved to deb822 format | Fix third-party buildpacks that override APT source paths |
| Docker images default to the non-root heroku user | Add USER root where your Dockerfile writes outside /home/heroku or /tmp |
Heroku says there are no known breaking OS changes from Heroku-24 to Heroku-26. Also check for pinned buildpack versions and end-of-life Ruby versions, which Heroku lists as common upgrade problems.
Roll back if needed
heroku releasesheroku rollback v12Or set the original stack again with heroku stack:set and redeploy, while that stack still allows builds.
If you want it done for you
Heroku-22 Exit runs the upgrade on a staging or review app, fixes what fails and hands you a pull request, with the rollback written down. $149 per app, starting with a stack check.
Questions
What happens to Heroku-22 apps after 30 April 2027?
They keep running without stack security updates. From 1 May 2027 they cannot be built, so new deploys fail until the app moves to a newer stack.
How do I upgrade from Heroku-22?
Run heroku stack:set heroku-24 or heroku-26 on a test or staging app, trigger a new build, fix what fails, then promote or apply the same change to production.
Should I skip Heroku-24 and go straight to Heroku-26?
You can. Heroku recommends the latest stack and says to review the upgrade notes for every generation in between, so read the Heroku-24 notes as well.
Why did my build fail after the stack change?
Common causes are pinned buildpack versions, a stale build cache with third-party buildpacks, end-of-life Ruby versions, and the Heroku-24 changes such as Git and Python being build-time only.
Can I upgrade from the Dashboard?
Yes. App settings have an Upgrade Stack button; the change applies on the next deploy.
Is Heroku-24 or Heroku-26 the default?
Heroku-24 is the default for new Cedar apps. Heroku-26 must be chosen explicitly.
Sources
- Heroku Changelog: Heroku-22 stack deprecation and end-of-life Source: devcenter.heroku.com
- Heroku Help: Heroku-22 End-of-Life FAQ (build warnings) Source: help.heroku.com
- Heroku Dev Center: Stacks Source: devcenter.heroku.com
- Heroku Dev Center: Upgrading to the latest stack Source: devcenter.heroku.com
- Heroku Dev Center: Heroku-24 stack Source: devcenter.heroku.com
- Heroku Dev Center: Heroku-26 stack Source: devcenter.heroku.com