Skip Navigation
Show nav
Dev Center
  • Get Started
  • Documentation
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • Documentation
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
Hide categories

Categories

  • Heroku Architecture
    • Compute (Dynos)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • Stacks (operating system images)
    • Networking & DNS
    • Platform Policies
    • Platform Principles
  • Developer Tools
    • Command Line
    • Heroku VS Code Extension
  • Deployment
    • Deploying with Git
    • Deploying with Docker
    • Deployment Integrations
  • Continuous Delivery & Integration (Heroku Flow)
    • Continuous Integration
  • Language Support
    • Node.js
      • Troubleshooting Node.js Apps
      • Working with Node.js
      • Node.js Behavior in Heroku
    • Ruby
      • Rails Support
      • Working with Bundler
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Background Jobs in Python
      • Python Behavior in Heroku
      • Working with Django
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Working with Maven
      • Working with Spring Boot
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go Dependency Management
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • Databases & Data Management
    • Heroku Postgres
      • Postgres Basics
      • Postgres Getting Started
      • Postgres Performance
      • Postgres Data Transfer & Preservation
      • Postgres Availability
      • Postgres Special Topics
      • Migrating to Heroku Postgres
    • Heroku Key-Value Store
    • Apache Kafka on Heroku
    • Other Data Stores
  • AI
    • Vector Database
    • Working with AI
    • Heroku Inference
      • AI Models
      • Inference Essentials
      • Inference API
      • Quick Start Guides
    • Model Context Protocol
  • Monitoring & Metrics
    • Logging
  • App Performance
  • Add-ons
    • All Add-ons
  • Collaboration
  • Security
    • App Security
    • Identities & Authentication
      • Single Sign-on (SSO)
    • Private Spaces
      • Infrastructure Networking
    • Compliance
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Teams
    • Heroku Connect (Salesforce sync)
      • Heroku Connect Administration
      • Heroku Connect Reference
      • Heroku Connect Troubleshooting
  • Patterns & Best Practices
  • Extending Heroku
    • Platform API
    • App Webhooks
    • Heroku Labs
    • Building Add-ons
      • Add-on Development Tasks
      • Add-on APIs
      • Add-on Guidelines & Requirements
    • Building CLI Plugins
    • Developing Buildpacks
    • Dev Center
  • Accounts & Billing
  • Troubleshooting & Support
  • Integrating with Salesforce
  • Heroku Architecture
  • Compute (Dynos)
  • Dyno Behavior
  • Rolling Deploys

Rolling Deploys

Last updated April 08, 2025

Table of Contents

  • Rolling Deploy Behavior
  • Fir-Generation Apps
  • Additional Reading

This feature is only available for apps in Private Spaces.

When an app first deploys to a Private Space, it can take several minutes for the app to be available due to setup of the underlying dedicated infrastructure.

For subsequent releases, such as code deployments or config var changes, there’s a much shorter delay, with little to no downtime. If there’s only one dyno for the app, there can be brief downtime. With multiple dynos, zero downtime is possible with the rolling deploy feature. Rolling deploys are available for both generations of Private Spaces.

Rolling Deploy Behavior

Rolling deploys are analogous to Preboot on the Common Runtime. Both enable zero downtime during new releases. Preboot’s method is to ensure that new web dynos start and receive traffic before the existing ones terminate. Rolling deploys stop and change up to only 25% of the existing dynos at a time, while the remaining dynos handle requests and tasks. The effect is that all requests get handled with no user downtime, while we gradually push the new release to the entire formation.

To be more precise, if the following are true, there’s zero downtime during a new release for a Private Space app:

  • The app has deployed at least once and is running.
  • The app has at least two dynos and they’re not currently at capacity.

Not being at capacity means the app has enough dynos to service requests with up to 25% of its dynos missing. If the app has only 2 or 3 dynos, then the remaining 1 or 2 dynos must be able to handle the existing load while the release rolls out.

Scaling an existing app in a Private Space doesn’t incur downtime, as long as there is enough capacity to handle the existing load. Changing the dyno size does incur a short downtime, under some circumstances, while we create the new dynos and switch traffic over.

Any databases attached to the app don’t incur schema changes and are compatible with both the old and new app release (forwards- and backward-compatible).

Fir-Generation Apps

When Fir-generation applications restart in response to new releases, the dyno count can temporarily exceed the configured scale. This behavior exists to prevent degraded availability. We create new dynos and confirm they’re ready before those running the older release are terminated, ensuring that there are more available dynos while releases roll out.

Dynos that can’t start as a result of the latest release continue to exist in addition to the dynos running the previous release. In this case, the dyno count exceeds the configured scale until the newest dynos run successfully.

Additional Reading

  • Private Spaces
  • Dyno Tiers
  • Dyno Lifecycle

Keep reading

  • Dyno Behavior

Feedback

Log in to submit feedback.

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices