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
  • Add-ons
  • All Add-ons
  • Gemfury
Gemfury

This add-on is operated by Cloudfury LLC

Private Package Repo for your app's dependencies

Gemfury

Last updated October 07, 2023

Table of Contents

  • Installing the add-on
  • Upload your packages
  • Using with Ruby, Rails, and Sinatra
  • Using with npm and Node.js
  • Using with PHP
  • Using with Python
  • Migrating between plans
  • Removing the add-on
  • Support

Gemfury is an add-on for hosting and installing your private and custom code packages into your Heroku app. Dividing your application into separate packages is a good practice that allows reuse and DRY’ing of your code across teams, projects, and applications. Gemfury supports RubyGems, Python packages, and NPM modules with more in the works.

Installing the add-on

Gemfury can be attached to a Heroku application via the CLI:

$ heroku addons:create gemfury:hello
-----> Adding gemfury to sharp-mountain-4005... done, v18 (free)

Once Gemfury has been added, a GEMFURY_URL setting will be available in the app configuration. It will contain the URL to your private package server, which can be retrieved using the heroku config command.

$ heroku config:get GEMFURY_URL
https://repo.fury.io/SeCrEt-ToKeN/me/

Upload your packages

Once Gemfury is provisioned you will need to upload your package files. One way is to hit the Upload button on your Gemfury dashboard:

$ heroku addons:open gemfury
Opening gemfury for sharp-mountain-4005…

Or by using curl from the command line:

$ curl -F p1=@your-1.x.gem `heroku config:get GEMFURY_URL`
~~> Processing package upload
    your-1.x.gem ... ok

Using with Ruby, Rails, and Sinatra

Having your application pull gems from your private repository is easy. Just prepend your Gem server URL as a source in your application’s Gemfile (in addition to the original rubygems.org source).

 source 'https://repo.fury.io/SeCrEt-ToKeN/me/'
 source "https://rubygems.org"

If you’re seeing problems installing packages from Gemfury, please make sure your Source URL is correct. It’s important to include the trailing slash in the URL.

Using with npm and Node.js

To use Gemfury for private modules in your Node.js application, get your secret Repo-URL from the dashboard or by running:

$ echo `heroku config:get GEMFURY_URL`
https://repo.fury.io/SeCrEt-ToKeN/me/

You have two options to link your private Gemfury registry to your app – one is good for exclusively using your Gemfury account, and the other is a blend with the public index.

Use Gemfury as your only registry

If you’ve decided to stop depending on the public registry and move all your package dependencies to Gemfury, you can do a full registry switch by adding an npm configuration file to the root directory of your Heroku app.

Create the following file {app-dir}/.npmrc

registry=https://repo.fury.io/SeCrEt-ToKeN/me/
ca=

Use a blended private/public registry proxy

The above-mentioned repo.fury.io registry only offers access to packages in your Gemfury account. However, we also offer a blended-index proxy to allow you to install packages from both your account and from the public index.

Just replace the Repo-URL hostname with npm-proxy.fury.io in your {app-dir}/.npmrc

registry=https://npm-proxy.fury.io/SeCrEt-ToKeN/me/
ca=

This will prioritize your private packages and fall-back to the public registry for named packages that are not found in your Gemfury account.

Using with PHP

To use Gemfury with your PHP application, you’ll need to use your secret Repo-URL to access private packages in your repository. You can find this URL on the Gemfury dashboard or by running:

$ echo `heroku config:get GEMFURY_URL`
https://repo.fury.io/SeCrEt-ToKeN/me/

To install private packages from your app, please add the following "repositories" section to your composer.json. You will still be able to use public packages from Packagist along with the ones from your Gemfury account.

 "repositories": [{
    "type": "composer",
    "url":  "https://repo.fury.io/SeCrEt-ToKeN/me/"
 }]

Using with Python

To use Gemfury with your Python application, you’ll need to add your secret Repo-URL as an extra index. You can find this URL on the Gemfury dashboard or by running:

$ echo `heroku config:get GEMFURY_URL`
https://repo.fury.io/SeCrEt-ToKeN/me/

Deploying private packages from Gemfury is as easy as adding one line to the top of your requirements.txt You will still be able to use public packages from PyPI in addition to ones from your Gemfury account.

 --extra-index-url https://repo.fury.io/SeCrEt-ToKeN/me/
 my-package=0.0.1

Migrating between plans

Plan migrations are easy and instant. Use the heroku addons:upgrade command to migrate to a new plan.

$ heroku addons:upgrade gemfury:solo
-----> Upgrading gemfury:solo to sharp-mountain-4005... done, v18 ($9/mo)
       Your plan has been updated to: gemfury:solo

Removing the add-on

Gemfury can be removed via the CLI.

This will destroy all associated data and cannot be undone!

$ heroku addons:destroy gemfury
-----> Removing gemfury from sharp-mountain-4005... done, v20 (free)

Support

All Gemfury support and runtime issues should be submitted via on of the Heroku Support channels. Any non-support related issues or product feedback is welcome at support@gemfury.com or via Twitter @Gemfury.

Keep reading

  • All Add-ons

Feedback

Log in to submit feedback.

Zara 4 GRAX

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