Deep-dive on the Next Gen Platform. Join the Webinar!

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
      • Node.js Behavior in Heroku
      • Working with Node.js
      • Troubleshooting Node.js Apps
    • 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
      • Working with PHP
      • PHP Behavior in Heroku
    • 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
    • Working with AI
    • Heroku Inference
      • AI Models
      • Inference Essentials
      • Inference API
      • Quick Start Guides
  • 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
  • Extending Heroku
  • Building Add-ons
  • Add-on Development Tasks
  • Making Your Add-on Shareable

Making Your Add-on Shareable

English — 日本語に切り替える

Last updated February 18, 2025

Table of Contents

  • Your staging add-on
  • Supporting multi-app attachment
  • Supporting multiple installs per app
  • What to test

In this guide, we will take you step by step through the process of making your existing Heroku Add-on “Shareable.”

Your staging add-on

If you have a staging environment and corresponding Heroku Add-on that differ from your publicly-available Heroku add-on, we highly recommend testing these changes extensively there before promoting these changes to your main offering.

Supporting multi-app attachment

To make an add-on shareable between apps, add the attachable flag to the requires array in your manifest. No further changes should be necessary for this feature.

Supporting multiple installs per app

To allow an add-on service to be installable to the same application multiple times:

  1. Add the many_per_app flag to the requires array in your manifest.
  2. Be sure to remove any uniqueness constraint on the heroku_id field in provision requests.
  3. Use the new provision-time uuid field for Heroku-side uniqueness, if desired
    • This field will only be present for add-ons flagged into the new runtime or for provisions from users or applications that are flagged in.
  4. Return your own provision response id that is unique per installation, not app (i.e. not a derivative of heroku_id like app123@heroku.com)
  5. Optionally back-fill the uuid field from the [Add-on Partner API][add-on-partner-api-reference] as needed. The field may be null for some installations, until migration and roll-out is complete.

When the many_per_app flag is enabled, users will be able to override the “attachment name” which is used as the prefix to env vars.

For an add-on named foo-bar which sets FOO_BAR_A and FOO_BAR_B, we will treat this as setting A and B instead by stripping out a normalized variant of the add-on service slug from the beginning of the string. (In a future integration version, the service-prefix won’t be necessary but is necessary today for backwards compatibility)

  • A and B are prefixed by the attachment name from the perspective of the application. For an attachment named BALLOON, this will result in BALLOON_A and BALLOON_B vars being exposed.
  • Attachment names are chosen with the following heuristic
    1. Customer-provided name (e.g. WORKER; if conflict, error)
    2. Partner-recommended name (e.g. REDIS; if conflict, next)
    3. Normalized add-on service slug (e.g. REDISGREEN; if conflict, next)
    4. Normalized add-on service slug + random color (e.g. REDISGREEN_CYAN; if conflict, pick new random color; if color pool exhausted, error)
  • Custom names may be allowed even without many_per_app enabled in the future.
  • To provide a recommended attachment name return a root-level key named recommended_prefix in the provision response. Based on partner feedback, this recommendation may move to the manifest

What to test

Exercise every aspect of your add-on to be sure the above changes did not have a negative impact on functionality; also test the following behaviors specific to Heroku integration, where they apply to your add-on:

  • Provisioning for the same app multiple times (if you chose to support many-per-app)
  • Multiple attachments of one installation to the same app
  • SSO in the context of multiple installations on a single app, and with attachments to multiple apps
  • Custom attachment naming
  • Updating configuration variables and checking that they propagate to all attached applications
  • Plan upgrades and downgrades

Keep reading

  • Add-on Development Tasks

Feedback

Log in to submit feedback.

Writing to Application Logs as an Add-on Partner Managing Company Users as an Add-on Partner

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