On-demand preview environments for your pull requests, branches, and tags

Spinning up or updating new servers to review a pull request or branch takes time and costs money.

PullPreview provides on-demand preview environments for any pull request, branch or tag from your GitHub repositories.

Screenshot 2


On demand preview environments

From your project, just click on any pull request, branch, or tag to start a live environment based on your docker-compose.pullpreview.yml file. You'll get a custom URL that you can share with anyone wanting to have a look at the app or a new feature.

Screenshot 3

Integrated with GitHub pull requests

Any time a preview session is started for a pull request, you will get an additional status badge (via the GitHub status API) showing the status of the preview environment. Clicking on the details link will show you the preview session details and the link to access the environment.

Screenshot 8

Auto-deploy pull requests and branches

Manually starting sessions from any reference is nice, but what's better is to automatically deploy new commits as they come for a pull request or branch. Enabling auto-deploy will make sure your preview environment is always up to date with the latest changes.

By default, and to save on credits, auto-deployed environments will be shut down after 72h, unless a new commit is pushed. You can also manually wake up an auto-deploy environment that went asleep from the UI.

When a branch or pull request is deleted, any auto-deploy environment associated with it will be automatically shut down, ending the credits consumption.

Screenshot 6

Expose any port

Contrary to a lot of other platforms, you are not limited to only 1 publicly-exposed port. Any process declared in your docker-compose file can expose any number of ports (as long as they don't conflict). You will get a dedicated IP for each deployment.

Screenshot 7 Screenshot 5

Simple credit system

Each plan comes with a dedicated number of credits. A one-hour preview session costs 1 credit (each hour started is due). On the free plan you will get 50 credits/month. The first paid plan starts at 50 EUR monthly, for 750 credits/month (equivalent to 1 session running without interruption for 1 month).

With auto-deploy, jobs automatically go asleep or end when the branch or pull request is closed, therefore you will be able to run a lot of auto-deploy sessions on that plan. A common use case is to enable auto-deploy for your main branch (e.g. master), and for any pull request that requires thorough end-to-end testing and/or approval by a product manager.

Try it for FREE

(Free plan includes 50 credits = 50 hours of live preview environments, every month)

How it works

  1. Create a docker-compose.pullpreview.yml file and declare your process formation
  2. Push to a branch, open a pull request
  3. Go to your project's dashboard on PullPreview to start a session and/or enable auto-deploy
  4. A link to the preview session will be added as a comment to the pull request (you can also go through your PullPreview dashboard)

PullPreview will automatically build your docker images for the specific commit of the pull request or branch, and will deploy each process according to your docker-compose configuration. You get 1GB of RAM to share across all the processes of a Preview Session.


Assuming your application has already been dockerized (i.e. it has a Dockerfile in its repository), you just need to add a docker-compose.yml file describing the various services that needs to run in each preview environments. By default it will also use a docker-compose.pullpreview.yml file if present, in case you don't want any conflicts with an existing docker-compose file.

For instance, a large Rails and Angular application such as OpenProject can take advantage of PullPreview just by adding the following file:

# docker-compose.pullpreview.yml
  image: postgres:9.4.5
    POSTGRES_DB: app
    - ./export/db:/var/lib/postgresql/data
  memory: 64
    - '5432'

worker: &ruby
  build: .
    - .:/usr/src/app
    - db
    - "RAILS_CACHE_STORE=file_store"
    - "DATABASE_URL=postgresql://app:p4ssw0rd@db:5432/app?encoding=utf8&pool=5&timeout=5000&reconnect=true"
    - "SECRET_KEY_BASE=d4e74f017910ac56c6ebad01165b7e1b37f4c9c02e9716836f8670cdc8d65a231e64e4f6416b19c8"
    - "RAILS_ENV=production"
    - "HEROKU=true"
  command: "bundle exec rake db:migrate db:seed jobs:work"
  memory: 384

  <<: *ruby
    - "80:8080"
  command: "./docker/web"
  memory: 1024

You can find another example of a Rails app with postgres + redis at pullpreview/pullpreview-example-rails-app.

Get started

(and get 50 hours of on-demand preview environments on us, every month)