Release notes

happo for npm release notes

The happo npm package: the CLI and its Storybook, Cypress, Playwright, and Vitest integrations.

7.3.0Broken Storybook story files no longer fail the whole report

Fixed

  • Fix a Storybook story file that throws on import to only fail its own stories, rather than the entire snap request, though themed story examples may now appear in a different order [by @trotzig in #1009]

7.2.4Fix for dropped snapshots in Playwright batches

Fixed

  • Fix Playwright batches sometimes losing the snapshot of a test that passed, which could show as missing results in a Happo report [by @lencioni in #1019]

7.2.3Internal refactor release

7.2.2Clearer guidance when a run is cancelled

Fixed

  • Show an upgrade hint and the allowFailures tip in CI failure messages for old CLI versions whose e2e or Storybook build failures gave no detail [by @lencioni in #919]

7.2.1Reliability improvements for large CI runs

This release reduces memory pressure on Happo Web during large CI runs by changing how snapshot data is uploaded, improving reliability for bigger projects.

Fixed

  • Reduce memory pressure on Happo Web during large CI runs by uploading global CSS as a separate package instead of including it in every snap request payload, fixing crashes seen during high-traffic periods [by @lencioni in #900]
  • Reduce memory pressure on Happo Web during large CI runs by uploading snap request payloads directly to S3 instead of sending them through the API, fixing crashes seen during high-traffic periods [by @lencioni in #899]

7.2.0Fix for animated snapshots stopping after one stage

Fixed

  • Fix multi-stage animation capture stopping after the first stage when a stage's first new frame only repeats an already-captured animation, such as a completion fade that re-runs before the next stage's change lands; capture now keeps looking until a genuinely new animation appears or the wait time runs out [by @trotzig in #876]

7.1.0Vitest Browser Mode integration

This release adds support for taking snapshots from Testing Library tests run under Vitest Browser Mode, along with smaller fixes.

Added

  • Add a Vitest Browser Mode integration: use happoVitestPlugin() and happoScreenshot() from happo/vitest and happo/vitest/browser to send snapshots from Testing Library tests, with support for targets, dynamic targets, snapshotStrategy, --skip, and autoApplyPseudoStateAttributes [by @trotzig in #308]

Changed

  • Default autoApplyPseudoStateAttributes to true in the Vitest integration, matching the Cypress and Playwright integrations, so hover and focus attributes apply by default [by @lencioni in #763]

Fixed

  • Stop reporting write EPIPE errors to the error tracker and failing the exit code when whatever reads the CLI's stdout disconnects mid-run [by @lencioni in #748]
  • Update the "Missing apiKey and apiSecret" error message to link directly to the API tokens page at <endpoint>/api-tokens instead of /settings [by @trotzig in #768]

Breaking

7.0.0happo v7: stricter defaults, removed options

This release turns on by default the checks that used to be opt-in, removes config options and CLI flags Happo no longer needs, fails on config options it doesn't recognize, and raises the minimum Node and Storybook versions. Expect the first run after upgrading to report diffs for examples with outlines or box shadows at their edges, and expect the projects that run for the same commit to post a single Happo status check. See the upgrade guide at https://docs.happo.io/docs/upgrading-to-v7 and the announcement at https://happo.io/blog/happo-v7.

Breaking changes

  • Block approval by default on render errors, new accessibility violations and pages that start to scroll sideways: a config without blockApproval now turns on every condition, and a condition left out of a blockApproval object is on too; set one to false to allow approval despite it. A page that already scrolled sideways before the upgrade doesn't block [by @trotzig in #178]
  • Default group to true, so the projects that run for the same commit combine into one job with a single Happo status check instead of a Happo (<project>) check each; require Happo in branch protection, or set group: false to keep a project's own job and check [by @trotzig in #178]
  • Default includeOutlinesAndShadows to true, so screenshots grow to hold the outlines and outer box shadows at the edge of an example; expect a diff for each such example on the first run, or set it to false on a target to crop to the elements' boxes [by @trotzig in #178]
  • Default detectHorizontalOverflow to true, so a page that starts to scroll sideways is a diff even when its pixels are the same; a page that already overflowed is flagged but doesn't become a diff, and false on a target turns the check off [by @trotzig in #178]
  • Enable deep compare by default: a config without deepCompare now compares with { compareThreshold: 0.002, diffAlgorithm: 'color-delta' }, which takes the place of a threshold set for the project on happo.io; set deepCompare: false to keep using the project's settings [by @trotzig in #178]
  • Default allowedHostnames to an empty list, so a target blocks every external request unless the config names the hostnames it needs; ios-safari and ipad-safari targets are unaffected [by @trotzig in #178]
  • Default integration.autoApplyPseudoStateAttributes to true for Cypress and Playwright; set it to false to manage the data-happo-* attributes yourself [by @trotzig in #178]
  • Reject unknown config options with an error, with a "did you mean" suggestion for likely typos, so a config with a removed or misspelled option now fails instead of being ignored; every problem in the config is reported at once [by @trotzig in #178]
  • Remove the target.chunks, useFullPageFallbackForTallScreenshots and githubApiUrl config options, and the --githubToken and --skippedExamples CLI flags; use --skip instead of --skippedExamples, and drop the rest [by @trotzig in #178]
  • Stop posting Happo statuses as pull request comments from the CLI: happo.io posts statuses itself, for github.com and GitHub Enterprise [by @trotzig in #178]
  • Chunk every run automatically at about 100 snapshots per chunk, capped at 20 chunks, now including the pages integration and Cypress and Playwright runs, which used to run as a single chunk [by @trotzig in #178]
  • Require a custom integration's build() to return estimatedSnapsCount; it doesn't have to be exact [by @trotzig in #178]
  • Raise the minimum Node version to ^22.18.0 || >=24.0.0, dropping Node 23, and the minimum Storybook version to v9, dropping the v8 addon [by @trotzig in #178]
  • Require a Happo server with the bulk snap-request endpoint: the fallback to one request per chunk for servers without it is gone [by @trotzig in #178]

Added

  • Add a blockApproval.horizontalOverflow option, on by default, that blocks approval when a page starts to scroll sideways, whether an existing snapshot now overflows or a new one does; a page that already overflowed, or whose baseline was never measured, doesn't block [by @lencioni in #675]

6.25.3Fix flake listing crash for flakes without a project

Fixed

  • Fix the happo flake command failing with an error when a flake has no associated project [by @lencioni in #681]

6.25.2Fewer noisy CLI error reports

Fixed

  • Stop reporting CLI argument typos, like unknown or missing option values, to our error tracking; the CLI still shows you the error and exits with 1 [by @trotzig in #650].

Need help?