Stack Update Policy
Last updated 05 August 2019
This document describes Heroku’s policies for when and how we update existing stacks and our schedule for introducing new stacks.
Updates to existing stacks
Heroku will update the libraries and other dependencies on currently available stacks from time to time. We generally schedule routine updates quarterly, but updates may also be prompted by security issues or other problems reported with the libraries that are on the stack image. For example, the Cedar-10 stack was updated on May 10th 2013 to pull in security fixes for Ubuntu 10.04.
When making updates to stacks, Heroku strives to make the updated stack binary-compatible with the current stack and generally try to make as few changes as possible over the lifetime of a stack. This is to maximize stability and continuity for apps running on Heroku.
Before rolling out an update to a stack image, we extensively test it with internal apps. Then we gradually roll out the update on the platform. Any apps encountering problems can be temporarily moved back to the old stack until issues are resolved.
Updates to existing stacks are not reflected in stack version numbers. In general, if we think a stack update may affect running applications, we’ll publish a changelog entry and notify owners of apps that may be affected.
How often does Heroku introduce new stacks?
Heroku stacks are currently based on Ubuntu Linux from Canonical. We strive to introduce updated stack versions as Ubuntu Long Term Support (LTS) versions are released, i.e. every two years. Heroku stack releases will generally trail the Ubuntu release by some months to ensure that packages have stabilized and to give Heroku time to build and test the new stack.
Old stacks are retired when they are no longer receiving support from Canonical (5 years after Canonical introduces that LTS release). Heroku will notify users with apps on old stacks before they are retired. Notifications are in the form of Changelog entries and direct emails to owners and collaborators on apps running on stacks that are about to be retired.