Visual regression testing tools: Percy, Applitools, BackstopJS and Diffy compared
Visual regression testing tools take screenshots of your pages and compare them with an approved version, so a layout that broke shows up before your visitors see it. The four best-known ones solve different problems. Percy and Applitools plug into your test suite and CI, and check every pull request in cloud browsers; Applitools adds AI matching that ignores rendering noise, at a higher price. BackstopJS is free and open source, and runs wherever you run it. Diffy works from URLs with no code, compares production with staging, and has a WordPress plugin for updates. If you ship code through pull requests, start with Percy, or Applitools on a larger budget. If you want free and self-hosted, use BackstopJS. If you look after sites without a test suite, look at Diffy. Relvato is not a testing tool for your pipeline: it is a monitoring platform that watches the live site, with visual regression as one of its monitors next to uptime, checkout and SEO. Every fact about these products comes from their own pages and docs as of November 2026, and this page has no affiliate links.
Visual regression testing tools: the short answer
All four do the same basic thing: capture a page, compare it with a baseline someone approved, and show what changed. They differ in where the screenshot is made, what starts a comparison, and who is meant to use them.
Percy and Applitools are built for development teams. A line in your end-to-end tests sends the page to their cloud, where it's rendered in several browsers and widths, and a reviewer approves or rejects the changes before the pull request merges. BackstopJS does the same loop on your own machine or CI server, for free, configured in a JSON file. Diffy starts from a list of URLs instead of code, and is aimed at agencies, QA and project managers as well as developers.
Three of them can also watch production. Percy's Website Scanner and Applitools Autonomous scan a site from its sitemap on a schedule, and Diffy screenshots production on the days and times you choose. So "scheduled screenshots of the live site" is not what sets any one of them apart. What differs is the rest: how comparisons tolerate noise, what you pay per screenshot, and what else runs alongside.
How Percy works
Percy, part of BrowserStack, is driven by an SDK in your tests. At each snapshot it captures the page's DOM and sends it to Percy, which renders it in parallel across browsers and widths. New projects use Chrome, Firefox, Edge and Safari by default. By default Percy renders snapshots with JavaScript disabled, because the DOM it received already holds the page's state.
Each run of your tests creates a build. Percy compares every screenshot with the approved baseline, and reviewers approve single snapshots, groups or the whole build, or request changes before merging. Approved snapshots carry forward for the life of the branch. Percy lists more than 50 integrations with test frameworks and CI services.
Its no-code Website Scanner is a separate product: it reads your XML sitemap and runs hourly, daily or weekly scans of production or staging, with alerts, and needs no code or installation.
How Applitools works
Applitools Eyes also runs from your tests, with SDKs for more than 50 frameworks including Playwright, Cypress, Selenium, Storybook and Appium. Its Ultrafast Grid takes the page's DOM, CSS and resources and renders checkpoints on the browsers and devices you pick: desktop browsers, emulated Android devices and iOS simulators running Safari.
What sets it apart is how it compares. Instead of counting pixels, Eyes uses what it calls Visual AI, with match levels you choose per page or region. Strict flags what a person would notice and ignores rendering differences. Layout checks only that elements keep their positions, which suits dynamic or translated content. Dynamic accepts a changed date, number or email as long as it keeps its format. Exact is pixel for pixel, and Applitools itself doesn't recommend it for ordinary checks. One click can accept the same change across every viewport.
Applitools Autonomous is its no-code product: it crawls your sitemap to build a starting suite, can run on a schedule to catch changes from third-party or user-generated content, and flags HTTP errors, timeouts and pages that appeared or disappeared.
How BackstopJS works
BackstopJS is an open-source project under the MIT licence. You install it with npm, describe your pages in backstop.json (each scenario has a label and a URL, plus at least one viewport), and run it on your own machine or CI server. It drives headless Chrome through Puppeteer by default, or Chromium, Firefox or WebKit through Playwright.
"backstop test" takes new screenshots and compares them with your reference images; "backstop approve" turns the latest results into the new references. misMatchThreshold sets the percentage of pixels allowed to differ, 0.1 by default. To avoid differences between operating systems, it can render inside its own Docker container, and it can write JUnit reports for CI.
There's no hosted dashboard, account or scheduler. To watch production, you point scenarios at live URLs and run them from your own cron job or CI schedule. The latest release on npm is 6.3.25, from September 2024, and the repository was still being committed to in September 2026.
How Diffy works
Diffy works from URLs, with nothing to install on the site. It loads your pages in a real browser on its own servers, at breakpoints from 240 to 2000 pixels wide, and can set cookies and headers or log in, with presets for Drupal, WordPress and Netlify.
Its core comparison is environment against environment: production against staging or dev, with the domain swapped in every URL for you. It can also compare a page with its previous scan, or with a Figma frame. A schedule screenshots production on the days and at the times you choose, with notifications by email, Slack and webhook. Pro adds CI automation, with documented GitHub Actions and CircleCI setups.
For WordPress, Diffy has a free plugin on WordPress.org that puts an "update now with Diffy visual testing" link next to each available update: it screenshots the site, runs the update, screenshots again and compares. It needs a Diffy account, which the plugin can create.
What visual regression tools catch, and what they miss
They catch what changes on screen: a header that overlaps the content, a grid that collapsed, a button pushed off the page, a font that failed to load, a section that vanished. Run in CI, Percy, Applitools and BackstopJS catch it before the code merges, which is the cheapest moment to fix it.
They miss what looks the same. A checkout that renders perfectly but no longer takes payment, a form that sends nothing, a page that dropped out of the search index, or a site that went down at 3 a.m. all pass a screenshot comparison, or are never looked at. A pull request review also only sees what's in the pull request. A plugin auto-update, a change on the hosting side, a new cookie banner or a third-party script that changed on its own reaches production without passing through your CI.
Noise is the other limit. Carousels, ads, dates and lazy-loaded images change between captures. Each product handles it its own way: Applitools with match levels, BackstopJS and Percy with thresholds and ignored regions, Diffy and Relvato with masks. Expect to spend some time tuning, whichever you choose.
Pricing as of November 2026
The products count different things, so compare carefully. Percy counts a screenshot as one page in one browser at one width: two pages in two browsers at three widths is twelve. Applitools counts checkpoints, for a page or a component. Diffy counts screenshots without saying how breakpoints multiply them. Relvato counts runs, and one run covers every page, viewport and browser you set up for that monitor.
Percy: free for 5,000 screenshots a month, with unlimited users and projects and one month of build history. The Desktop plan costs $199 a month billed yearly or $249 billed monthly for 10,000 screenshots, and $0.036 for each extra screenshot. Real mobile devices start at $599 a month billed yearly. The Website Scanner's price isn't published on these pages.
Applitools: no free plan, only a free trial, which its terms limit to 100 checkpoints a month per user. Starter costs $667 a month, paid yearly, for "100,000 component checkpoints or 1,000 page checkpoints" with unlimited users; the pricing page doesn't say over what period. Professional and Enterprise are quoted on request.
BackstopJS: free. You pay only for the machine or CI minutes it runs on.
Diffy: free for 500 screenshots a month, two environments and one month of data. Pro costs $67 a month billed yearly or $80 monthly for 2,000 screenshots, up to $250 or $300 for 30,000, with six months of data.
Relvato: the visual regression monitor is on every plan. Free covers one site and 100 runs a month; Pro is $29 a month ($24 billed yearly) for one site; Business $79 for five sites; Agency $199 for 25. Each plan includes every other monitor too, so the price isn't for visual regression alone.
When to pick which
Pick Percy if your team ships through pull requests, wants cross-browser rendering without running browsers itself, and a generous free tier to start. Pick Applitools if false positives from dynamic content are costing you time, you test components and many devices, and the budget allows it; its match levels are the most flexible way of tolerating noise here. Pick BackstopJS if you want free, open-source and self-hosted, with no screenshots leaving your servers, and don't mind maintaining config and baselines yourself. Pick Diffy if you look after sites without a test suite, want to compare production with staging, or want screenshots compared around WordPress updates from inside wp-admin.
Don't pick Relvato for testing before merge. It doesn't take snapshots inside your test suite, test Storybook components, or check a pull request's preview build: it checks the live site. If what you need is a gate in CI, choose one of the four.
How they work together
A CI tool and a production monitor answer different questions. Percy, Applitools or BackstopJS tell you that this change is safe to merge. A monitor tells you that the live site still looks and works right, whatever changed it: a deploy, a plugin update, a hosting change or a third-party script.
A common setup is a visual tool in CI for pull requests, and monitors on production for everything that never passes through CI. If you already use Diffy's or Percy's scheduled production scans, Relvato adds what they don't cover: uptime, checkout, login, forms, SEO and security monitors on the same site, re-run after each update or deploy.
How Relvato does it
Relvato's visual regression monitor screenshots the pages you choose in a real browser, on desktop (1280 pixels wide) and mobile (390 pixels), in Chromium, Firefox or WebKit, Safari's engine. Before each full-page capture it stops animations, waits for fonts and lazy-loaded images, hides cookie and chat widgets, and paints over the regions you've masked. It then compares the capture pixel by pixel with the baseline you approved, at a sensitivity you set. One monitor covers up to 40 combinations of page, viewport and browser.
To keep noise down, a capture that fails is taken again after the page has had time to settle, and the closer of the two is kept. A change that still fails goes to an AI review of the area around it: a confident "no visible change" or "content only" verdict is shown for review instead of alerting, while large changes and on-page errors always fail. When a change is intended, you approve the new baseline in one click (managing baselines). Next to it, the structure drift monitor compares how the page is built, which catches a missing section that a screenshot can hide; our guide explains the difference.
It needs no plugin or snippet: it works from outside, on any site. On the Free plan you press Run, or it runs on its weekly schedule once you've proved you own the site. Pro adds daily runs, and re-runs after every WordPress update (through the free Relvato plugin) and after every deploy, for example from GitHub. Business runs hourly. The same run sits beside your uptime, checkout and SEO monitors, so a broken page and a broken payment show up in the same place.
Percy, Applitools, BackstopJS, Diffy and Relvato side by side (as of November 2026, product facts from each vendor's own pages)
| Percy | Applitools | BackstopJS | Diffy | Relvato | |
|---|---|---|---|---|---|
| What it is | Visual testing service (BrowserStack) | Visual AI testing platform | Open-source visual testing tool (MIT) | Visual regression service, URL-based | Monitoring platform for live websites |
| How you set it up | SDK calls in your tests, CI | SDK calls in your tests, CI; no-code Autonomous | backstop.json config, run from the command line or CI | List of URLs, no code; CI on Pro | Pages added by address in the app, no code |
| Where screenshots are made | Percy's cloud, from a DOM snapshot | Applitools' cloud (Ultrafast Grid), from the DOM | Your machine or CI (optionally Docker) | Diffy's servers | Relvato's servers |
| Browsers | Chrome, Firefox, Edge, Safari | Desktop browsers, emulated Android, iOS simulators | Chrome (Puppeteer) or Chromium, Firefox, WebKit (Playwright) | Real browser, engine not stated | Chromium, Firefox, WebKit |
| How it compares | Screenshot diff against approved baseline | Visual AI with match levels (Strict, Layout, Dynamic, Exact…) | Pixel diff with mismatch threshold | Against previous scan, another environment or Figma | Pixel diff with masks and sensitivity; AI review of failing areas |
| Runs before merge | Yes | Yes | Yes | Yes (Pro) | No |
| Scheduled runs on production | Website Scanner: hourly, daily or weekly | Autonomous: on a schedule | Your own cron or CI | Days and times you choose | Weekly (Free), daily (Pro), hourly (Business) |
| After a WordPress update | Not described | Not described | Not described | Plugin: before/after screenshots on updates | Monitors re-run (Pro and up, with the plugin) |
| Free tier | 5,000 screenshots a month | Trial only (100 checkpoints a month) | Free, open source | 500 screenshots a month | 1 site, 100 runs a month |
| Cheapest paid plan | $199/month yearly ($249 monthly), 10,000 screenshots | $667/month, paid yearly | None | $67/month yearly ($80 monthly), 2,000 screenshots | Pro $29/month, 1 site, all monitors |
| Also monitors uptime, checkout, SEO | No | No | No | No | Yes |
Questions, answered
What is the best visual regression testing tool?
It depends on how you work. Percy suits teams that test every pull request and want cloud rendering with a free tier. Applitools suits teams fighting false positives on dynamic content, with a larger budget. BackstopJS suits developers who want free, self-hosted software. Diffy suits agencies and site owners who want a no-code tool that compares production with staging.
Is there a free visual regression testing tool?
Yes. BackstopJS is free and open source under the MIT licence. Percy has a free plan with 5,000 screenshots a month and Diffy one with 500, as of November 2026. Applitools offers a free trial rather than a free plan. Relvato's Free plan includes its visual regression monitor for one site.
What is the difference between Percy and Applitools?
Both run from your tests and render pages in the cloud across browsers. Percy compares screenshots against an approved baseline and has a larger free tier. Applitools compares with Visual AI and match levels such as Layout and Dynamic, which ignore changes a person wouldn't count as a bug, and its Starter plan costs 667 dollars a month paid yearly.
Can visual regression testing catch a broken checkout?
Only if the checkout looks different. A checkout that renders correctly but no longer accepts payment passes a screenshot comparison. Catching it needs a monitor that runs the checkout the way a customer does, which is a different kind of monitoring.
Do I need a visual regression tool in CI if I monitor production?
They complement each other. A CI tool stops a broken layout before it merges. A production monitor catches changes that never pass through CI, such as plugin updates, hosting changes and third-party scripts, and confirms the live site after each deploy.
Sources
- Percy — Plans and billing (November 2026)
- BrowserStack — Percy pricing (November 2026)
- Percy — Visual testing basics
- Percy — SDK workflow
- Percy — Cross-browser settings
- Percy — Visual Scanner overview
- Percy — Website Scanner
- Applitools — Pricing (November 2026)
- Applitools — Eyes
- Applitools Docs — Ultrafast Grid
- Applitools Docs — Match levels and regions
- Applitools — Autonomous
- Applitools — Terms of service (free trial)
- BackstopJS — README (GitHub)
- BackstopJS — npm package
- Diffy — Pricing (November 2026)
- Diffy — Visual regression testing for WordPress
- Diffy Visual Regression Testing — WordPress.org plugin