#2d #rendering


Simple and small 2D rendering library

24 releases

0.3.2 Aug 30, 2022
0.2.9 Jul 28, 2022
0.1.10 Feb 28, 2022
0.1.8 Dec 22, 2021
0.1.2 Apr 30, 2021

#27 in Rendering

Download history 5/week @ 2022-12-02 8/week @ 2022-12-09 27/week @ 2022-12-16 7/week @ 2022-12-23 3/week @ 2022-12-30 5/week @ 2023-01-06 6/week @ 2023-01-13 44/week @ 2023-01-20 15/week @ 2023-01-27 128/week @ 2023-02-03 98/week @ 2023-02-10 103/week @ 2023-02-17 58/week @ 2023-02-24 7/week @ 2023-03-03 3/week @ 2023-03-10 6/week @ 2023-03-17

75 downloads per month
Used in surf_n_term

MIT license



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.


~43K SLoC