vs
Compare / BackstopJS
Keep the visual tests. Get a review page.
BackstopJS compares screenshots on the machine that runs it and writes an HTML report there. stateofpixel takes the screenshots in your CI, keeps the baselines and asks for review on the pull request.
Start free with GitHubSee the switch
Facts about BackstopJS checked on 27 September 2026, with 5 sources.
One build, step by step.
300 stories at 3 viewports, run through BackstopJS and through stateofpixel.- 1
Puppeteer or Playwright captures on your machineYour tests take screenshots900 screenshots - 2
Resemble.js compares locallyThe CLI hashes and compares them on the runner900 hashes - 3
An HTML report opens on that machineOnly images we have not seen upload45 changed - 4
backstop approve copies the new images to the referencesThe review page and the GitHub check
Free, you run it900countedEach screenshot in each build
Billed per GB stored0counted45 changed screenshots and their diffs stored
What changes when you switch.
The same pull request, reviewed with less in the way.01A review page on the pull requestBackstopJS writes its report on the machine that ran it, and backstop approve copies the new images over the references. We set a GitHub check and show every change on one page that anyone with write access can approve.
02Baselines out of your repositoryBackstopJS keeps reference images in a folder you store yourself. We pick the baseline from your git history, so two pull requests never conflict over an image.
03MaintainedBackstopJS's last npm release was 6.3.25, in September 2024. stateofpixel is in active development.
What your reviewers get.
Each changed screenshot next to its baseline, with the changed pixels in green.- Four views. Side by side, diff, slider and flip.
- Keyboard first. j and k to move, a to approve, r to reject.
- One check. Green when every change is approved.

stateofpixel and BackstopJS, row by row.
Every row about BackstopJS links to the page it came from.stateofpixel
BackstopJSWhat you pay forStorage. Snapshots, builds and seats are free.
Nothing. It is MIT licensed software you run yourself.1Free plan10 GB stored. Snapshots are not charged.
Not found in their docs.At the plan limitWarns at 80%. After 14 days over, new images are not stored and the check passes with a note.
Not found in their docs.Who takes themYour CI.
Your machine or CI, with Puppeteer or Playwright, optionally in its Docker image.3Where they are comparedYour CI. Only the images upload.
Your machine or CI, with Resemble.js.34First paid plan$15 a month for 25 GB.
Not found in their docs.SeatsNone. Access comes from GitHub roles.
Not found in their docs.BrowsersWhatever your CI runs.
Chrome through Puppeteer, or Chromium, Firefox and WebKit through Playwright.3Test runnersPlaywright, Storybook, or any tool that writes PNG files.
Scenarios in backstop.json: URLs, selectors and interactions, plus custom scripts.3Git hostsGitHub.
No integration. CI gets a JUnit report.3Build historyDefault branch builds kept. Pull request builds 60 days after close, 7 to 365 days.
Reference images stay in a folder you keep, in or out of source control.3Open sourceYes, MIT licensed.
Yes, MIT licensed.5
Where BackstopJS is ahead.
We skip some features on purpose. If you need one of these, choose BackstopJS.Switch in one pull request.
Keep your tests. Change the step that sends screenshots to BackstopJS. The moving guide has the details.- 1Install the GitHub AppPick the repositories. On GitHub Actions there is no token to copy.
- 2Move scenarios to PlaywrightEach scenario becomes a test that visits the URL and calls snapshot(). The reporter uploads when the run ends.
- 3Delete the reference imagesRemove backstop_data/bitmaps_reference. The first build on your default branch becomes the baseline.
Before
steps:
- run: npm ci
- run: npx backstop test --dockerAfter
permissions:
contents: read
id-token: write
steps:
- run: npm ci
- run: npx playwright install --with-deps chromium
- run: npx playwright testimport { defineConfig } from "@playwright/test";
export default defineConfig({
reporter: [["list"], ["stateofpixel/playwright"]],
});Questions.
What to know before you move from BackstopJS.Is BackstopJS still maintained?
Its last npm release, 6.3.25, came out on 7 September 2024. The repository had 517 open issues on 5 October 2026.
Can I keep backstop.json?
No. stateofpixel does not run scenarios. Take the screenshots with Playwright, or any tool that writes PNG files, and upload the folder.
Do I need to commit reference images?
No. stateofpixel stores the images and picks each baseline from your git history.
Sources
Read on 27 September 2026. Prices are list prices before tax. The stateofpixel column comes from our docs.
Every pixel, reviewed.
Nothing ships by surprise.
Start free with GitHubRead the quickstart