Releases: vizzly-testing/cli
🧪 Vitest Integration v0.2.0
[0.2.0] - 2026-06-01
What's Changed
Added
- Added automatic screenshot metadata for Vitest captures, including the current
page URL, browser, viewport, viewport width, and viewport height. - Added support for Vitest and Playwright screenshot capture options such as
animations,caret,mask,maskColor,omitBackground,scale, and
timeout. - Added
minClusterSizeandfailOnDiffoptions totoMatchScreenshot. - Added support for calling
toMatchScreenshotwith options only, without a
screenshot name.
Changed
- Visual diffs are now recorded without failing the assertion unless
failOnDiffis enabled by the screenshot option, environment, or Vizzly TDD
server configuration. - New screenshot baselines now pass after being created, so first-time captures
do not fail the Vitest run. vizzlyPluginis now configuration-free; pass screenshot behavior through
toMatchScreenshotoptions instead.- Package scripts and docs now use
pnpmcommands for installation and test
workflows.
Fixed
- Fixed element screenshots so
fullPageis not passed to element capture or
recorded as full-page metadata. - Fixed Vizzly-only options so they are sent to Vizzly as comparison metadata
instead of being forwarded to browser screenshot capture. - Fixed reserved runtime metadata such as framework, Vitest marker, URL, and
browser so user-provided properties cannot accidentally overwrite the current
browser session values.
Full Changelog: vitest/v0.1.1...vitest/v0.2.0
📱 Swift SDK v0.1.0
[0.1.0] - 2026-06-01
What's Changed
This is the first tagged release of the Vizzly Swift SDK. It gives iOS and
macOS test suites a small Swift Package Manager client for sending screenshots
to Vizzly from XCTest, without needing each app to hand-roll the HTTP payloads
or local TDD server discovery.
Added
- Added the
VizzlySwift package with two library products:Vizzly, the core screenshot upload client.VizzlyXCTest, convenience helpers forXCTestCase,XCUIApplication,
andXCUIElement.
- Added local TDD server discovery through
VIZZLY_SERVER_URL,
project-local.vizzly/server.json, global.vizzly/server.json, and the
default TDD port fallback. - Added screenshot uploads with base64 PNG payloads,
buildIdsupport,
request timeouts, and graceful disabling after connection or server failures. - Added XCTest-friendly metadata capture for platform, device, OS, viewport,
and element type while still letting user-providedpropertieswin. - Added comparison options for
threshold,minClusterSize, andfullPage
so Swift screenshots use the same option contract as the other SDKs. - Added
failOnDiffsupport from explicit client configuration,
VIZZLY_FAIL_ON_DIFF, and discovered TDD server settings.
Tested
- Added Swift unit coverage for payload shape, comparison options, build IDs,
metadata merging, disabled clients, and client state. - Added Swift SDK E2E coverage that runs through the real local Vizzly TDD
server and verifies screenshots can be uploaded, repeated, and matched. - The release workflow builds and tests the Swift package before tagging the
release.
📚 Storybook Plugin v0.8.0
[0.8.0] - 2026-06-01
What's Changed
Added
- Added support and documentation for Storybook 10 projects.
- Added a CLI-discoverable plugin entrypoint at
@vizzly-testing/storybook/plugin. - Added
--no-headless,--no-full-page,--timeout, and
--request-timeoutcommand options. - Added per-story screenshot metadata for cloud uploads, including story ID,
story title, story name, viewport name, viewport size, browser, URL, and
customparameters.vizzly.screenshot.properties. - Added per-story support for screenshot
threshold,minClusterSize,
fullPage,omitBackground,timeout, andrequestTimeoutoverrides.
Changed
- Screenshots now default to full-page capture. Use
--no-full-pageor
storybook.screenshot.fullPage: falsefor viewport-only captures. - Default concurrency is now auto-detected from CPU cores instead of using a
fixed value. - Include, exclude, and interaction hook patterns now match against more story
fields, including ID, title/name, title, name, and import path. - Cloud run configuration now honors shared comparison settings such as
comparison.thresholdandcomparison.minClusterSize. - JavaScript install and build examples now use
pnpm.
Fixed
- Fixed Storybook story URL capture so uploaded screenshots include the isolated
story preview URL. - Fixed Storybook navigation fallback when client-side story rendering does not
complete before the configured timeout. - Fixed cloud run finalization so builds are marked failed when screenshot
capture has errors and finalized successfully when no stories are found. - Fixed static Storybook server shutdown so open connections do not keep the
process alive.
Full Changelog: storybook/v0.7.0...storybook/v0.8.0
🏗️ Static Site Plugin v0.3.0
[0.3.0] - 2026-06-01
What's Changed
Added
- Added browser engine selection for static-site captures. Use
--browser
orstaticSite.browser.typeto run screenshots inchromium,firefox,
orwebkit. - Added
--no-headless,--no-full-page, and--no-use-sitemapCLI flags
for clearer opt-out control over browser visibility, screenshot mode, and
sitemap discovery. - Added
--request-timeoutandstaticSite.screenshot.requestTimeoutfor
controlling the Vizzly screenshot upload request timeout separately from the
browser screenshot timeout. - Added richer screenshot metadata, including browser, page URL, full-page
mode, viewport name, and viewport dimensions. - Added support for the shared top-level
comparison.minClusterSizeoption in
static-site cloud runs.
Changed
- Full-page screenshots are now the default. Use
--no-full-pageor
staticSite.screenshot.fullPage: falseto capture only the viewport. - Default concurrency is now CPU-aware instead of a fixed value, with automatic
defaults between 2 and 8 workers. - Screenshot viewport dimension properties now use
viewport_widthand
viewport_heightnaming. - Static Site examples and documentation now use pnpm commands and the updated
programmatic SDK context shape.
Fixed
- Fixed include, exclude, interaction, and page override pattern matching so
paths work consistently with or without a leading slash. - Fixed URL generation for discovered
.htmlpages so paths that already end
in.htmlare not requested with a duplicate.htmlsuffix. - Fixed cloud build finalization so runs with screenshot failures are marked as
failed instead of successful. - Improved missing-browser errors with the exact Playwright install command for
the selected browser. - Improved static server shutdown so lingering connections do not keep the
process open.
Full Changelog: static-site/v0.2.0...static-site/v0.3.0
💎 Ruby Client v0.3.0
[0.3.0] - 2026-06-01
What's Changed
Added
- Added
fail_on_diffsupport for local TDD visual diffs. Configure it with
Vizzly::Client.new(fail_on_diff: true),VIZZLY_FAIL_ON_DIFF=true, or
the local TDD server setting to raiseVizzly::Errorwhen a visual diff is
detected. - Added per-screenshot
build_idandrequest_timeoutoptions, with
snake_case Ruby names and camelCase aliases for JavaScript API parity. - Added
VIZZLY_ENABLED=falsesupport to disable screenshot capture from the
environment. - Added richer
Client#infooutput, includingserverUrl,buildId,
fail_on_diff, andfailOnDiff.
Changed
- Screenshot option handling now separates Vizzly options from user metadata.
Reserved options passed insidepropertiesare promoted to the correct
request fields and emit a warning sopropertiescan remain user metadata. thresholdnow accepts numeric values and is documented as a Delta E
comparison threshold.
Fixed
- Fixed request handling for HTTPS
server_urlvalues. - Fixed screenshot option serialization for string-keyed options, camelCase
aliases, zero values, fractional thresholds, and nested metadata hashes. - Fixed local TDD diff handling so both current successful diff responses and
legacy422diff responses are handled consistently whenfail_on_diffis
enabled.
Full Changelog: ruby/v0.2.1...ruby/v0.3.0
🐹 Ember SDK v0.1.0
[0.1.0] - 2026-06-01
What's Changed
Added
- Added per-screenshot comparison options to
vizzlyScreenshot():thresholdandminClusterSize. - Added support for per-screenshot
buildIdandrequestTimeoutoptions, including forwarding them through the Ember screenshot server to Vizzly. - Added automatic screenshot metadata for the current page URL, browser, viewport width, and viewport height so captures are easier to group, compare, and link back to preview pages.
Changed
- Aligned the Ember SDK screenshot option contract with the other Vizzly JavaScript SDKs: Vizzly routing, comparison, timeout, and build options now stay as explicit options, while
propertiesremains the custom metadata bag. - Updated screenshot capture behavior so requested viewport dimensions are applied before capture.
- Changed full-page handling so
fullPageonly applies to page captures; app, container, and selector captures are element-sized. - Updated cloud upload guidance to run Ember tests through
vizzly runso uploads can be finalized correctly. - Updated JavaScript package-management examples and test-app workflow from npm commands to pnpm commands.
Fixed
- Fixed selector screenshots so page-only
fullPageoptions are not passed to element screenshots. - Fixed cloud-mode/no-server messaging to point users to
vizzly tdd startfor local runs orvizzly runfor cloud uploads. - Fixed stale
.vizzly/playwright.jsonbehavior by removing the generated Playwright config when no launcher options are provided. - Simplified Chromium CI launch arguments while retaining the stability flags needed for CI environments.
Full Changelog: ember/v0.0.3...ember/v0.1.0
✨ v0.35.0
What's Changed
Added
- Added consistent screenshot option handling across the CLI and SDKs for
threshold,minClusterSize,fullPage,buildId, andrequestTimeout,
with warnings when reserved options are accidentally placed inproperties. - Added fail-on-diff propagation for local TDD flows across the JavaScript
client, Vitest, Ember, Ruby, and Swift SDKs. - Added request timeout support to SDK screenshot calls and Storybook,
static-site, Ember, Ruby, and Swift integrations. - Added
--min-cluster-sizesupport tovizzly uploadand environment
overrides forVIZZLY_THRESHOLDandVIZZLY_MIN_CLUSTER_SIZE. - Added a
VizzlyXCTestSwift Package library target for XCTest helpers.
Changed
- Aligned Storybook and static-site cloud runs to pass build metadata,
comparison settings, pull request numbers, and parallel IDs consistently. - Updated SDK metadata so browser, viewport, URL, framework, and custom
properties are sent consistently across Storybook, static-site, Vitest,
Ember, Ruby, and Swift. - Improved Storybook and static-site options for browser visibility,
screenshot timeouts, request timeouts, concurrency validation, and pattern
matching. - Updated JSON output behavior and documentation so structured payloads are
clearer and progress-style messages do not pollute stdout in JSON mode.
Fixed
- Fixed
vizzly upload --waitso failed comparisons return a non-zero exit
code. - Fixed
vizzly upload --upload-allso it bypasses SHA deduplication and sends
every screenshot. - Fixed
vizzly run,vizzly upload, andvizzly tddto honor configured
build branch, commit, message, build name, comparison, and parallel options. - Fixed
vizzly preview --basepath handling and JSON output fields. - Fixed
vizzly api --datavalidation so request bodies require--method POST. - Fixed static-site capture for
.htmlpaths and leading-slash pattern matches. - Fixed Vitest screenshot matching so new baselines pass and visual diffs only
fail assertions when fail-on-diff is enabled. - Fixed
vizzly project linkto honor the global--tokenoverride.
Developer Experience
- Expanded TypeScript definitions for screenshot results, upload options,
build results,failOnDiff,requestTimeout, and related SDK contracts. - Expanded SDK and CLI test coverage for aligned option handling, JSON output,
uploads, TDD behavior, Storybook, static-site, Vitest, Ember, Ruby, and Swift. - Updated README and integration docs for linked projects, upload options,
JSON output, browser flags, and SDK metadata conventions.
Full Changelog: v0.34.0...v0.35.0
✨ v0.34.0
What's Changed
Added
- Added a packaged Vizzly agent skill so coding agents can understand Vizzly as screenshot memory, including baselines, diffs, review state, dynamic regions, and public screenshot URLs.
- Added
vizzly init --agent-skillto install the repo-local Vizzly skill. - Added
vizzly init --agent-guidanceto install the skill and add project-scopedAGENTS.mdguidance for visual UI work.
Changed
- Documented the agent setup flow in the README and JSON output docs.
- Updated the CLI release workflow to generate release notes from the real release diff using Codex, while keeping the output concise and changelog-style.
Developer Experience
- Hardened GitHub Actions around the current pnpm and GitHub runner environment by pinning Node 22.13.1, refreshing Corepack before preparing pnpm, and restoring Node after Codex release-note generation.
- Built the package explicitly before npm publish and disabled publish lifecycle scripts so release builds do not fall back to the runner's older Node runtime.
Full Changelog: v0.33.0...v0.34.0
✨ v0.33.0
What's Changed
v0.33.0 is a polish and infrastructure release for the Vizzly CLI. The big theme is making the local visual review experience feel more current while tightening the package/install path for everyone working with the CLI and SDK clients.
Reporter UI refresh
- Aligned the CLI reporter with the new BearDen design system, so local reports, comparison views, screenshots, filters, stats, settings, and fullscreen review all share the newer Vizzly interface.
- Removed the old embedded Observatory-era reporter design system code in favor of the shared BearDen package.
- Kept CLI-specific reporter behavior local, while moving shared styling and tokens to the released package.
Package manager and workflow hardening
- Migrated JavaScript installs across the repo to pnpm with a single workspace lockfile.
- Updated CI, release, reporter, SDK, and client workflows to use frozen pnpm installs.
- Added dependency supply-chain guardrails, including pnpm minimum-release-age settings, build-script allowlists, and Dependabot cooldowns.
- Removed the old npm lockfiles from the CLI, examples, test site, and framework clients.
CLI positioning and docs
- Refreshed the README so it leads with Vizzly as a visual testing and regression review platform.
- Tightened CLI help text and package metadata to match the updated product positioning.
- Added the Vizzly inspector mascot asset to the published package assets.
Maintenance
- Updated the Vizzly organization avatar asset.
- Pulled in routine dependency updates, including React, Vite, Playwright, Zod, Tailwind, TanStack Query, and Vizzly Observatory updates.
- Released
@vizzly-testing/bear-denas a runtime dependency of the CLI reporter.
Upgrade Notes
- Contributors should use
pnpmfor local installs and repo scripts going forward. - The CLI package itself remains published as usual; users installing or running the released CLI do not need to change normal CLI usage.
Verification
Highlights from the merged changes:
pnpm run buildpnpm run lintpnpm testpnpm run test:typespnpm run test:reporternpm --cache .tmp/npm-cache pack --dry-run
Full Changelog: v0.32.0...v0.33.0
✨ v0.32.0
Local TDD now understands cloud dynamic content
This release tightens up one of the most annoying local visual-testing gaps: pulling a cloud baseline into local TDD should behave like the cloud review path, especially around dynamic content.
Before this, local TDD could download the baseline images but still miss the dynamic-content context the cloud was using. That meant timestamps, generated values, and other already-known noisy regions could show up locally as scary diffs even when the cloud would ignore them. Not great for humans, and especially not great for agents that treat every red diff like a five-alarm fire.
Now, when you pull a baseline from Vizzly, the CLI also brings down the dynamic-content metadata that belongs with it.
What changed
vizzly tdd run --baseline-build ...now saves cloud hotspot and confirmed-region metadata locally alongside the baseline images.- Local comparisons can pass as
region-filteredwhen the changed pixels are inside confirmed dynamic regions. - Local context/report data now carries the dynamic-region details agents need to understand why a diff passed.
- Static report generation works correctly from the packed CLI package.
- Honeydiff was upgraded to the latest released performance build.
Why this matters
If your team has already taught Vizzly which parts of a screenshot are dynamic, local TDD now benefits from that same knowledge. You should see fewer false local failures after pulling a cloud baseline, and agent workflows should stop overreacting to known dynamic content.
Real visual changes still show up. The local filter only passes changes that match the confirmed dynamic-region rules closely enough.
Upgrade
npm install -g @vizzly-testing/cli@0.32.0Full Changelog: v0.31.0...v0.32.0