Free up to 35,000 snapshots a month

Catch UI drift before it ships, without the visual-testing bill.

Peekdrift screenshots every Storybook story in a pinned Linux browser, compares only what changed, and gives your team one place to approve it. GitHub checks update the moment someone decides.

35k snapshots
Free
CI waiting
None
Repeat runs
Identical

Checkout / Summary · light · desktop

Changed
Reject Accept

Baseline

New

How it works

One command in CI. Peekdrift renders your Storybook in a pinned browser, compares it with what you approved, and reports on the pull request.

  1. 01

    Upload your Storybook

    npx peekdrift builds Storybook and uploads it. Only files that changed since last time are sent, and the job exits right away.

  2. 02

    We take the screenshots

    Every story, theme and viewport renders in a pinned Linux browser, in a disposable sandbox per build. Animations, clocks, randomness and fonts are frozen, so the same code gives byte-identical screenshots.

  3. 03

    Review, then merge

    Accept or reject each change in the browser. The peekdrift check turns green and the pull request comment updates in place, without re-running CI.

.github/workflows/visual.yml GitHub Actions
jobs:
  visual:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v7
        with:
          fetch-depth: 0 # baselines follow your git history
      - uses: actions/setup-node@v7
      - run: npm ci
      - uses: peekdrift/action@v1
        with:
          projectToken: ${{ secrets.PEEKDRIFT_PROJECT_TOKEN }}
          exitOnceUploaded: true

Prefer your Storybook never to leave your infrastructure? Take the screenshots in your own CI with peekdrift capture and upload only the images; both ways give identical results.

Built for fast, confident reviews

Everything a reviewer needs to decide in seconds, and everything a team needs to trust the result.

Zoom to the change

A 30-pixel change on a 1440-pixel page fills the panel instead of hiding in it.

Diff, strobe and swipe

Shadow everything that didn't change, flip between versions, or drag a divider across them.

Keyboard first

J/K to move, A to accept, R to reject. The next pending change opens on its own.

Baselines that follow git

Each build compares against the closest approved ancestor commit, so branches never fight over one baseline.

GitHub checks and comments

One status and one pull request comment per project, updated in place as reviews happen.

Only the stories that changed

With --only-changed, Peekdrift follows your Storybook's imports from the changed files to the stories they affect. The rest keep their approved images and don't count toward your snapshots.

Chromium, Firefox and WebKit

Catch the bug that only shows in Safari's engine. Each browser is its own snapshot with its own baseline.

Accessibility checks

Every story is checked with axe-core while it's on screen, and new violations are flagged next to the visual changes.

Private by default

Images live in private, encrypted storage under a separate path for each organization, are never shared between organizations, and are served through links that expire within the hour.

Simple pricing, by snapshot

Every plan includes every feature and unlimited projects. A snapshot is one story in one theme at one viewport, counted when it's uploaded; limits reset on the 1st of each month.

Free

$0

35,000 snapshots / month

  • All review modes
  • GitHub checks and pull request comments
  • Unlimited projects
Start free →
Most teams

Team

$29/mo

100,000 snapshots / month

  • Everything in Free
  • Email support
  • Cancel any time
Get started

Business

$99/mo

500,000 snapshots / month

  • Everything in Team
  • Priority email support
  • Cancel any time
Get started →

Prices in US dollars, billed monthly through Stripe. Upgrade, downgrade or cancel from your organization's billing page.

Questions

How can it cost so little?+

Peekdrift renders stories in short-lived spot capacity, stores every file and image once by its content hash, and only runs pixel comparisons on images whose hash changed. A typical build costs us a fraction of a cent, and we pass that on.

Why are screenshots so stable?+

Every capture runs in the same pinned Linux browser image, with animations frozen, the clock fixed, randomness seeded and fonts loaded before the shot. We test that repeated runs, and runs on our servers versus in your CI, produce byte-identical images. Screenshots from macOS or Windows are never used as baselines.

Do I have to wait for results in CI?+

No. The upload step returns as soon as the images are sent. Make the peekdrift status a required check to gate merges. If you'd rather block in CI, --wait does that.

Can I switch from Chromatic?+

Today you replace the Chromatic step in your workflow with the two Peekdrift commands above. A mode that accepts your existing Chromatic CLI options unchanged is on the way.

What happens if we go over our limit?+

New uploads are refused with a clear message until the 1st of next month or until you upgrade. Nothing is billed automatically: there are no overage charges.

Where is my data stored?+

In private, encrypted AWS storage in the US (Oregon). Images are only reachable through links that expire within the hour, and each organization's images are kept under their own path and never shared with another organization.

See your next UI change before your users do.

Set up a project in a couple of minutes. Free up to 35,000 snapshots a month.

Start free