diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -6,12 +6,16 @@
 project adheres to the [Haskell Package Versioning
 Policy (PVP)](https://pvp.haskell.org)
 
-## 1.1.3.1 -- 2020-01-04
+## 1.1.3.2 -- 2021-01-14
 
+ * Add flag for disabling the HGeometry dependency.
+
+## 1.1.3.1 -- 2021-01-04
+
  * Fixed performance issue on Windows.
  * Fixed live viewer with Firefox.
 
-## 1.1.3.0 -- 2020-01-04
+## 1.1.3.0 -- 2021-01-04
 
 ## Added
  * Reanimate.reanimateLive
diff --git a/reanimate.cabal b/reanimate.cabal
--- a/reanimate.cabal
+++ b/reanimate.cabal
@@ -3,7 +3,7 @@
 --  see http://haskell.org/cabal/users-guide/
 
 name:                reanimate
-version:             1.1.3.1
+version:             1.1.3.2
 -- synopsis:
 -- description:
 license:             PublicDomain
@@ -37,6 +37,13 @@
     Type:      git
     Location:  git://github.com/lemmih/reanimate.git
 
+flag no-hgeometry
+  description:
+    Disable all features that depend on hgeometry. Should only
+    be used when developing new hgeometry algorithms.
+  default: False
+  manual: True
+
 library
   hs-source-dirs:     src
   if os(windows)
@@ -105,6 +112,12 @@
                       Reanimate.Scene.Object
                       Detach
   autogen-modules:    Paths_reanimate
+  if flag(no-hgeometry)
+    cpp-options: -DNO_HGEOMETRY
+  else
+    build-depends:
+      hgeometry               >=0.11.0.0,
+      hgeometry-combinatorial >=0.11.0.0
   build-depends:
     base                 >=4.10 && <5,
     JuicyPixels          >=3.3.3,
@@ -126,8 +139,6 @@
     fsnotify             >=0.3.0.1,
     geojson              >=3.0.4,
     hashable             >=1.3.0.0,
-    hgeometry            >=0.11.0.0,
-    hgeometry-combinatorial >=0.11.0.0,
     lens                 >=4.16.1,
     linear               >=1.20.8,
     matrix               >=0.3.6.1,
diff --git a/src/Reanimate/Math/Triangulate.hs b/src/Reanimate/Math/Triangulate.hs
--- a/src/Reanimate/Math/Triangulate.hs
+++ b/src/Reanimate/Math/Triangulate.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE DataKinds           #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE CPP #-}
 {-# OPTIONS_HADDOCK hide #-}
 module Reanimate.Math.Triangulate
   ( Triangulation
@@ -11,6 +12,32 @@
   )
 where
 
+#if NO_HGEOMETRY
+
+import qualified Data.Vector                                          as V
+import           Control.Monad.ST
+import           Reanimate.Math.Common
+
+type Triangulation = V.Vector [Int]
+
+edgesToTriangulation :: Int -> [(Int, Int)] -> Triangulation
+edgesToTriangulation = error "no hgeometry"
+
+edgesToTriangulationM :: Int -> [(Int, Int)] -> ST s (V.MVector s [Int])
+edgesToTriangulationM = error "no hgeometry"
+
+trianglesToTriangulation :: Int -> V.Vector (Int, Int, Int) -> Triangulation
+trianglesToTriangulation = error "no hgeometry"
+
+trianglesToTriangulationM
+  :: Int -> V.Vector (Int, Int, Int) -> ST s (V.MVector s [Int])
+trianglesToTriangulationM = error "no hgeometry"
+
+triangulate :: forall a. (Fractional a, Ord a) => Ring a -> Triangulation
+triangulate = error "no hgeometry"
+
+#else
+
 import           Algorithms.Geometry.PolygonTriangulation.Triangulate (triangulate')
 import           Algorithms.Geometry.PolygonTriangulation.Types
 import           Control.Lens
@@ -83,3 +110,5 @@
       [ Point2 x y :+ n
       | (n,V2 x y) <- zip [0..] (V.toList (ringUnpack r)) ]
     -- ringUnpack
+
+#endif
diff --git a/src/Reanimate/PolyShape.hs b/src/Reanimate/PolyShape.hs
--- a/src/Reanimate/PolyShape.hs
+++ b/src/Reanimate/PolyShape.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-|
 Module      : Reanimate.PolyShape
 Copyright   : Written by David Himmelstrup
@@ -40,15 +41,8 @@
   , plGroupTouching
   ) where
 
-import           Algorithms.Geometry.PolygonTriangulation.Triangulate (triangulate')
 import           Control.Lens                                         ((&), (.~), (^.))
-import           Data.Ext
-import           Data.Geometry.PlanarSubdivision                      (PolygonFaceData (..))
-import qualified Data.Geometry.Point                                  as Geo
-import qualified Data.Geometry.Polygon                                as Geo
 import           Data.List                                            (nub, partition, sortOn)
-import qualified Data.PlaneGraph                                      as Geo
-import           Data.Proxy                                           (Proxy (Proxy))
 import qualified Data.Vector                                          as V
 import           Geom2D.CubicBezier.Linear                            (ClosedPath (..),
                                                                        CubicBezier (..),
@@ -72,6 +66,17 @@
                                                                        pIsCCW)
 import           Reanimate.Svg
 
+#if !defined(NO_HGEOMETRY)
+import           Algorithms.Geometry.PolygonTriangulation.Triangulate (triangulate')
+
+import           Data.Ext
+import           Data.Geometry.PlanarSubdivision                      (PolygonFaceData (..))
+import qualified Data.Geometry.Point                                  as Geo
+import qualified Data.Geometry.Polygon                                as Geo
+import qualified Data.PlaneGraph                                      as Geo
+import           Data.Proxy                                           (Proxy (Proxy))
+#endif
+
 -- | Shape drawn by continuous line. May have overlap, may be convex.
 newtype PolyShape = PolyShape { unPolyShape :: ClosedPath Double }
   deriving (Show)
@@ -201,6 +206,9 @@
 
 -- | Split polygon into smaller, convex polygons.
 decomposePolygon :: [RPoint] -> [[RPoint]]
+#if defined(NO_HGEOMETRY)
+decomposePolygon = error "no hgeometry"
+#else
 decomposePolygon poly =
   [ [ V2 x y
     | v <- V.toList (Geo.boundaryVertices f pg)
@@ -212,6 +220,7 @@
     p = Geo.fromPoints $
       [ Geo.Point2 x y :+ ()
       | V2 x y <- poly ]
+#endif
 
 plPolygonify :: Double -> PolyShape -> [RPoint]
 plPolygonify tol shape =
