35 releases

0.4.0 Apr 1, 2024
0.3.12 Mar 31, 2024
0.3.7 Oct 19, 2023
0.3.4 Jul 18, 2023
0.1.2 Apr 30, 2021

#29 in Rendering

Download history 162/week @ 2024-02-23 59/week @ 2024-03-01 14/week @ 2024-03-08 377/week @ 2024-03-15 60/week @ 2024-03-22 561/week @ 2024-03-29 37/week @ 2024-04-05

1,036 downloads per month
Used in surf_n_term

MIT license

7.5K SLoC


Build Status MIT License Crate API Docs

This is a fully functional 2D rasterizer and SVG path parser.


  • parsing SVG path format
  • rendering elliptic arc, lines, cubic/quadratic bezier curves
  • curve offsetting
  • linear and radial gradients

Usage example

There is a very simple binary in examples folder that can be used to render SVG path

$ cargo run --release --example rasterize -- data/squirrel.path -w 512 -o squirrel.bmp

This will produce:



Simple 2D library that support SVG path parsing/generation/manipulation and rasterization.

Main features:

  • SVG path parsing and generation
  • Anti-aliased rendering
  • Path offsetting Path::stroke
  • Linear and Radial gradients with GradLinear and GradRadial
  • Serde integration if serde feature is set (enabled by default)


Main types are:

  • Path - Represents the same concept as an SVG path, the easiest way to construct it is with Path::builder or it can be parsed from SVG path with str::parse. Path can be stroked with Path::stroke to generated new path that represents an outline.
  • Scene - Represents an image that has not been rendered yet, multiple scenes can be composed to construct more complex scene. This is probably the simplest way to render something useful. See examples/simple.rs for a simple example. It can also be (de)serialized see data/firefox.scene for an example.
  • Paint - Color/Gradient that can be used to fill a path.
  • Image - 2D matrix that can hold and image and used as a target for rendering. Image can also be written into a file with Image::write_bmp or to PNG with Image::write_png if png feature is enabled.


~39K SLoC