tag:github.com,2008:https://github.com/getsentry/SnapshotPreviews/releasesTags from SnapshotPreviews2026-06-08T17:44:32Ztag:github.com,2008:Repository/663230812/v0.16.02026-06-08T18:57:29Zv0.16.0<p>test(snapshots): Remove excluded preview override from single-module …</p>
<p>…test</p>
<p>Drop the excludedSnapshotPreviews() override in the single-module allow
<br />test so it relies solely on the snapshotPreviewModules() allow list.</p>
<p>Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com></p>cameroncooketag:github.com,2008:Repository/663230812/v0.15.02026-05-29T21:51:43Zv0.15.0<p>feat(snapshot): Add metadata modifiers (<a class="issue-link js-issue-link" href="https://github.com/getsentry/SnapshotPreviews/pull/264">#264</a>)</p>
<p>Add snapshot tags and additional context modifiers, carrying their metadata
<br />through the existing preference, rendering, and sidecar export pipeline.</p>
<p>Rename the public diff threshold modifier to snapshotDiffThreshold while
<br />keeping the old spelling as a deprecated alias for source compatibility.</p>
<p>Co-authored-by: OpenAI Codex <codex@openai.com></p>cameroncooketag:github.com,2008:Repository/663230812/v0.14.12026-05-14T08:35:19Zv0.14.1<p>Align the docs with Sentry Snapshots and replace references to Emerge…</p>
<p>… Tools where applicable (EME-1115) (<a class="issue-link js-issue-link" href="https://github.com/getsentry/SnapshotPreviews/pull/261">#261</a>)</p>
<p>* docs(readme): Lead with snapshot generation and Sentry CI export</p>
<p>Restructure the README so visitors arriving from Sentry docs land on
<br />snapshot generation and the TEST_RUNNER_SNAPSHOTS_EXPORT_DIR export
<br />flow rather than the preview gallery. Move PreviewGallery, accessibility
<br />audits, and PreviewLayoutTest into a later "Additional Features"
<br />section, clarify that the exporter writes PNGs + JSON sidecars (no
<br />Xcode code-coverage data), trim the env-var tip to the variable Sentry
<br />users actually need, and pare back non-essential Emerge branding.</p>
<p>* refactor: Rename .emerge* SwiftUI modifiers to .snapshot* and refresh Sentry docs</p>
<p>User-facing rebrand pass for the Sentry Snapshots integration. The
<br />SnapshotPreviewsCore public API is left untouched because the legacy
<br />Emerge SaaS still binds against it.</p>
<p>Renames (breaking API change for adopters):
<br />- .emergeAccessibility -> .snapshotAccessibility
<br />- .emergeRenderingMode -> .snapshotRenderingMode
<br />- .emergeSnapshotPrecision -> .snapshotPrecision
<br />- .emergeAppStoreSnapshot -> .snapshotAppStore
<br />- .emergeExpansion -> .snapshotExpansion</p>
<p>Other changes:
<br />- Add RUNNING_FOR_SNAPSHOTS env var as the canonical signal that the
<br /> app is running inside a snapshot test. EMERGE_IS_RUNNING_FOR_SNAPSHOTS
<br /> is still set/read as a deprecated alias.
<br />- Rewrite the README "Uploading Snapshots to Sentry" section around the
<br /> documented sentry-cli build snapshots flow, with a complete GitHub
<br /> Actions example.
<br />- Fix stale github.com/EmergeTools/SnapshotPreviews-iOS references in
<br /> the UnitTestMigration example.
<br />- Clean up "emerge" prose in SnapshotPreferences doc comments and the
<br /> RenderingMode.swift file header.</p>
<p>Kept (cross-module ABI with SnapshotPreviewsCore):
<br />- EmergeRenderingMode enum (public parameter type)
<br />- <a class="user-mention notranslate" href="https://github.com/objc">@objc</a>(EmergeModifierState) / <a class="user-mention notranslate" href="https://github.com/objc">@objc</a>(EmergeModifierFinder) classes
<br /> (looked up by NSClassFromString from SnapshotPreviewsCore)</p>
<p>* fix(snapshot-preferences): Remove snapshotPrecision modifier</p>
<p>Remove the public snapshotPrecision modifier so diffThreshold is the documented way to customize Sentry Snapshot comparison tolerance.</p>
<p>Update the README sidecar guidance to describe diffThreshold directly and keep the snapshot modifiers table focused on rendering behavior.</p>
<p>Co-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>* docs: Explain local snapshot output</p>
<p>Document how to write rendered snapshots to disk locally without referring to CI export before the Sentry export flow is introduced.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>* docs: Add Sentry Snapshots UI image</p>
<p>Show the visual diff UI in the Sentry upload section so readers can see the snapshot review experience.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>* docs: Clarify sidecar metadata fields</p>
<p>Document that display_name and group are generated, not overrideable, and note that future metadata fields should use explicit SnapshotPreferences modifiers.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>* docs: Mention Fastlane snapshot upload</p>
<p>Update the Sentry upload section to describe both sentry-cli and Fastlane and link to the Sentry iOS Snapshots CI docs.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>* docs: Add snapshot best practices</p>
<p>Add iOS-specific guidance for deterministic previews to avoid flaky snapshot output from network, timing, animation, locale, and clock dependencies.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>* docs: Fix README heading levels</p>
<p>Use second-level headings below the README top-level sections so the document hierarchy does not skip from H1 to H3.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>* docs: Clarify variant snapshot output</p>
<p>Explain that SnapshotTest renders every emitted preview variant and writes each named variant as its own snapshot image and sidecar.\n\nCo-Authored-By: OpenAI Codex <codex@openai.com></p>
<p>---------</p>
<p>Co-authored-by: Claude <noreply@anthropic.com>
<br />Co-authored-by: OpenAI Codex <codex@openai.com></p>cameroncooketag:github.com,2008:Repository/663230812/v0.14.02026-04-29T09:12:41Zv0.14.0<p>feat(snapshotting): Add module-based preview filtering (<a class="issue-link js-issue-link" href="https://github.com/getsentry/SnapshotPreviews/pull/260">#260</a>)</p>
<p>Allow consumers to include or exclude previews by module name via new
<br />`snapshotPreviewModules()` and `excludedSnapshotPreviewModules()` overrides
<br />on the `PreviewFilters` protocol, mirrored by `SNAPSHOT_PREVIEW_MODULES`
<br />and `EXCLUDED_SNAPSHOT_PREVIEW_MODULES` launch environment variables.</p>
<p>Module names are matched exactly against the prefix of each preview type
<br />name (e.g. "MyModule" in "MyModule.MyView_Previews"), giving multi-module
<br />projects a coarse-grained filter without enumerating individual previews.</p>
<p>Add a MultiModuleDemo example covering the new filters and unit tests
<br />for the module matching helpers.</p>cameroncooketag:github.com,2008:Repository/663230812/v0.13.02026-04-24T09:27:47Zv0.13.0<p>ref(snapshotting): Restructure CI export sidecar schema (<a class="issue-link js-issue-link" href="https://github.com/getsentry/SnapshotPreviews/pull/259">#259</a>)</p>
<p>* ref(snapshotting): Restructure CI export sidecar schema</p>
<p>Restructures the JSON sidecar emitted via SNAPSHOTS_EXPORT_DIR from a flat
<br />blob into a nested schema with explicit top-level fields for dashboard
<br />filtering and a nested `context` bag for forensic/diagnostic data.</p>
<p>Refs EME-1073</p>
<p>* ref(snapshotting): Move color_mode under context.preferred_color_scheme</p>
<p>Renames and relocates the sidecar's color scheme field. The value reflects
<br />the author-declared `.preferredColorScheme(_:)` modifier, not a rendered
<br />output, so it belongs under `context` (forensic data) with a name that
<br />mirrors the SwiftUI API.</p>
<p>Refs EME-1073</p>
<p>* ref(snapshotting): Drop tags, move orientation and color scheme under preview</p>
<p>Removes the top-level `tags` object. Its `device` field was a duplicate of
<br />`context.simulator.device_name`, and its `orientation` field is a per-preview
<br />author declaration (from `.previewInterfaceOrientation(_:)` or `#Preview`
<br />traits), not a simulator property. Both now live where their provenance
<br />points:</p>
<p>- `context.preview.orientation` joins the other per-preview author
<br /> declarations (`display_name`, `preferred_color_scheme`).
<br />- `device_name` remains under `context.simulator` as the single source of
<br /> truth.</p>
<p>Refs EME-1073</p>cameroncooketag:github.com,2008:Repository/663230812/v0.12.02026-04-14T07:36:32Zv0.12.0<p>feat(snapshots): Add CI image export via SNAPSHOTS_EXPORT_DIR env var…</p>
<p>… (EME-931) (<a class="issue-link js-issue-link" href="https://github.com/getsentry/SnapshotPreviews/pull/252">#252</a>)</p>github-actionstag:github.com,2008:Repository/663230812/v0.11.02025-11-18T19:21:29Zv0.11.0noahsmartintag:github.com,2008:Repository/663230812/v0.10.242025-08-14T22:28:55Zv0.10.24noahsmartintag:github.com,2008:Repository/663230812/v0.10.232025-08-11T17:59:15Zv0.10.23<p>Add alternative rendering modes on macOS (<a class="issue-link js-issue-link" href="https://github.com/getsentry/SnapshotPreviews/pull/241">#241</a>)</p>
<p>* Use CGWindowListCreateImage to generate snapshot.</p>
<p>* Add in an exponential backoff when we try to take a screenshot with CGWindowListCreateImage.</p>
<p>* Add CAlayer-based rendering, and update EmergeRenderingMode to support macOS.</p>
<p>* Capture view controller weakly.</p>noahsmartintag:github.com,2008:Repository/663230812/v0.10.222025-03-28T14:26:02Zv0.10.22github-actions