resvg-js
resvg-js is a high-performance SVG renderer, powered by Rust based resvg and napi-rs.
- Fast, safe and zero dependencies!
- No need for node-gyp and postinstall, the
.node
file has been compiled for you. - Cross-platform support, including Apple M1.
- Support system fonts and custom fonts in SVG text.
Installation
npm i @resvg/resvg-js
cnpm i @resvg/resvg-js
pnpm i @resvg/resvg-js
Example
This example will load Source Han Serif, and then render the SVG to PNG.
node example/index.js
Loaded 1 font faces in 0ms.
Font './example/SourceHanSerifCN-Light-subset.ttf':0 found in 0.006ms.
✨ Done in 55.65491008758545 ms
SVG | PNG |
---|---|
Benchmark
Running "resize width" suite...
resvg-js(Rust):
12 ops/s, ±22.66% | fastest 🚀
sharp:
9 ops/s, ±64.52% | 25% slower
skr-canvas(Rust):
7 ops/s, ±3.72% | 41.67% slower
svg2img(canvg and node-canvas):
6 ops/s, ±16.94% | slowest, 50% slower
Support matrix
Test in local
- Install latest
Rust
- Install
Node.js@10+
which fully supportedNode-API
npm i
npm build
npm test
Roadmap & Contributing
I will consider implementing the following features, if you happen to be interested, please feel free to discuss with me or submit a PR.
- Support for getting SVG Bounding box
- Output usvg-simplified SVG string
- Support for generating more lossless bitmap formats, e.g. avif, webp, JPEG XL
- Support async API (dependent on napi-rs PR #760)
- Support WebAssembly(.wasm)
Release package
We use GitHub actions to automatically publish npm packages.
# 1.0.0 => 1.0.1
npm version patch
# or 1.0.0 => 1.1.0
npm version minor
git push --follow-tags