ConfigsJul 13, 2026·3 min read

BackstopJS — Visual Regression Testing for Web UIs

BackstopJS is a visual regression testing tool that compares screenshots of web pages across code changes, catching unintended CSS and layout regressions automatically.

Agent ready

Ready-to-run agent install

This asset can be installed after the agent chooses its runtime, checks the plan, and runs the matching command.

Native · 98/100Policy: allow
Agent surface
Any MCP/CLI agent
Kind
Skill
Install
Single
Trust
Trust: Established
Entrypoint
BackstopJS Overview
Direct install command
npx -y tokrepo@latest install 55e855f0-7eb9-11f1-9bc6-00163e2b0d79 --target codex

Run after dry-run confirms the install plan.

Introduction

BackstopJS automates visual regression testing by capturing screenshots of web pages and comparing them pixel-by-pixel against reference images. When CSS, layout, or content changes cause visual differences, BackstopJS highlights them in a browser-based report. It uses Puppeteer or Playwright as the rendering engine.

What BackstopJS Does

  • Captures screenshots of web pages at configurable viewport sizes (mobile, tablet, desktop)
  • Compares test screenshots against approved reference images using pixel diff algorithms
  • Generates an interactive HTML report highlighting visual differences with overlay and slider views
  • Supports CSS selector targeting to test specific components instead of full pages
  • Integrates with CI pipelines via exit codes for pass/fail gating

Architecture Overview

BackstopJS reads a JSON or JS configuration file that defines test scenarios (URLs, selectors, viewports, and interaction scripts). It launches a headless browser via Puppeteer or Playwright, navigates to each URL, optionally executes click/scroll/type scripts, and captures screenshots. The comparison engine (resemblejs or pixelmatch) produces diff images and a pass/fail report served as a static HTML page.

Self-Hosting & Configuration

  • Install globally or as a dev dependency via npm
  • Run backstop init to generate a backstop.json config file
  • Define scenarios with url, selectors, viewports, and optional onReady scripts
  • Set misMatchThreshold per scenario to control acceptable pixel difference percentage
  • Use --docker flag to run in a Docker container for consistent rendering across environments

Key Features

  • Multi-viewport testing to catch responsive layout regressions
  • Interactive HTML report with side-by-side, overlay, and slider comparison modes
  • Scenario scripting for clicking buttons, filling forms, or waiting for animations
  • Docker mode for deterministic font and rendering across CI environments
  • Configurable diff thresholds per scenario for pixel-level sensitivity control

Comparison with Similar Tools

  • Percy (BrowserStack) — cloud-hosted visual testing; BackstopJS is self-hosted and free
  • Chromatic — Storybook-focused visual testing SaaS; BackstopJS tests any URL
  • Playwright visual comparisons — built-in but requires manual baseline management
  • reg-suit — similar self-hosted approach with S3/GCS storage for baselines
  • Applitools — AI-powered visual testing SaaS; BackstopJS uses pixel-level diffing

FAQ

Q: How do I avoid flaky tests from dynamic content? A: Use hideSelectors or removeSelectors in your scenario config to mask clocks, ads, or other dynamic elements before capture.

Q: Can I test behind authentication? A: Yes. Use onBefore engine scripts to set cookies or fill login forms before navigating to protected pages.

Q: How do I run BackstopJS in CI? A: Use the --docker flag for consistent rendering, commit reference images to your repo, and run backstop test in your CI pipeline.

Q: What browsers does BackstopJS support? A: BackstopJS uses Puppeteer (Chromium) by default. Playwright engine support adds Firefox and WebKit options.

Sources

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets