Rasterific logo


Rasterific is a Haskell rasterization engine (a vectorial renderer) implemented on top of JuicyPixels. Rasterific bases its text rendering on FontyFruity.

Main capability

  • Draw vector graphics to an image.
  • Export graphics to PDF (since 0.6).


The renderer design is based on the Nile / Gezira renderer from the STEP project from the VPRI institute. The interesting thing about this renderer is the conciseness of it’s implementation, providing antialiased rendering in the way.


Change log

v0.7.4.3 May 2019

* Fix round cap on degenerate cubic bezier (with null normal)

v0.7.4.2 December 2018

* Refactoring: minor enhancement in the PathWalker
(newtype instead of single constructor data) (thanks to yairchu)
* Fix: PDF rendering didn't produce valid pdf in some cases,
the XRef table wasn't sorted by ID (thanks to robx)

v0.7.4.1 October 2018

* Fix: GHC 8.6 compat

v0.7.4 August 2018

* Fix: Rendering bug with self-closing cubic bezier curve
* Fix: dashed stroking of tiny features
* Adding: multiple page pdf rendering (jprider63)


* Fix: PDF output with stroke of width 0 (thanks to robx)


* Fix: adding Semigroup instances for GHC 8.4


* Fix: sampling empty image


* Fix: handling infinity/NaN in geometry helpers
* Enhancement: better grandient mesh as texture handling.


* Addition: arc path helper
* Fix: Composition of clip path with transformation.


* Addition: Gradient Mesh!

v0.6.1.1 May 2016

* Fix: GHC 8.0 bound fix

v0.6.1 May 2015

* Fix: Correcting bytestring lower bounds

v0.6 May 2015

* Adding: repeating background pattern texture.
* Added: PDF output without images (for now)

v0.5.2.1 April 2015

* Fixed: non-composability of cached elements
* Fixed: Border size when drawing images was twice too large.

v0.5.2 April 2015

* Enhancement: Added a withGroupOpacity to render elements with
a global opacity.

v0.5.1 March 2015

* Enhancement: Generalizing geometry description, with automatic
conversion, reducing the need of type constructor from Primitive,
and directly filling Path.

v0.5.0.3 February 2015

* Fix: hackage documentation

v0.5.0.2 February 2015
* Removing test-suite as it's dependent of some repository-local files

v0.5.0.1 February 2015
* Fix: adding missing Arbitrary file in the distribution.

v0.5 February 2015

* Breaking Change: Font size is now a newtype in FontyFruity,
propagating the changes.
* Allowing to specify DPI at the top level of the rendering
* Adding: an helper function to retrieve the distance to the
* Changed: font size switched to float.

v0.4.2 February 2015
* Fix: Cubic bezier clipping

v0.4.1 January 2015
* Fix: GHC 7.10 compilation
* Adding: Various lens to access some primitive informations.

v0.4 December 2014

* Breaking change: Changed the original position scheme for
text, allowing to specify baseline or upper left corner

* Tried: Fast forward differencing for cubic bezier, not worth
the hassle
* Enhancement: Further optimized decomposition of all primitives,
less alocated memory.
* Enhancement: After optimizing pixel writing, optimized pixel
reading, yielding non-negligeable speed improvements.
* Added: an "immediate" module to avoid constructing
a scene tree.
* Enhancement: Allowing both IO & (ST s) as drawing monads, enabling
interleaved drawing with io operations.
* Added: a "withPathOrientation" function to orient primitives
on a path (allow to draw curved text)
* Added: toNewXBase transformation to create a new basis given
a X axis vector.
* Added: a PathWalker module, to give access to the lower level
path orientation facility.
* Added: some GHC rules for transformations
* Added: a new text function: 'printTextRanges' to allow
easier complex text rendering

v0.3 June 2014

* Enhancement: Switching main free monad type to the church encoded one.
* Enhancement: Optimized the bezier decomposition, strictness annotations
made wonders. May require forward differencing in the future.
* Enhancement: Implementing specific decomposition for lines.
* Enhancement: Reworked texture system, now allowing some specialized
filler (hoping faster computation). For now only the
solid color has been optimized, and all the transformed
* Enhancement: Fixing space leak in combineEdgeSamples, avoiding
many allocations.
* Adding: bounding box calculation facility.
* Adding: Exposing outline creation capability
* Adding: a skewX & skewY transformation function.
* Fixing: some numerical stability with the mitter join.

v0.2.1 April 2014

* Fixing: transparency in gradients.
* Fixing: alpha composition on top of translucent

v0.2 April 2014

* Adding: an ellipse helper.
* Adding: a polyline helper.
* Adding: a polygon helper.
* Adding: monoid instance for Drawing.
* Fixing: some stroking bug with cubic bezier curve.
* Fixing: some documentation snippets.
* Adding: a rounded rectangle helper.
* Added: a even-odd filling rule.
* Added: an offset for dashed stroking.
* Added: a transformation module.
* Change: Changed the Transformable typeclass, splitted
it in two.
* Added: a dumping function for the constructed
* Adding: an image texture with bilinear filtering.
* Adding: an image helper.
* Enhancement: Some modest performance gain.

v0.1 February 2014

* Initial version.

comments powered byDisqus