diff --git a/IHaskell/Display/Diagrams.hs b/IHaskell/Display/Diagrams.hs
--- a/IHaskell/Display/Diagrams.hs
+++ b/IHaskell/Display/Diagrams.hs
@@ -1,24 +1,26 @@
-{-# LANGUAGE NoImplicitPrelude, TypeSynonymInstances, FlexibleInstances  #-}
-module IHaskell.Display.Diagrams (diagram) where
+{-# LANGUAGE NoImplicitPrelude, TypeSynonymInstances, FlexibleInstances #-}
 
-import ClassyPrelude
+module IHaskell.Display.Diagrams (diagram, animation) where
 
-import System.Directory
+import           ClassyPrelude
+
+import           System.Directory
 import qualified Data.ByteString.Char8 as Char
-import System.IO.Unsafe
+import           System.IO.Unsafe
 
-import Diagrams.Prelude
-import Diagrams.Backend.Cairo
+import           Diagrams.Prelude
+import           Diagrams.Backend.Cairo
 
-import IHaskell.Display
+import           IHaskell.Display
+import           IHaskell.Display.Diagrams.Animation
 
-instance IHaskellDisplay (Diagram Cairo R2) where
+instance IHaskellDisplay (QDiagram Cairo V2 Double Any) where
   display renderable = do
     png <- diagramData renderable PNG
     svg <- diagramData renderable SVG
     return $ Display [png, svg]
 
-diagramData :: Diagram Cairo R2 -> OutputType -> IO DisplayData
+diagramData :: Diagram Cairo -> OutputType -> IO DisplayData
 diagramData renderable format = do
   switchToTmpDir
 
@@ -31,19 +33,21 @@
 
   -- Write the image.
   let filename = ".ihaskell-diagram." ++ extension format
-  renderCairo filename (Height imgHeight) renderable
+  renderCairo filename (mkSizeSpec2D (Just imgWidth) (Just imgHeight)) renderable
 
   -- Convert to base64.
-  imgData <- readFile $ fpFromString filename
-  let value = case format of
-        PNG -> png (floor imgWidth) (floor imgHeight) $ base64 imgData
-        SVG -> svg $ Char.unpack imgData
+  imgData <- readFile filename
+  let value =
+        case format of
+          PNG -> png (floor imgWidth) (floor imgHeight) $ base64 imgData
+          SVG -> svg $ Char.unpack imgData
 
   return value
+
   where
     extension SVG = "svg"
     extension PNG = "png"
 
 -- Rendering hint.
-diagram :: Diagram Cairo R2 -> Diagram Cairo R2
+diagram :: Diagram Cairo -> Diagram Cairo
 diagram = id
diff --git a/IHaskell/Display/Diagrams/Animation.hs b/IHaskell/Display/Diagrams/Animation.hs
new file mode 100644
--- /dev/null
+++ b/IHaskell/Display/Diagrams/Animation.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE NoImplicitPrelude, TypeSynonymInstances, FlexibleInstances #-}
+
+module IHaskell.Display.Diagrams.Animation (animation) where
+
+import           ClassyPrelude hiding (filename)
+
+import           Diagrams.Prelude
+import           Diagrams.Backend.Cairo
+import           Diagrams.Backend.Cairo.CmdLine (GifOpts(..))
+import           Diagrams.Backend.CmdLine (DiagramOpts(..), mainRender)
+
+import           IHaskell.Display
+
+instance IHaskellDisplay (QAnimation Cairo V2 Double Any) where
+  display renderable = do
+    gif <- animationData renderable
+    return $ Display [html $ "<img src=\"data:image/gif;base64,"
+                             ++ gif ++ "\" />"]
+
+animationData :: Animation Cairo V2 Double -> IO String
+animationData renderable = do
+  switchToTmpDir
+
+  -- Generate the frames
+  let fps = 30
+      animAdjusted = animEnvelope' fps renderable
+      frames = simulate fps animAdjusted
+      timediff = 100 `div` ceiling fps :: Int
+      frameSet = map (\x -> (x # bg white, timediff)) frames
+
+  -- Compute width and height.
+  let shape = activeStart animAdjusted
+      w = width shape
+      h = height shape
+      aspect = w / h
+      imgHeight = 300
+      imgWidth = aspect * imgHeight
+
+  -- Write the image.
+  let filename = ".ihaskell-diagram.gif"
+      diagOpts = DiagramOpts
+        { _width = Just . ceiling $ imgWidth
+        , _height = Just . ceiling $ imgHeight
+        , _output = filename
+        }
+      gifOpts = GifOpts { _dither = True, _noLooping = False, _loopRepeat = Nothing }
+  mainRender (diagOpts, gifOpts) frameSet
+
+  -- Convert to ascii represented base64 encoding
+  imgData <- readFile filename
+  return . unpack . base64 $ imgData
+
+-- Rendering hint.
+animation :: Animation Cairo V2 Double -> Animation Cairo V2 Double
+animation = id
diff --git a/ihaskell-diagrams.cabal b/ihaskell-diagrams.cabal
--- a/ihaskell-diagrams.cabal
+++ b/ihaskell-diagrams.cabal
@@ -7,7 +7,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.2.0.0
+version:             0.2.2.0
 
 -- A short (one-line) description of the package.
 synopsis:            IHaskell display instances for diagram types
@@ -51,23 +51,26 @@
   exposed-modules:     IHaskell.Display.Diagrams
   
   -- Modules included in this library but not exported.
-  -- other-modules:       
+  other-modules:       IHaskell.Display.Diagrams.Animation
   
   -- Language extensions.
   default-extensions: DoAndIfThenElse
               OverloadedStrings
              
   -- Other library packages from which modules are imported.
-  build-depends:       base ==4.6.* || ==4.7.*,
-                       classy-prelude >=0.6,
+  build-depends:       base >=4.6 && <4.9,
+                       classy-prelude >=0.10.5,
                        bytestring,
                        directory,
                        -- Use diagrams wrapper package to ensure all same versions of subpackages
-                       diagrams==1.2.*,
+                       diagrams >= 1.3,
                        diagrams-lib,
                        diagrams-cairo,
-                       ihaskell >= 0.5
-  
+                       ihaskell >= 0.6.2,
+
+                       -- The active package, used to represent animations
+                       active >= 0.2
+
   -- Directories containing source files.
   -- hs-source-dirs:      
   
