Skip to content

Every pull request, live. Review the change, not the diff.

Ferrule builds each branch into a private URL with your own build command and staging data. Reviewers click through the change before they approve it.

  • GitHub, GitLab or Bitbucket
  • Node 18 or later
  • Free for public repositories
  • A URL per pull requestRebuilt on every push
  • Your build, unchangedStatic sites or Node servers
  • Sleeps when idleWakes on the next visit
  • Cloud or self-hostedSame product, one image

From push to preview before you finish the description.

Connect a repository once. After that, every branch you push gets its own build and its own link.

  • Connect a repository

    Install the app on GitHub, GitLab or Bitbucket and choose which repositories Ferrule may build.

  • Push a branch

    Ferrule runs your build command with staging variables and posts the link as a status check.

  • Review the real thing

    Reviewers open the link, comment on the page itself, and approve with the change in front of them.

Built for the review loop

Each part of a preview exists to save one round trip between the author and the reviewer.

  • Comments pinned to the page

    Reviewers click the element they mean and type. The thread shows up on the pull request with a screenshot of that spot.

  • Logs that open at the error

    A failed build opens on the failing line with the file and line number, not at the top of three thousand lines of install output.

  • A password per preview

    Share one link with a client or a tester outside your organization, and let it expire on its own.

  • A performance budget

    Each preview reports page weight against the limits you set, so a heavy change is caught in review.

  • Branch environments

    Variables inherit from staging. Any branch can switch on a flag or point at its own API without touching the rest.

Set it up your way

Run the CLI from your laptop, add one step to your CI workflow, or start the image on your own servers.

CLI

terminal
$ npm install --save-dev ferrule
$ npx ferrule login
$ npx ferrule init      # writes ferrule.json with your build command
$ npx ferrule preview   # builds this branch and prints its URL

CI workflow

.github/workflows/preview.yml
on: pull_request
jobs:
  preview:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npx ferrule preview --comment
        env:
          FERRULE_TOKEN: ${{ secrets.FERRULE_TOKEN }}

Docker

terminal
$ docker run -d --name ferrule \
    -p 8080:8080 \
    -v ferrule-data:/data \
    -e FERRULE_LICENSE="your-key" \
    ferrule/server:2

Keep it on your network in one image.

The self-hosted edition runs builds, stores logs and serves previews from your own servers. Nothing about your code leaves them.

  • Single sign-on

    SAML and OpenID Connect, with previews limited to the groups you choose.

  • Your storage

    Build artifacts and logs go to any S3-compatible bucket you point it at.

  • Updates on your schedule

    Pin a version, read the changelog, then pull the next image when you're ready.

  • Works offline

    License checks run against a signed file, so air-gapped networks are fine.

Pay per reviewer, not per preview.

Every plan builds unlimited previews. You pay for the people who sign in to review them.

  • Hobby

    For side projects and open source.

    $0for one person, always

    Start free
    • One project
    • Public and private repositories
    • One build at a time
    • Comments on previews
  • Self-hosted

    For teams that keep code on their own network.

    $39per reviewer, per month

    Talk to us
    • Everything in Team
    • Builds limited by your hardware
    • Single sign-on
    • Air-gapped license file

Prices in US dollars. Yearly billing takes two months off.

What each plan includes
FeatureHobbyTeamSelf-hosted
Projects1UnlimitedUnlimited
Builds at a time14Your hardware
Build minutes per month3006,000No limit
Password previewsNot includedIncludedIncluded
Single sign-onNot includedNot includedIncluded
Log retention7 days90 daysYou decide

Questions, answered

What teams usually ask before they connect a repository.

Something else? Write to the team.

Does Ferrule work with a monorepo?

Yes. Give each app its folder and build command in ferrule.json, and each one gets its own preview URL on the same pull request.

Who can open a preview?

Members of your organization, by default. On Team and Self-hosted you can add a password to share one preview with someone outside it.

Where do builds run?

On Ferrule's build machines for Hobby and Team. With Self-hosted, they run on your servers and nothing leaves your network.

What happens to old previews?

A preview sleeps after 7 days without a visit and wakes on the next request. When a pull request closes, its previews are deleted 30 days later.

Can a preview use real customer data?

It can, but we recommend staging data. Branch environments let you seed each preview with sample records instead.

Do I need a card for the Team trial?

No. The trial runs for 14 days, then your workspace moves to Hobby unless you add a card.

Talk to us about self-hosting

Tell us how you deploy today. A person on the team replies within two working days.

  • A walkthrough on your own repository
  • A trial license for your servers
  • Answers from the people who build it

Your framework, host and how often you ship is plenty.

Give your next pull request a link reviewers can click.

Connect a repository in a couple of minutes. The Hobby plan never expires.

Part of the Design Systems Library