# What changed in @zumer/snapdom

> 49 changes in @zumer/snapdom 3 from its official release notes, upgrade guides and advisories: 1 breaking, 1 security, 5 new APIs and options. Each one cited. Sources checked 2026-10-28. HTML: https://unstale.sh/npm/@zumer/snapdom/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @zumer/snapdom 3

### Breaking changes

- The stream moved into @zumer/snapdom-plugins/stream, changing where developers access the stream integration. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)

### Security

- The html-in-canvas engine is made safe and as exact as the svg engine. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)

### New APIs and options

- The ascii helpers are exported from the plugins barrel. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- The plugins barrel now provides the toStream type. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Adds broadcast overlay templates for stream captures. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Adds a live canvas that repaints only what changed, letting developers capture updates as a stream. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Adds an option to lay out a capture root at a subpixel offset. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)

### Performance

- Near-weight font faces are embedded only where they can paint. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Safari capture warms only the font variants it uses. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Keeps full frames from freezing the page. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)

### Behavior and default changes

- Counter rendering now supports none, disc, circle, and square styles. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Adjacent culled block siblings are folded into one spacer per run. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Fractional clips start on the output pixel grid. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Stream reports only dirty rectangles inside the canvas. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- The console stays quiet unless debug is true. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- JPEG exports can now exceed the canvas limit. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)

### Fixes and other changes

- Parentheses inside quoted url() values are ignored when splitting background layers. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- The capture root's self-alignment is reset during preparation. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Commas and parentheses inside the counters() separator are preserved. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- A failed image keeps its box, and tainted canvases produce a warning. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Capture stops waiting when a Safari font set is stuck at loading. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- A patch stays inside the ancestors that clip its host. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- On Firefox, toCanvas waits for nested SVG images before drawing. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Webfont families that the page never drew are left out. (3.5.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.5.0)
- Top-aligns an atomic inline capture root. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Sizes a body capture from the body box rather than the surrounding margins. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Carries the capture root's language into the clone. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Preserves 1px borders in downscaled Firefox exports at DPR 1. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Strips whitespace from the header of fetched data URLs. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Font families with __ in their names are now embedded. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Resolves oklch, lab, and color() through a canvas for gradient text. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Preserves an icon font's share of the line in the clone. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Keeps live-page mounts styled under a strict style-src CSP. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Does not freeze the width of a MathML token. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Captures opaque WebGL canvases that clear every frame. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Streams patch out-of-flow boxes when they move or resize. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Places page-anchored boxes where they appear on the page. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Grows a right-to-left body capture on the side where its content spills. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Improves right-to-left fidelity in captures. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Keeps emoji and late nested images in Safari exports. (3.4.0) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.4.0)
- Gradients using background-clip: text are painted in Firefox. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- toCanvas returns the canvas with an identity transform. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- Diff detects filtered nth and imported sibling rules. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- Every clamped line is retained when line height is fractional. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- Percentage min/max sizes are resolved on the capture root. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- Clones copy SVG geometry set by CSS rules. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- Text shadows are preserved on stroked text in Safari. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- Clones preserve a textarea's live size. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
- WebP exports stay within the format's 16383px side limit. (3.3.7) — [release notes](https://github.com/zumerlab/snapdom/releases/tag/v3.3.7)
