All notable changes to this project will be documented in this file.
10 September 2026
- fix: three layout misalignments in pseudo boxes, scroll containers and images
#498 - fix(pseudo): skip non-generated pseudo-elements
#497 - fix(pseudo): preserve font style for icon glyphs
#496
9 September 2026
- fix: make DOM type checks realm-agnostic (ref #494)
84359e5 - fix(color-tint): accept clone roots from another realm (ref #494)
ed8c31a - chore(plugins): bump to 2.2.2
93a8e60
8 September 2026
- exposed internal visual demos for SnapDOM testing and add new tests
5766151 - fix: stop discarding a whole stylesheet when one family looks like an icon font
a154f18 - docs: acknowledge open-source program support
5b30335
30 August 2026
- fix: fractional with. Ref #491
cffd222 - fix: update network gate logic to manage lane budget and improve test reliability
8ae2371 - fix(clone): drop light DOM that no slot accepted
b75e88b
28 August 2026
- Split visual demo suite into 6 shards and gate network-bound demos
56b1e01 - Fix legacy bundle global leakage. Ref #490
80fe19d
25 August 2026
- fix: transformed reconciliation. Ref #489
9b28ab4 - fix: offscreen captures. Ref #488
460b75e - fix(iframe): stop suggesting an option that is already on
98de375 - add funding
e839ec0
21 August 2026
- fix: measure text truncation without replacing live text nodes (Ref #485)
418d18f - fix: bound the canvas frame wait, warn on an empty canvas (Ref #486)
de521b8 - fix: let <use> icons inherit fill from the use site (Ref #487)
1b6cd96
18 August 2026
- fix: keep an author-specified width on blockified spans (Ref #484)
f3c75d3 - fix: neutralize CSS zoom on the capture root (Ref #483)
14b2047
10 August 2026
- fix: stripe height
df94e3e - feat(plugins): expose capture geometry, exact export options and canvas cropping
7abb29a - fix(styles): reproduce visibility and content-visibility the way browsers do
21251f7 - update
1c8e12f - fix(fonts): emit only the @font-face descriptors the source declared
8d0345a - fix(clone): keep the pre-toDataURL frame for WebGL canvases
1c44d1d - test: pin devicePixelRatio in DPR-dependent tests
fb7311a - fix(clone): clone slotted light DOM only once
f4b1859 - chore: bump version to 2.24.0
4a2ced5
4 August 2026
- fix(fonts): keep a custom @font-face when the page asks for a far weight/stretch
#478
27 July 2026
- perf: probe ink first in Safari's waitForImgPaint instead of a blind two-frame wait
50ea4eb - fix: rAF timeout fallback so Safari captures don't hang in occluded windows
104cb06
27 July 2026
⚡ perf
- perf: replace Safari's 3x pre-capture warmup with a verified draw at raster time
6ee4680
🛠 fix
- fix: keep Safari toSvg/toImg vector at scale instead of rasterizing to PNG
dbbff09 - fix(styles): disable animations on clones so entry keyframes don't blank the capture
#476 - fix: I freeze nowrap box widths and isolate measure mounts in shadow DOM
#474 - fix: freeze the image the browser actually shows (srcset descriptors, type filters, content:url)
6ac87ef - fix: parse final font-face declarations without semicolons
#475 - fix: stop concurrent captures from sharing session maps and counter state
d1379a6 - fix: realm-safe element guards — pseudos and per-node handlers now survive iframe-content captures
5e9d8e1 - fix: collect svg defs referenced from the root svg's own attributes
441e3cf - fix: prefetch mask and border-image URLs in preCache, drop the dead warm call
423acd5 - fix: first-letter materialization no longer false-positives on margined elements
52a6fff
25 July 2026
✨ feat
- feat: warn once when width-softened text risks re-wrap without reconcile:true
1b882d6 - feat: add burst:true capture memoization, replacing session()
c3f0a56 - feat(pseudo): add function to strip CSS content alt-text suffix. Ref #458
9cefe86 - feat(session): close the MutationObserver-only staleness gap
b15b418 - feat: snapdom.session — memoized repeated captures with mutation tracking
94f206c - feat: reconcile option — measured layout reconciliation of the clone against the live DOM
1597d77 - feat(plugins): per-node resolveNode hook + internal tag handler registry
aacc512
🛠 fix
- fix: resolve <picture> srcset via media-query matching, not currentSrc
b94f652 - fix: capture roots that are themselves the target element were skipped
23a3611 - fix: resolve image-set()/-webkit-image-set() by device pixel ratio
f1e1cc2 - fix(css): emit the base reset for tags evicted from the defaultStyle cache
ef584a8 - fix(styles): keep the height of wrappers whose children are all out of flow
714cdb4 - fix(capture): stop background/asset passes losing the session nodeMap when same-origin iframes capture concurrently
f5e1778 - fix(clone): drop <picture> <source> elements so inlined <img> src is not overridden
ff7b10d - fix(images): inline the capture root itself when it is an <img> or SVG <image>
5d5bf71 - fix(CSSVar): update SVG_TEMPLATE_TAGS and refine isInSvgTemplate logic for mask/clipPath handling. Closes #459
509bed1 - fix(capture): honor filterMode:'remove' in shrink pass and height estimate
e84557e - fix: serialize session.capture() calls to stop races on shared cache.session
9f3cb23 - fix: reuse snapFetch in pictureResolver instead of a hand-rolled fetch pipeline
a737419 - fix(types): drop phantom snapdom.toJpeg(), add clip option, document outer* defaults
633a09c - fix: stop a failed export from poisoning every later export on the same result
e69f51b - fix: dedup extendIconFonts entries instead of growing list unboundedly
56cbe26 - fix: derive missing export dimension from post-bleed viewBox, not pre-bleed box
4173c93 - fix: stop color-tint plugin from clipping bleed content
56784aa - fix: align margin-collapse neutralization by nodeMap, not child index
9fa7d89 - fix(pseudo): render box-generating pseudos that paint only via box-shadow/outline
d239ec4
📦 other (chore/docs/refactor/…)
- docs: plain restyle, npm run site local-dist server, clearer burst demo
13f8662 - test: split burst benchmark into isolated static/mutating files
72bbe81 - docs(labs): add a live burst capture demo with a real Pikachu card
3706d62 - docs: document reconcile, burst, invalidate, and image-set() resolution
5d9d74f - chore: update contributors list
bf37697 - docs: add CORS & external resources guidance to README
84221c1 - test(clone): stop asserting picture <source> resolution timing across engines
e1fb59e - docs: drop Tanker from the Web fonts showcase paragraph, use plain sans-serif
64aabbf - test: add type-checking for types/snapdom.d.ts to the test pipeline
a06a71a - perf: defer buildCounterContext's document walk until actually needed
8020750 - perf(preCache): use fused collectFontUsage (one walk instead of two)
6a8a488 - docs(types): add reconcile option, snapdom.session / CaptureSession, resolveNode plugin hook
bc0f854 - perf(raster): header-peek instead of full SVG decode, single decode/encode cycle, async canvas encode
af8c549 - perf: fuse tree passes — single-walk font usage collector, snapshot-flagged background pass
f7274f7 - perf: parallelize network-bound capture phases and memoize image downsampling
b7fedc7 - perf(clone): skip idle machinery per child in fast mode, make canvas pre-rAF Safari-only
a5536ae - perf: stop self-invalidating the style epoch, memoize scrollbar CSS scan, gate Safari warmup walk
7a5179d
21 July 2026
feat
- feat: emulate backdrop-filter at capture time #457
- feat: clip option + snapdom.viewport() — region capture with offscreen culling 328226b
fix
- fix: shadow fidelity in WebKit's SVG rasterization b7e9af2
- Fix rotated-root captures clipped at edges (d31) 64c5a8f
- fix: key the embedded-fonts cache by document identity 05ef9a9
- fix: guard content-sized boxes against sub-pixel width truncation (text re-wrap) 4b92392
- Fix type definitions drift: compress default, quality default, missing options (excludeStyleProps, fontStylesheetDomains, safariWarmupAttempts, debug, filename), toRaw/to on result, LocalFont.stretchPct 7a473c4
- fix: keep root filter blur() and always expand bbox for its bleed 3f6e6e7
- fix: stop compensating the root's stripped translation in the viewBox bbox 3241481
- fix: repair the broken htmlInCanvas re-export in the plugins barrel 1b74a1a
- fix: stop stabilizeLayout from leaving a permanent border on the source element cf3da9b
- fix: guard the container padding offset against Chromium 140 all:initial expansion 0b24929
other (docs)
- FEATURES_CN.md: '按设计跳过' → '有意跳过'. The phrasing fix was independently #453
- docs: refine Chinese documentation dce83ab
- docs: add Chinese translation maintenance guide 4e53063
- Update FEATURES_CN.md to change '按设计跳过' to '有意跳过' 56ff167
other (test)
- Make the test suite pass on Firefox and WebKit 74de348
- Add cross-browser test runs (BROWSER=firefox|webkit|all) with per-engine visual baselines f2b72d8
- test: wait for KaTeX CDN + fonts in the d454 visual demo 8205e1b
other (chore/refactor/merge)
- chore: add cross-engine visual report (npm run report:cross) 5b6e8cd
- chore: update snapdom plugins version ed984ff
- refactor(api): drop snapdom.viewport() — clip: 'viewport' is the one spelling 4a0f301
- Merge pull request #455 from mosuzi/codex/discussion-450-chinese-docs-review 5b0d149
13 July 2026
- fix(iframe): rasterize long iframe documents and pin them to the viewport to prevent full expansion during capture
#449c610d4a - fix(textarea): first letter issue expanded to textarea
#447bc5ce38 - fix(iframe): improve margin and padding handling in pinIframeViewport to preserve content offset
#4486a78d3b
3 July 2026
- fix(capture): drop *-prefixed attributes to keep XMLSerializer output well-formed
#445 - refactor(tests): simplify tests for *-prefixed HTML attributes
0a818bf
24 June 2026
- fix(fonts): scan the capture element's ownerDocument so iframe fonts embed (#441)
#442 - fix(fonts): scan the capture element's ownerDocument for fonts
#441 - fix: use nodeMap for source/clone child alignment in inlineBackgroundImages
#440 - Delete .github/workflows/issue-triage.yml
ab5b36f - Delete .github/workflows/label-sync.yml
7366d5a - fix(capture): preserve parent session across nested iframe capture
cb0ece1 - chore: update contributors list
f18dee0 - chore(compress): raise RES_FACTOR to 0.95
0bd87d7 - update
b541784
17 June 2026
- feat: opt-in perceptual image downsampling (compress option)
e353569 - chore: remove unused exporters registry
711d591 - feat(compress): downsample CSS backgrounds and SVG <image> too
6666f59 - fix: content-aware width softening
0832e72 - feat(compress): enable image downsampling by default + docs + image benchmark
7148c74 - refactor: simplify compress to a boolean option
39e8714 - fix(#394): pre-decode foreignObject images before raster (cross-browser)
9895218 - feat(compress): downsample oversized images below visible resolution (0.6 factor)
47b9ed7 - fix(#394): wait for foreignObject image compositing on all browsers
25279e9 - fix(compress): decode images before drawing to avoid blank downsamples
5aedeca - types: add compress option to SnapdomOptions
495a089 - fix: reuse preCache image dataURLs in the capture path
37d99a5 - fix: pass the documented payload to before/afterExport hooks
1a14fd0 - fix: re-fetch a font when its resource cache entry was evicted
2e938a4 - chore(deps): bump esbuild to ^0.28.1 (fixes Dependabot high alert)
3d9a8e6
16 June 2026
- fix: emit captured width as a min-width floor instead of dropping it
- fix(#432): escape U+FFFE/U+FFFF noncharacters in sanitize regex
3 June 2026
- fix: root margin-collapse clipping (#426) and oversized-raster decode failure
#425 - fix(#425): strip XML-invalid control chars before serializing the clone
880376b - fix(#429): don't freeze auto-sized table cell widths
33b81eb - fix: honor the localFonts option in the capture path
9122152 - fix(#429): also skip the logical inline-size and the rest of the table box tree
69400a6
29 May 2026
- fix(pseudo): render bordered + layout-spacer pseudo-elements (#418, #419)
#423 - fix(pseudo): keep empty box-generating pseudos used as layout spacers
#418 - fix(pseudo): render pseudo-elements with a single-side border
#419 - Add new super power plugins
88cb353 - chore(plugins): v2.2.0 — gif/video/html
9c84259
28 May 2026
- Fix for placeholder colors not being copied over on webkit browsers
#420 - fix(pseudo): support counter-set; drop divergent dead counter duplicates
eb8bdb7 - fix: proxy-keyed bg cache, case-insensitive font match, nodeMap icon pairing
0623bcd - fix(bbox): correct bleed/transform math for inset shadows, blur chains, root scale
1c43605 - perf: trim redundant per-node work on the capture hot path
6d1ad72 - fix(capture): stop mutating the live DOM during capture (non-destructive)
db69e78 - fix(export): flatten jpeg/webp background by resolved format, not export name
1dcfbcd - fix(cache): invalidate snapshot on option change, reset measureHints on disabled
0b8d697 - add SnapDIFF
9bda342 - test(precache): align cache.background keys with proxy-prefixed contract
064b004 - fix(clone): ensure placeholder color is correctly rendered in SVG
44899b3 - chore: update contributors list
73358a1 - Fix download format option types
2f93d39 - add sponsor
70c4140 - chore: revert .gitignore to main
3091154 - fix(clone): restore original placeholder logic and styles
efe1dd9 - chore: exclude screenshots folder in .gitignore
d364607 - Merge pull request #417 from puneetdixit200/fix-download-format-types
be6bc02
5 May 2026
- feat(plugin)!: rename prompt-export to agent-map, focused on visual agents
cd5ca18 - update Mr SnapDOM theme
d9fb7bc - feat(plugin: prompt-export): richer element map for LLM agents
dd0769a - html2canvas is not good
4002631 - feat(plugin: prompt-export): default include omits image; +benchmark section
7adc87f - update html-in-canva to new API
935069a - Añadir prueba de regresión para el problema #235: corregir el renderizado de
counter(x) ")"sin espacios adicionales.6e209e8 - feat(clone): enhance SVG handling by preventing var() materialization in templates. See #408
5d566fa - test(visual): skip suite when demos/ folder is absent
652693b
23 April 2026
- fix(toCanvas): wait for compositing after decode on Safari. Fixes #394
#394 - fix(iframe): restore live iframe scroll position after capture. Closes #393
#393 - fix(capture): preserve mask-mode and mask-composite through shorthand inlining.
#402 - fix(capture): phantom whitespace in inline-flex + gap elements. Fixes #406
#406 - docs(site): add prompt-export to the plugins page + live demo
b451415 - fix(plugins): enforce local-first priority for plugin-provided exports. See #401
ed272f4 - fix(capture): drop invisible border props from style snapshot. See #390
8942fd4 - docs(plugins): add prompt-export section to plugins README
f9743db - fix(capture): disable WebKit text autosizer inside foreignObject. See #327
9c49d6a - fix(images): increase batch size for processing images to 6 to optimize HTTP/1.1 connection limits
311c9e4 - fix(plugin: prompt-export): flow metadata to the toPrompt() export
b94b589 - Merge pull request #398 from kohaiy/patch-2
da438d5
8 April 2026
- Improve robustness of icon font detection
#397 - feat(docs): add LLM-friendly documentation links and new reference files
bc7ece1 - feat(plugins): add prompt-export plugin for LLM-friendly captures
314c51a - feat: extract pictureResolver into standalone module
1d3dd70 - feat(docs): add official and community plugins sections to README, including installation instructions, usage examples, and detailed descriptions of each plugin's functionality.
b10235e - feat(docs): enhance plugin documentation with event tracking attributes for improved analytics on user interactions
84d6901 - feat(docs): add tracking scripts and enhance plugin documentation with event tracking for better analytics
20de0f2 - Ensure font names are escaped before creating dynamic RegExp
2cd41ec - fix(docs): update "Build a Plugin" link to anchor and add section ID for improved navigation in documentation
3c01910
27 March 2026
- feat(docs): enhance documentation with new community plugins section, update index and labs pages, and add shared CSS for consistent styling across SnapDOM documentation.
d35278c - feat(plugins): add multiple new SnapDOM plugins including ascii-export, color-tint, filter, html-in-canvas, pdf-image, picture-resolver, replace-text, timestamp-overlay. Each plugin enhances image processing and manipulation capabilities. Ref #391
a4d2331 - feat(docs): add contributing guidelines and plugin specification for SnapDOM plugins, including usage examples, lifecycle hooks, and best practices.
5243a34 - feat(plugin-template): add initial SnapDOM plugin template with example usage and options. See #391
- feat(workspaces): add workspaces configuration to package.json for better package management
3032187
23 March 2026
- fix(clone): add support for copying form validation attributes and handle nested foreignObject in deepClone
f87c896 - fix(clone): video frames (#277), SVG paint props (#365), placeholder color (#315), object-fit (#337), cross-origin iframe warn (NEW-7)
946ec83 - fix(clone): sanitize XML-invalid control characters from attribute values
4218a17 - fix(transforms): handle matrix3d transforms and extract decomposeScaleShear as shared helper (#216)
0b5eeab - fix(prepare): force content-visibility:visible before capture (#281) and fix fixed elements inside scroll wrappers (#364)
ba2aa6d - fix(styles): handle detached elements in inlineAllStyles and evict oversized snapshotKeyCache
02280d2 - Bumped version
96da0a5 - fix(counter): implement counter-set support to manage top values without new scopes
f869a46 - fix(capture): implement caching for clone measurements to optimize performance
ff455c2 - fix(counter): handle negative values in formatCounter and update tests for counter resolution
b9b965d - fix(fonts): embed all families in font-family fallback chain, not just the primary (#357)
13ab5c8 - fix(styles): enforce visibility:hidden when content-visibility:hidden to prevent content leakage in snapshots
4f5f15a - fix(outline): enhance parseOutline to account for outline-offset in bleed calculation
7f45084 - fix(inlinePseudoElements): enhance style comparison by including additional CSS properties
df2dd99 - fix(capture): normalize foreignObject defaults for flex layout (#351) and whitespace (#349)
55f3962 - fix(download): ignore non-image type field to prevent format override (#339)
3f42049 - fix(CSSVar): prevent redundant property resolution by tracking visited properties
e76d700 - fix(clone.helpers): preserve vertical-align from original input in checkbox/radio replacement (#311)
ccaf138 - fix(pseudo): increase CSS_RULE_SCAN_BUDGET to 1000 for better performance in large applications
a09f438 - fix(cache): add persistent cache for clone-in-document layout measurements
c65049b - fix(toCanvas): omit CSS inset box-shadows in canvas export to prevent incorrect rendering
ff4a137 - fix(css): exclude zoom from style snapshot to prevent double-zoom inside foreignObject (#369)
8f80d2a - fix(background): preserve all url() layers in background shorthand when inlining images
fe18140
17 March 2026
- fix: CSS vars perf, scrollbar styles, SVG image inline, nested line-clamp, iframe pseudos & isolation, Tailwind border (#334 #341 #348 #362 #371 #372 #386)
#387 - fix: enable image download on iOS via Web Share API
#384 - feat(scrollbar): implement custom scrollbar style collection for capture, ensuring styles are applied correctly. Closes #334
#334 - feat(styles): normalize Tailwind border styles in capture and inlineAllStyles to ensure consistent output. Closes #362
#362 - feat(lineClamp): introduce lineClampTree function to apply line-clamp to nested elements, enhancing ellipsis rendering. Closes #386
#386 - test(styles): add tests for excluding CSS properties from snapshots, ensuring fidelity with CSS variables. Closes #348
#348 - test(capture): add test for iframe CSS isolation to ensure wrapper div does not inherit iframe styles. Closes #372
#372 - refactor(capture): replace getComputedStyle with getStyle for improved iframe support and consistency across style retrieval. Closes #371
#371 - feat(pseudo): implement suppression of native ::before/::after pseudo-elements in cloned styles to prevent double rendering. Closes #359
#359 - fix(capture): update Safari padding logic to avoid edge clipping by applying padding only when necessary based on bounding box transforms. Closes #333
#333 - test(fonts): add test for cross-origin CSS support in embedCustomFonts function, verifying correct handling of custom CDN stylesheets. Closes #309
#309 - feat(fonts): add fontStylesheetDomains option to support cross-origin CSS fetching, enhancing font loading capabilities. Closes #309, closes #370
#309#370 - feat(styles): add support for capturing -webkit-text-stroke properties in Safari to enhance style snapshot accuracy. Closes #340
#340 - fix(styles): normalize inline styles to ensure !important rules in stylesheets correctly override inline styles in clones. Fixes #328.
#328 - refactor: improve dimension handling in deepClone and createCheckboxRadioReplacement functions for better accuracy and consistency. Closes #321. See #378
#321 - refactor: enhance checkbox/radio replacement for Firefox with SVG implementation for consistent rendering and improved styling. Closes #290
#290 - fix(background): resolve relative URLs and fallback to
backgroundshorthand for url() when background-image is empty. Closes #343#343 - fix: enable image download on iOS via Web Share API
#383 - feat(tests): add comprehensive test coverage for various modules including exporters, utils, and modules to improve overall code reliability
06cc896 - feat(debug): introduce debug option to log suppressed errors for troubleshooting, enhancing error visibility during capture processes
f107bbe - fix: Firefox checkbox radio replacement
b97e553 - refactor(cache): implement EvictingMap for cache management to limit memory usage and improve performance
212cd4f - refactor(styles): improve height handling for transparent wrappers to support margin collapsing and enhance layout stability
c50ccef - fix(styles): prevent overriding border styles when using border-image, and improve getStyle fallback handling
a5857c5 - feat(images): add support for inlining SVG <image> elements as data URLs, addressing #341.
f7d4616 - feat(safari): implement font and image decode warmup for Safari to address WebKit Bug #219770, enhancing capture reliability
ad450ce - test(getStyle): add tests to ensure getStyle never returns undefined for elements and pseudo-elements
83c3854 - refactor(snapdom): streamline plugin exports by consolidating export functions into a loop for improved maintainability
ca35387 - feat(capture): enhance DOM capture dimensions for root elements by measuring scroll dimensions and using a temporary container for accurate height and width calculations
31e50f2 - fix(css): enhance getWindowForElement and getStyle functions to handle cross-document scenarios and improve fallback logic
b0fbc8d - refactor(context): remove inline cache policy normalization and import from cache module for improved code organization
0492756 - feat(safari): add
safariWarmupAttemptsoption to optimize font and image decoding for improved capture performance2474c05 - fix(styles): prevent width constraints on inline and specific tags to avoid text wrapping issues
674ef27 - chore: update contributors list
b30de75 - docs: update README files to replace NPM version badge with weekly downloads badge
8e12d01 - chore(.gitignore): add 'demos/' directory to .gitignore to exclude demo files from version control
fa34905 - refactor(prepare): simplify deepClone call by removing redundant element argument for cleaner code
399bfaf - fix(styles): adjust inline style for timestamp demo to prevent text wrapping
b88e8d7 - fix(snapdom): remove redundant safariWarmup reset to improve iteration logic
72d3fb7 - Merge PR #384: enable image download on iOS via Web Share API
05bc67c - Merge main into dev (2.1.0)
5f5ab34
10 March 2026
- fix(background): inline background-image inside shadow DOM hosts
#379 - Update URL handling to use location.origin in fonts.js
#380 - fix: use nodeMap for source-clone alignment in inlinePseudoElements
#381 - fix(background): properly inline background-image inside shadow DOM hosts
#318 - update demo site
4de1850 - feat: classify open issues by importance with priority labels and triage workflows
246a4c4 - fix: Enhanced font embedding functionality for dynamically injected stylesheets
3d4985a - fix: resolve CSS transform double-scale bug (issue #321)
d41504b - fix: improve demo capture functionality with Safari support and locking mechanism
2cb3856 - refactor: update build configuration for legacy and ESM outputs, removing module structure and adding subpath exports
94f6289 - docs: update README to reflect changes in SnapDOM ESM build structure and usage instructions
8e5a710 - fix: only change to location.origin when treating inline styles in font.js
94c91c6 - fix: validate fallback image data before setting source
2c754fe - fix: ensure image is only appended if data URL is valid
46957c5 - fix: ensure valid CSS text is fetched for font links
201209f - Merge pull request #301 from Amyuan23/fix/svg-root-font-size
5bd53ba - Merge pull request #350 from ZiuChen/fix/remote-katex-font
3cbbd57 - Merge pull request #378 from FlavioLimaMindera/fix-scale-image-issue-321
e53f2f8 - Fix: Inherit root font-size in SVG output
3bdf300 - Merge pull request #374 from kohaiy/patch-1
0b21142
20 January 2026
26 November 2025
- Fix spaces. Closes #326
#326 - Fix download options. Closes #323
#323 - Fix Safari Image Issue. See #330
ba80b6f - Minify mjs version
9155d4f - Add a re-export for preCache. See #332
acc5b79
18 November 2025
- V2 release!!
#319
18 November 2025
- Feature enable tree-shakeable code
ebb7b6a - Fix bug when img has height with % units. Closes #268
#268 - Fix regression to process MathJax
7ef116c - Fix bug See #316
7efbede
11 November 2025
- Reorganice helper functions
d1fd982 - Perf improvement
daf0eca - Fix placeholder dimensions when image loading fails
e44b9d9
9 November 2025
- Integrate createBackground into toCanvas. Closes #297
#297 - Add Chinese translation of README.md (readme_cn.md)
#298 - Adjust final dimensions when excludeMode: remove. See #294
a860827 - Improve material icon / symbols. See #304
526c4c8 - Add XHTML sanitize. See #282
0039301 - Add detection to Baidu on iOS. Also detect other apps/browsers on iOS. See #295
97e6dff - add support for text-underline-offset. See #303
fb603bc - add support for text-underline-offset. See#303
0b93c0d - fix: improve CSS src property parsing in font faces
dbe52a1
23 October 2025
- Add basic support for icons with ligature such as material-icons. Closes #275
#275 - Replace straighten with outerTransforms, and noShadows with outerShadows
902f032 - Fix straighten regression
60c6569
14 October 2025
- Document plugin system
d87ac01 - First plugin and exporter draft
5da0948 - Fix subpixel bug. See #261
465950b - Update demos with plugins
50e6c4f - Update plugin system
4e21b47 - Enhance external SVG defs. See #262
cd4a7fb - First plugin system draft
9c6b91b - Fix complex canvas render on Safari. See #263
2697207 - Enhance CSS vars detection. See #262
6655303 - Fix counter CSS reset and bug when exist background-image. See #265
3c29997 - FIx excludeFonts defs. See #260
84b1770 - Fix local register
9c4508e - Enable use built-in exporters in custom exporter
5c6fe36 - Fix background-repeat. See #259
0ad5fa4 - Fix export name format jpg -> jpeg
47d532a - Update roadmap
dff59b9 - Fix local plugin registration
0997618
5 October 2025
- Recompile builds
fca9e00
5 October 2025
- Improve CSS vars detection. Closes #255
#255 - Fix toImg() dimensions when scale==1. Closes #254
#254 - Enhance web fonts detection on deph relative paths. See #253
e2a8c45 - Add two new options to control transforms and shadows on root element
8c9a75f - Add toSvg() in replacement of toImg()
10e2043,122317e - Improve relative path detection. See #253
34158e0 - Lint code
c754981 - Lint tests
ee974ed
30 September 2025
- Add basic support to sticky elements. See #232
02893e6 - Update types
19317e6 - fix formating
58ca761 - Enhance browser detection. See #251
cfe753c - Fix pseudo capture. See #252
e85678e - Merge pull request #249 from K1ender/dev
e497bba
26 September 2025
- Captures CSS shadows
050365f - Improve counter simulation
4c9e21d - Fix scale, width, height options
8ef48cb - Just run safariWarmup if it is needed
a32846d - Safari, in case of scale, width or height options use png to ensure fidelity
0711a77 - Sanitize container
a6ba396
22 September 2025
- Fix margin collapsing in some cases. See #243
7fe0a3f
20 September 2025
- Modularize counters
024a7f9 - Improve CSS counter() and counters() handling. See #120, see #235
8fb0385 - Feat lineClamp. See #241
4082cd6 - Fix width/height options
7cd2111 - Fix bug that hangs snapDOM on some browsers. See #236
bc3c400 - Fix bug that overrides options.width/heigth. See #241
49fbb63 - Improve webFonts render. See #229
3082a3a - Feat. detect wechat browser. See #223
e7c4723 - Ensure donwload file measure. See #241
eed1995 - Add iframe support
ec59e4b
11 September 2025
- Try fix fallback images
67bedd3 - Two separate mode: filterMode and excludeMode
394e7f4 - Workaround Safari See #231
593ad59 - Try new approach for solve Safari fonts/images decoding
5b77738
9 September 2025
- Fix Safari bug that prevents capture
6a43e59
9 September 2025
- Merge dev branch
#225 - Strip dev comments
e02066b - increase test coverage
0c59fa0 - Update types defs
648f4a9 - Improves mask handling
f3915ea - fix backgroundColor regression
21a6a39
8 September 2025
- Fix cache disabled bug. Closes #221
#221 - Add extra margin when element has transform
6688eee - Feat. handkles css trasnforms and scale rotate new props. Ref #216
d151da1 - Add same-origin iframe support .See #222
f50720f - Fix regression that doesnt reset origial translate
800c427 - Fix duplicated values on textArea
0915f8d - 增强图像处理功能,添加图像加载失败时的后备图像源支持,并记录原始图像尺寸以便于使用。更新类型定义以包含新选项。
011620a - ✨ feat:
e3a4556 - remove iframe limitation
77abf8f - Merge pull request #220 from Jarvis2018/main
adb6455 - Merge pull request #215 from xiaobai-web715/dev
37be327
3 September 2025
- Fix flickering on Safari. Closes #197
#197 - Prevents default svg values overwrite custom ones. Closes #217
#217 - Feature: add placeholders option to disable rendered placeholder for iframes and fallback images. Closes #137
#137 - FIx textarea styles. Closes #212
#212
29 August 2025
- Code refactor, cache improve, options centralized
3bd7182 - Improve performance and cache
8882025 - Enhance font handling
cb1e04a - Improve capture fidelity
e05f027 - fix font fetching
70dd092 - Set compress as default
7e5ab00 - optimice code
df52437 - Core update: increase X3 speed capture compared 1.9.9
94bc57d - Ensure custom fonts are capured
8125689 - Fix first custom font bug on Safari
971d976 - Fix bug that affects overall capture fidelity
35539a5 - update to avoid vitest issues
51ef80d
14 August 2025
- Improves external fonts handling. Closes #139, closes #146, closes #186
#139#146#186 - Handles srcset. Closes #190
#190 - Fix speed regression.
542ed00 - Handles Blob scr
fe27239. Closes#169
10 August 2025
- fix(types): update
preCache#166 - Fix defs & symbols outside captured element and hidden visibility, closes #178. Stabilize layout before cloning, closes #179. Fix inline styles, closes #177
#178#177#179 - Fix icontFont alignment and rendered size. Closes #176
#176 - Ensure skip empty pseudo elements. Closes #168
#168 - Add basic border-image support. Closes #159
#159 - Fix input css styles. Closes #144, closes #147
#144#147
27 July 2025
- Fix input css styles. Closes #144, closes #147
#144#147 - Fix Safari scale. Closes #133
#133 - Fix @font-face. Closes #145
#145 - Fix edge case that generates blank images on Safari. Closes #129
#129 - Improve pseudo elements detection. Closes # 143
539e488 - Remove default backgroundColor on download(). Ref dissussion #142
a875fe3 - Update docs, thanks @kohaiy
e38d67b
20 July 2025
- Add options argument to toBlob function. Thanks @rbbydotdev
#118 - Keep canvas CSS style. Fixes #121.
#121 - Improve: handles local() source font. See #114
c088aa0 - Improve webcomponent clone
a0f37a5 - Perf: unifies cache
fe3a368 - Improve cache handling.
183ae2f - Adjust cache reset
ff33ed3 - Improve regex
1b4d5ad - Add primitive support to css counter. See #120
160bc2e - Fix bug background-color on export formats. See #90
47a34a9 - Fix regression textArea duplication
1759fd0 - Prevent process local ids. See #128
659e862 - Add node version and improve docs. See #123. Thanks @miusuncle
e457bf6
14 July 2025
Fix: add type def for SnapOptions. Thanks @simon1uo #111
- Add
checkbox.indeterminate. Thanks @titoBouzout#104 - Add mask-image CSS detection (closes #106)
#106 - Add slot detection (closes # 97) / Fix textarea content duplication (closes #110)
#110 - Add html-to-image to benchmark. Closes #103
#103
30 June 2025
- fix: encode same uri multiple times
#65 - Add Lucide to icon font detection
#50 - Avoid background-image logic duplication, closes #66
#66 - Feat: sanitize rootElement to avoid CSS layout conflicts. Fixes #56, fixes #24
#56#24 - Fix: canvas style props, closes #63
#63 - Feat: handling @import and optimice cache, closes #61
#61 - Compile .js to es2015, closes #58
#58 - Fix background image handling, closes #57
#57 - Improve inlinePseudoElements() to handle decorative properties, closes #55
#55 - Add ::first-letter detection, closes #52
#52 - test: increases coverage
7ebc871 - Increase test coverage
0c63478 - Improve split multiple backgrounds
0e67a9b - chore: update contributors list
da22404 - chore: update contributors list
ec7c275 - Add check
bf9a888 - Create update-contributors.js
453dff0 - Document width and height options
0f7fb7a - Create update-contributors.yml
b48e334 - Update
7da2892 - Bumped version
f322f51 - Update README.md
99c51a8 - Update update-contributors.js
46a868b - Update update-contributors.js
2a77e4c - chore: update contributors list
020eff8 - Update update-contributors.js
b4cf877 - chore: update contributors list
a2d28d9 - Update doc
7cf19de - Update update-contributors.js
962c7c6 - Update README.md
183de8c - Update README.md
4352ae7 - Update update-contributors.js
7dca4a1 - Update README.md
ebb7f32 - Clean transform RootElement prop
f293e5b - Check if getStyle is iterable
24dfe05 - chore: update contributors list
8ac4aa1 - chore: update contributors list
9987328 - Update README.md
4b52b87
19 June 2025
- Improve inlineBackgroundImages to support multiple background-image values.
#46 - Add @font-face / FontFace() deteccion, closes #43
#43 - update
7c5441e - Add benchmark against html2canvas
f196afe - Add description
bcae4af - Update issue templates
352dba3 - add options.crossOrigin
49f8ac6 - Update issue templates
d832dbd - Create CONTRIBUTING.md
9a7be15 - handle multiple background image in inlineBackgroundImages function
95a5490 - Update issue templates
b69b5a4 - update
57d6b15 - Update index.html
f002bca - Update issue templates
24d478f - Bumped version
d109fd7 - Add files via upload
0aecf4e - update
e444762 - Update index.html
997dab3 - update
0355286 - Prevent erasing non url background
0d626cb - docs: add @jhbae200 as contributor for PR #46
afe3094 - Merge pull request #44 from elliots/support-use-credentials-on-images
005f23e - Update index.html
25d970f - update
ea624c3 - update
1cf93b7 - update
3a547df - update
2d4380b - Update index.html
bedf815 - Update issue templates
48a56fb - Create config.yml
51700c4 - update image
0ec788c
14 June 2025
- fix: double scaled images
#38 - Fix: background img & img base64 in pseudo elements, closes #36
#36 - Feat: captures input values, closes #35
#35 - Improve: Device Pixel Ratio handling, thanks @jswhisperer
1a14f69 - Bumped version
489be08 - Update description
4db784b
9 June 2025
- Fix duplicated font-icon when embedFonts is true, closes #30
#30 - Fix url with encode url, closes #29
#29 - Fix .toCanvas scale
fb47284 - Bumped version
75b917a - Update cdn
37533a2 - add homepage
aa85c5d
4 June 2025
31 May 2025
- feat(embedFonts): also embed icon fonts when embedFonts is true
#18 - Fix expose snapdom and preCache on browser compilation, closes #26
#26 - Improve icon-font conversion
7bac4ee - Fix compress mode
652cfe9 - Bumped version
0cd7973 - Remove some logs
4348b39 - Chore: delete old comments
ff81a40 - Chore: add dry bump script
5c421c7
28 May 2025
- Add typescript declaration, closes #23
#23 - Feat. support scrolling state, closes #20
#20 - Fix bug by removing trim spaces, closes #21
#21 - fix margin on mobile
36297c8 - mobile friendly
42dada8 - Update index.html
1bf3bc1 - Create FUNDING.yml
ddf914c - Bumped version
7a9f3d8 - add ga
6d8a73f - Update index.html
46e4b41 - Update index.html
1a2a04c - Ignore generated screenshots tests
cce8ead - Update index.html
5dd6749 - FIx bug that prevent scale on png format
77a5265 - Update README.md
d8440f3 - update
ffa3a9a - Update README.md
9c79e6e - Update index.html
7585674 - Update index.html
8f4fb95 - Update index.html
eebc2bc
19 May 2025
- format code
146fd95 - new demo gallery
b8b2b6e - Update code documentation
6f933bc - Add benchmarks section
6becbb1 - Update documentation - add precache()
a689566 - Bumped version
50d48c0 - chore
9f76e0c - update
d84d395
18 May 2025
- Fix retina and scale bug, closes #15
#15 - Improve public API, closes #16
#16 - Fix bug to render canvas with precache compress mode, closes #13
#13 - Update to reflect new public API
b6024cb - Update tests and benckmarks
f06a0f8 - Add helper to check Safari
6c9ee04 - Remove preWarm
d3bd582 - Bumped version
fb0855d
14 May 2025
- Bumped version
676b00d - Fix bug on collectUsedTagNames()
d627f18 - update
c0e64d0 - Fix menu options
8e87681
14 May 2025
- Add font example
26c59c8 - Bumped version
0819d89 - update tests
3cd5b70 - Fix capture output format
2afa36a - Update index.html
0345fb1 - Add demo site
88d0faa - Disable user zoom
3813580
14 May 2025
- Update Dev branch
#11 - Delete functions
c5040d9 - improve cache handling
27d7b19 - add some examples
3ce9dd2 - Reorganice and add helpers
c4f4182 - Add tests
455e7f2 - Check if element to capture exists
dfa96f2 - Improve capture logic
79ab1b9 - Update readme
fdc2877 - Add preCache
48bd910 - Optimice
cc638e7 - Bumped version
3b26632 - update
111fdb4 - Add cache Maps
091484c - update
bdbba7a - Update README.md
c1756a9 - Expose preCache
1e96db1 - Chore
38c08c0 - fix url
bebec7f - Update README.md
fb0ab3a - Update README.md
1a76186 - Update README.md
90d18a1
1 May 2025
- chore
2f788af
1 May 2025
- This PR dramatically improves the speed and accuracy of snapDOM. It increases the result size and may produce some long tasks, but it provides a solid foundation to address these side effects in the future.
#6 - Add as draft new default approach - not implemented
6f4ec41 - Add tests
bdd5a7f - Feat: captures icon fonts
7b39e5f - Omit process default styles - temporary
2953196 - update to v.0.9.2
e0179a1 - Add options as Object and allow bgColor on jpg and webp
e5abaa7 - Update commented docs
cfd2272 - Update README.md
fef6751 - update
26ff7ea - Update README.md
3fda999 - Update README.md
8ee616b - Omit delay function - temporary
0f04721 - update unpkg url
13ce66b - Bumped version
9e4f518 - Update README.md
3733476 - Update README.md
00c74b0 - Update README.md
dd2c9c5 - Update README.md
d271cf7 - Update README.md
02bf650
27 April 2025
27 April 2025