Stacks

Last Updated: 17 June 2015

architecture stack

Table of Contents

A stack is a complete deployment environment including the base operating system, the language runtime and associated libraries. As a result, different stacks support different runtime environments.

When you deploy an app, that app may contain its own runtime environment - so the list below is what’s available on the base stack only, not an indicator of what runtimes are ultimately available to your application.

Stack summary

  Base Technology Ruby Node.js Clojure Java Python Scala PHP
Celadon Cedar-14 Ubuntu 14.04
Celadon Cedar (deprecated) Ubuntu 10.04

You can provision new apps on both flavors of the Cedar stack. The stack for existing apps can be determined using the stack CLI command.

$ heroku stack
  cedar-10
* cedar-14

Here, the app is running on Celadon Cedar-14.

Changing stacks

You can change the stack for an existing application with the stack:set command. For example:

$ heroku stack:set cedar-14
Stack set, next release on example-app will use cedar-14.
Run `git push heroku master` to create a new release on cedar-14.

Migrating to a new stack

You will likely need to make changes to your application code as you move an app to a different stack. The stack:set command will tell Heroku what stack to use, but it is your responsibility, as the application developer, to make any required changes to your code.

When migrating a production app to a new stack, you should perform the migration work on a staging version of the app in a separate code branch. Once you have tested that the app runs correctly on the new stack, you can merge in your changes on the production environment, change the stack with stack:set and deploy.

Read migrating from Cedar to Cedar-14 to learn more.