diagrams-cairo: Cairo backend for diagrams drawing EDSL

[ bsd3, graphics, library ] [ Propose Tags ]

A full-featured backend for rendering diagrams using the cairo rendering engine.

This ultimately depends on a C library, via Haskell's FFI, and can be difficult to install on some platforms. If you are just looking for a quick way to visualize diagrams, try the diagrams-svg backend; if you want raster output like PNG, try the diagrams-rasterific backend; if you want to embed diagrams in LaTeX documents, try diagrams-pgf.

[Skip to Readme]


[Last Documentation]

  • Diagrams
    • Backend
      • Diagrams.Backend.Cairo
        • Diagrams.Backend.Cairo.CmdLine
        • Diagrams.Backend.Cairo.Internal
        • Diagrams.Backend.Cairo.List
        • Diagrams.Backend.Cairo.Ptr
        • Diagrams.Backend.Cairo.Text


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1, 0.1.1, 0.1.2, 0.2, 0.3, 0.4, 0.5,,, 0.6, 0.7, 1.0, 1.0.1,,, 1.1,,, 1.2,,,,,,,, 1.3,,,,,,, 1.3.1,,, 1.4, 1.4.1,, 1.4.2,
Change log CHANGELOG.md
Dependencies array (>=0.4.0 && <0.6), base (>=4.2 && <4.20), bytestring (>=0.9 && <0.13), cairo (>=0.12.4 && <0.14), colour, containers (>=0.3 && <0.7), data-default-class (>=0.0.1 && <0.2), diagrams-core (>=1.3 && <1.6), diagrams-lib (>=1.3 && <1.5), filepath, hashable (>=1.1 && <1.5), JuicyPixels (>= && <3.4), lens (>=3.8 && <5.3), mtl (>=2.0 && <2.4), optparse-applicative (>=0.13 && <0.19), pango (>=0.12.5 && <0.14), split (>=0.1.2 && <0.3), statestack (>=0.2 && <0.4), transformers (>=0.3 && <0.7), unix (>=2.4 && <2.9), vector (>=0.10.0 && <0.14) [details]
License BSD-3-Clause
Author Brent Yorgey
Maintainer diagrams-discuss@googlegroups.com
Revised Revision 2 made by BrentYorgey at 2024-02-13T20:03:41Z
Category Graphics
Home page https://diagrams.github.io
Bug tracker http://github.com/diagrams/diagrams-cairo/issues
Source repo head: git clone http://github.com/diagrams/diagrams-cairo.git
Uploaded by BrentYorgey at 2023-07-10T14:55:34Z
Distributions Debian:, LTSHaskell:, NixOS:, Stackage:
Reverse Dependencies 25 direct, 21 indirect [details]
Downloads 39937 total (103 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2023-07-10 [all 2 reports]

Readme for diagrams-cairo-

[back to package description]

Build Status

diagrams-cairo is a rendering backend for diagrams, a powerful, flexible, declarative domain-specific language for creating vector graphics, using the Haskell programming language.

diagrams-cairo is implemented using the cairo rendering engine and is a fully-featured, officially supported backend for diagrams.


cabal update && cabal install gtk2hs-buildtools diagrams-cairo

Basic usage

A simple example that uses diagrams-cairo to draw a blue circle:

{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE FlexibleContexts          #-}
{-# LANGUAGE TypeFamilies              #-}

import Diagrams.Prelude
import Diagrams.Backend.Cairo.CmdLine

d :: Diagram B
d = circle 1 # fc blue

main = mainWith (pad 1.1 d)

Save this to file named Circle.hs and compile it:

ghc --make Circle.hs

This will generate an executable which, when run, outputs a blue circle to some file. Run the executable with the --help option to find out more about how to call it.

$ ./Circle --help

Usage: ./Circle [-w|--width WIDTH] [-h|--height HEIGHT] [-o|--output OUTPUT]
                [--loop] [-s|--src ARG] [-i|--interval INTERVAL]
  Command-line diagram generation.

Available options:
  -?,--help                Show this help text
  -w,--width WIDTH         Desired WIDTH of the output image
  -h,--height HEIGHT       Desired HEIGHT of the output image
  -o,--output OUTPUT       OUTPUT file
  -l,--loop                Run in a self-recompiling loop
  -s,--src ARG             Source file to watch
  -i,--interval INTERVAL   When running in a loop, check for changes every INTERVAL seconds.
ommand-line diagram generation.

The output type will be automatically determined from the file extension. Currently PNG, PDF, PS, and SVG are supported.

$ ./Circle -o circle.png -w 400

The command above generates a PNG file with a width of 400px.

Advanced usage

Instead of just creating a standalone executable, the cairo backend can also be called from within a larger program. For more information, see the Diagram.Backend.Cairo module.