resvg
resvg is an SVG rendering library.
Purpose
resvg
can be used as a Rust library, a C library and as a CLI application
to render SVG files based on a
static
SVG Full 1.1 subset.
The core idea is to make a fast, small, portable SVG library designed for edge-cases.
Right now, a resvg
CLI application is less than 3MiB and doesn't require any external dependencies.
Another major difference from other SVG rendering libraries is that resvg
does a lot
of preprocessing before rendering. It converts an input SVG into a simplified one
called Micro SVG and only then it begins rendering.
So it's very easy to implement a new rendering backend.
But we officially support only one.
And you can also access Micro SVG as XML directly via the usvg tool.
SVG support
resvg
is aiming to support only the static
SVG subset; e.g. no a
, script
, view
or cursor
elements, no events and no animations.
SVG Tiny 1.2 and SVG 2.0 are not supported and not planned.
Results of the resvg test suite:
You can find a complete table of supported features here. It also includes alternative libraries.
Performance
Comparing performance between different SVG rendering libraries is like comparing
apples and oranges. Everyone has a very different set of supported features,
implementation languages, build flags, etc.
But since resvg
is written in Rust and uses tiny-skia for rendering - it's pretty fast.
Building
Despite being a Rust library, resvg
still depends on some C++ code,
therefore you will need a C++ compiler to build it. But in most cases the compilation
process should be as easy as:
cargo build --release
which will produce binaries that doesn't require any external dependencies.
Safety
Since resvg
depends on C++ libraries, it's inherently unsafe in Rust terms.
Despite of that, most of the dependencies are actually fully safe.
The main exceptions are tiny-skia and rustybuzz bindings, and files memory mapping.
License
resvg
project is licensed under the MPLv2.0.