14 September 2026
The first stable release of SnapDOM v3 brings automatic capture reuse, incremental
recapture, automatic font embedding, and new capture APIs. Core and official plugins
now share the v3 release line.
If you're upgrading from v2, read the migration guide.
The v2 source and
v2 documentation remain available.
Features and performance
- Automatically reuse eligible unchanged captures and rebuild affected subtrees for safe local mutations.
- Isolate concurrent captures with per-capture sessions.
- Automatically embed the web fonts used by the captured content.
- Capture HTML strings with
fromString(). - Prepare learned captures on hover or focus with
preCapture().
The SVG engine remains the default. The native html-in-canvas engine remains
experimental and requires a custom build.
Breaking changes
widthandheightnow take precedence overscale.- Font embedding is enabled automatically.
preCachehas been removed, and obsolete capture options are no longer supported.- Core redaction is limited to password fields.
afterExporthooks observe results without chaining their return values.
See the migration guide for the complete upgrade instructions.
Layout and rendering fixes
- Correct alignment in pseudo-element boxes, scroll containers, and images. #498
- Fix transformed-element reconciliation and offscreen captures. 9b28ab4, 460b75e
- Prevent fractional-width rounding from introducing unwanted line wrapping. cffd222
- Preserve explicit wrapper heights and author-specified widths on blockified spans. df94e3e, f3c75d3
- Match browser behavior for
visibilityandcontent-visibility. 21251f7 - Measure text truncation without replacing live text nodes. 418d18f
- Neutralize CSS
zoomon the capture root. 14b2047 - Preserve inherited fill colors in SVG
<use>icons. 1b6cd96
Fonts and pseudo-elements
- Preserve font styles for icon glyphs, including italic icons. #496
- Skip non-generated pseudo-elements and carry over animation-suppression fixes from v2. #497
- Retain custom
@font-facerules when the requested weight or stretch is far from the declared value. #478 - Keep other font families in a stylesheet when one family is identified as an icon font. a154f18
- Emit only the
@font-facedescriptors declared in the source. 8d0345a
Canvas, Shadow DOM, and compatibility
- Bound canvas frame waits, warn when a canvas is empty, and preserve the frame captured before
toDataURL()for WebGL canvases. de521b8, 1c44d1d - Clone slotted light DOM only once and exclude light DOM that has not been assigned to a slot. f4b1859, b75e88b
- Support DOM type checks for elements from other windows and iframes. 84359e5
- Fix global-variable leakage in the legacy bundle. 80fe19d
- Correct iframe guidance that suggested enabling an option already enabled. 98de375
Plugins and exports
- Align official plugins with v3 for HTML, context, element maps, PDF, image effects, and GIF/video recording.
- Expose capture geometry, exact export options, and canvas cropping to plugins. 7abb29a
- Accept clone roots from other windows and iframes in the color-tint plugin. ed8c31a
Documentation
- Align package references, version tags, and the plugin showcase with the shipped releases. fb616b6, 533e7e7
- Document the plugin hook contract and correct the plugins subpath import. 9ed3632, c439ca1
- Correct server-side capture guidance and add guides covering DOM capture boundaries and integration patterns. 2fa74fa, 0118a27
- Rewrite
llms.txtandllms-full.txtto match the source implementation. de95504 - Improve documentation layouts, technical guides, and search-engine crawl signals. e134a69, 0f876d6
Testing and maintenance
- Expose internal visual demos for testing, expand regression coverage, and split the visual suite into six shards. 5766151, 56b1e01
- Improve network-dependent test scheduling and wait for iframe stylesheets, imported fonts, and image decoding before capture. 8ae2371, 1df2291, b5161af
- Make regression tests independent of the capture engine and pin
devicePixelRatioin DPR-dependent tests. 8fe0a08, fb7311a - Stop pushing changelog changes automatically from
npm run build. d341737
Full Changelog: v2.23.1...v3.0.0