Fork of heroku/heroku-buildpack-google-chrome that runs with Xvfb
Switch branches/tags
Nothing to show
Clone or download
jabrown85 Merge pull request #14 from heroku/update-publish-instructions
Update for release instructions to buildpack registry
Latest commit f101ed2 Sep 17, 2018
Failed to load latest commit information.
bin Add libnss3 Nov 10, 2017
CHANGELOG.txt Update Nov 10, 2017 Update Sep 14, 2018


This buildpack downloads and installs Xvfb and Google Chrome from your choice of release channels.

Note that Google Chrome now has a --headless flag, so for many applications, Xvfb may not be required. If so, consider this buildpack instead.

Only supported on Cedar-14

Note that this buildpack only works on Cedar-14 stack. For the Heroku-16 stack only the Headless Chrome buildpack is supported. For more details see Known Issues for Heroku CI.


You can choose your Chrome release channel by specifying GOOGLE_CHROME_CHANNEL as a config var for your app, in your app.json (for Heroku CI and Review Apps), or in your pipeline settings (for Heroku CI).

Valid values are stable, beta, and unstable. If unspecified, the stable channel will be used.

Shims and Command Line Flags

This buildpack installs shims that always add --disable-gpu and --no-sandbox to any google-chrome command as you'll have trouble running Chrome on a Heroku dyno otherwise.

You'll have two of these shims on your path: google-chrome and google-chrome-$GOOGLE_CHROME_CHANNEL. They both point to the binary of the selected channel.


To use Selenium with this buildpack, you'll also need Chrome's webdriver. This buildpack does not install chromedriver, but there is a chromedriver buildpack also available.

Additionally, chromedriver expects Chrome to be installed at /usr/bin/google-chrome, but that's a read-only filesystem in a Heroku slug. You'll need to tell Selenium/chromedriver that the chrome binary is at /app/.apt/usr/bin/google-chrome instead.

To make that easier, this buildpack makes $GOOGLE_CHROME_BIN, and $GOOGLE_CHROME_SHIM available as environment variables. With them, you can use the standard location locally and the custom location on Heroku. An example configuration for Ruby's Capybara:

chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)

chrome_opts = chrome_bin ? { "chromeOptions" => { "binary" => chrome_bin } } : {}

Capybara.register_driver :chrome do |app|
     browser: :chrome,

Releasing a new version

Make sure you publish this buildpack in the buildpack registry

heroku buildpacks:publish heroku/xvfb-google-chrome master