npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

html2canvas-pro

v2.5.2

Published

Screenshots with JavaScript. Next generation!

Readme

Why html2canvas-pro?

html2canvas-pro is a fork of niklasvh/html2canvas that includes various fixes and new features. It offers several advantages over the original html2canvas:

Modern CSS support

  • Color functions color() (incl. relative colors), lab(), lch(), oklab(), oklch() — other functions resolve through the browser's computed styles
  • background-clip: text support
  • mix-blend-mode and background-blend-mode support
  • object-fit support for <img/>
  • CSS clip-path support (inset, rect, xywh, circle, ellipse, polygon, path)
  • CSS writing-mode support (horizontal-tb, vertical-rl, vertical-lr)
  • mask-image alpha masks with position/size/repeat (see mask support)
  • backdrop-filter: blur() for frosted-glass captures (see backdrop-filter support)
  • conic-gradient(), repeating-conic-gradient() and repeating-radial-gradient() — complete gradient family
  • text-emphasis (CJK emphasis marks), -webkit-box-reflect, image-set(), border-image-outset / border-image-width
  • accent-color, outline, -webkit-text-fill-color, isolation
  • filter compositing for eligible layers — blur() / drop-shadow() rendered on a dedicated surface with correct layer opacity (see filter support notes)
  • Faithful box-shadow rendering, including inset shadows, blur scaling, and shadows through transformed ancestors
  • image-rendering CSS property plus imageSmoothing / imageSmoothingQuality options for pixel-perfect output
  • Border image, counters & quotes, direction, line-height, transform-origin, and more — see the full feature list

Developer experience

  • Security validation — Built-in input validation (Validator API, XSS/SSRF protection)
  • Performance monitoring — Built-in PerformanceMonitor with per-phase timings
  • Error, progress & cancellation hooks — onError for failed resources, onProgress for pipeline milestones (incl. per-batch image preload progress), AbortSignal cancellation
  • TypeScript — First-class type definitions included
  • Shadow DOM & Web Components — slot assignment, shadow-root cloning, and automatic iframe placement

Performance

  • Deferred (batched, parallel) image preloading
  • LRU caches for CSS parsing and gradient patterns
  • Native canvas filter fast path with verified SVG fallback

Render speed — html2canvas-pro(latest) vs html2canvas 1.4.1, headless Chromium on Apple M4, scale: 1, median of 10 interleaved runs (benchmark script, reproduce with corepack pnpm bench:render):

| Fixture | html2canvas-pro | html2canvas 1.4.1 | | --- | --- | --- | | Simple document (~40 elements) | 80 ms | 87 ms | | Large document (~1200 elements) | 295 ms | 468 ms | | Modern-CSS page (oklch(), conic-gradient(), …) | 166 ms | ✗ cannot render (throws on oklch()) |

On element-heavy pages html2canvas-pro is ~1.6× faster, and it is the only one of the two that can render modern-CSS content at all. Absolute times vary by machine — compare ratios, not milliseconds.

If you found this helpful, don't forget to leave a star 🌟.

Installation

npm install html2canvas-pro
pnpm add html2canvas-pro
yarn add html2canvas-pro

Usage

import html2canvas from 'html2canvas-pro';

To render an element with html2canvas-pro with some (optional) options, simply call html2canvas(element, options);

Basic Example

html2canvas(document.body).then(function(canvas) {
    document.body.appendChild(canvas);
});

Script tag / CDN

A browser bundle is also available (exposes the global window.html2canvas):

<script src="https://cdn.jsdelivr.net/npm/html2canvas-pro/dist/html2canvas-pro.min.js"></script>
<script>
  html2canvas(document.body).then((canvas) => document.body.appendChild(canvas));
</script>

Controlling Output Dimensions

⚠️ Important: By default, the output canvas dimensions are affected by devicePixelRatio.

// If you need exact pixel dimensions (e.g., for a specific file size):
html2canvas(element, {
    width: 1920,
    height: 1080,
    scale: 1  // Set scale to 1 for exact dimensions
}).then(canvas => {
    // Canvas will be exactly 1920×1080 pixels
    const dataURL = canvas.toDataURL('image/png');
});

See the Configuration Guide for more details.

Error Handling & Cancellation

const controller = new AbortController();

html2canvas(element, {
    useCORS: true,
    onError: (error) => {
        // Called when a resource (image, font, …) fails to load.
        // The render continues — this is a notification hook, not an abort.
        console.warn('Resource failed:', error);
    },
    signal: controller.signal // Rejects with an AbortError when aborted
}).then(canvas => {
    document.body.appendChild(canvas);
});

// Cancel an in-progress capture:
controller.abort();

Pixel-Perfect Capture

html2canvas(element, {
    imageSmoothing: false,       // Disable anti-aliasing globally
    scale: 2                     // Upscale without blur
});
// Or per-element via CSS: style="image-rendering: pixelated"

API

The package exports html2canvas (default), plus the following named exports:

| Export | Description | | --- | --- | | html2canvas | Render an element to a <canvas> | | Html2CanvasConfig | Per-call runtime config (CSP nonce, shared cache) | | Validator / createDefaultValidator | Input validation (URLs, proxy allow-list, element checks) | | PerformanceMonitor | Phase-level timing metrics | | Options | The full options type | | ConfigOptions | Per-call runtime config type (CSP nonce, shared cache) | | ValidationResult | Result type returned by the Validator API |

Full type definitions ship with the package — your editor's IntelliSense covers every option. An HTML API reference can be generated locally with corepack pnpm docs:api (TypeDoc).

Documentation

The full documentation site lives at yorickshan.github.io/html2canvas-pro:

  • Getting Started — installation, usage, live demo
  • Configuration — every option with defaults and examples
  • Features — supported CSS properties and values
  • Proxy — cross-origin image handling
  • FAQ — canvas size, tainted canvas, browser limits
  • Architecture — how the rendering pipeline works

Development

The project uses pnpm (the version is pinned via the packageManager field — Corepack handles it automatically). Unit tests require Node.js 24 (jsdom 30).

corepack pnpm install
corepack pnpm build          # tsc + Rolldown bundles (CJS/ESM/UMD)
corepack pnpm unittest       # Vitest unit tests
corepack pnpm test           # lint + unit tests + browser (Karma) tests
corepack pnpm docs:dev       # VitePress dev server
corepack pnpm docs:api       # Generate the TypeDoc API reference

See CONTRIBUTING.md for the full guide, including how to add a new CSS property.

Contribution

If you'd like to add a feature, feel free to submit a PR.

Interested in becoming a maintainer? Open an issue or reach out to @yorickshan.

License

MIT