npm / @zumer/snapdom
@zumer/snapdom
What changed in @zumer/snapdom 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-28.
1 breaking1 security5 new APIs and options3 performance6 behavior and defaults33 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@zumer/snapdom 349 changes
Breaking changes 1
The stream moved into @zumer/snapdom-plugins/stream, changing where developers access the stream integration.
Security 1
The html-in-canvas engine is made safe and as exact as the svg engine.
New APIs and options 5
The ascii helpers are exported from the plugins barrel.
The plugins barrel now provides the toStream type.
Adds broadcast overlay templates for stream captures.
Adds a live canvas that repaints only what changed, letting developers capture updates as a stream.
Adds an option to lay out a capture root at a subpixel offset.
Performance 3
Near-weight font faces are embedded only where they can paint.
Safari capture warms only the font variants it uses.
Keeps full frames from freezing the page.
Behavior and default changes 6
Counter rendering now supports none, disc, circle, and square styles.
Adjacent culled block siblings are folded into one spacer per run.
Fractional clips start on the output pixel grid.
Stream reports only dirty rectangles inside the canvas.
The console stays quiet unless debug is true.
JPEG exports can now exceed the canvas limit.
Fixes and other changes 33
Parentheses inside quoted url() values are ignored when splitting background layers.
The capture root's self-alignment is reset during preparation.
Commas and parentheses inside the counters() separator are preserved.
A failed image keeps its box, and tainted canvases produce a warning.
Capture stops waiting when a Safari font set is stuck at loading.
A patch stays inside the ancestors that clip its host.
On Firefox, toCanvas waits for nested SVG images before drawing.
Webfont families that the page never drew are left out.
Top-aligns an atomic inline capture root.
Sizes a body capture from the body box rather than the surrounding margins.
Carries the capture root's language into the clone.
Preserves 1px borders in downscaled Firefox exports at DPR 1.
Strips whitespace from the header of fetched data URLs.
Font families with __ in their names are now embedded.
Resolves oklch, lab, and color() through a canvas for gradient text.
Preserves an icon font's share of the line in the clone.
Keeps live-page mounts styled under a strict style-src CSP.
Does not freeze the width of a MathML token.
Captures opaque WebGL canvases that clear every frame.
Streams patch out-of-flow boxes when they move or resize.
Places page-anchored boxes where they appear on the page.
Grows a right-to-left body capture on the side where its content spills.
Improves right-to-left fidelity in captures.
Keeps emoji and late nested images in Safari exports.
Gradients using background-clip: text are painted in Firefox.
toCanvas returns the canvas with an identity transform.
Diff detects filtered nth and imported sibling rules.
Every clamped line is retained when line height is fractional.
Percentage min/max sizes are resolved on the capture root.
Clones copy SVG geometry set by CSS rules.
Text shadows are preserved on stroked text in Safari.
Clones preserve a textarea's live size.
WebP exports stay within the format's 16383px side limit.