diff --git a/example/Example.hs b/example/Example.hs
--- a/example/Example.hs
+++ b/example/Example.hs
@@ -14,7 +14,6 @@
 import qualified Data.Vector as V
 import           Graphics.GL.Core32
 import           Graphics.UI.GLFW
-import           Linear.V4
 import           NanoVG as NVG
 import           NanoVG.Internal.Text as Internal
 import           Prelude hiding (init)
diff --git a/nanovg.cabal b/nanovg.cabal
--- a/nanovg.cabal
+++ b/nanovg.cabal
@@ -1,5 +1,5 @@
 name:                nanovg
-version:             0.3.0.0
+version:             0.4.0.0
 synopsis:            Haskell bindings for nanovg
 description:         Raw bindings to the OpenGL vector graphics library NanoVG
 homepage:            https://github.com/cocreature/nanovg-hs
@@ -24,23 +24,23 @@
 library
   exposed-modules:     NanoVG
                        NanoVG.Internal
+                       NanoVG.Internal.Color
                        NanoVG.Internal.Context
                        NanoVG.Internal.FFIHelpers
-                       NanoVG.Internal.Text
-                       NanoVG.Internal.Types
-                       NanoVG.Internal.Color
-                       NanoVG.Internal.State
-                       NanoVG.Internal.Style
+                       NanoVG.Internal.FixedVector
+                       NanoVG.Internal.GL3
+                       NanoVG.Internal.Image
                        NanoVG.Internal.Paint
-                       NanoVG.Internal.Transformation
                        NanoVG.Internal.Path
                        NanoVG.Internal.Scissor
-                       NanoVG.Internal.Image
-                       NanoVG.Internal.GL3
+                       NanoVG.Internal.State
+                       NanoVG.Internal.Style
+                       NanoVG.Internal.Text
+                       NanoVG.Internal.Transformation
+                       NanoVG.Internal.Types
   build-depends:       base >=4.8 && <5.0
                      , bytestring >= 0.10 && < 0.11
                      , containers >= 0.5 && < 0.6
-                     , linear >= 1.20 && < 1.21
                      , text >= 1.2 && < 1.3
                      , vector >= 0.11 && < 0.12
   hs-source-dirs:      src
@@ -66,7 +66,6 @@
                       , containers
                       , gl
                       , GLFW-b
-                      , linear
                       , monad-loops
                       , nanovg
                       , text
@@ -87,7 +86,6 @@
                     , containers
                     , hspec
                     , inline-c
-                    , linear
                     , nanovg
                     , QuickCheck
   default-language:   Haskell2010
diff --git a/src/NanoVG.hs b/src/NanoVG.hs
--- a/src/NanoVG.hs
+++ b/src/NanoVG.hs
@@ -120,6 +120,11 @@
   , deleteGL3
   , createImageFromHandleGL3
   , imageHandleGL3
+  -- * Vector types
+  , V2(..)
+  , V3(..)
+  , V4(..)
+  , M23
   ) where
 
 import           Control.Monad
diff --git a/src/NanoVG/Internal.chs b/src/NanoVG/Internal.chs
--- a/src/NanoVG/Internal.chs
+++ b/src/NanoVG/Internal.chs
@@ -89,20 +89,26 @@
   , circle
   , fill
   , stroke
+  -- * Vector types
+  , V2(..)
+  , V3(..)
+  , V4(..)
+  , M23
   ) where
 
-import           Foreign.C.Types
+import Foreign.C.Types
 
-import           NanoVG.Internal.Color
-import           NanoVG.Internal.Context
-import           NanoVG.Internal.Paint
-import           NanoVG.Internal.Path
-import           NanoVG.Internal.Scissor
-import           NanoVG.Internal.Image
-import           NanoVG.Internal.State
-import           NanoVG.Internal.Style
-import           NanoVG.Internal.Transformation
-import           NanoVG.Internal.Types
+import NanoVG.Internal.Color
+import NanoVG.Internal.Context
+import NanoVG.Internal.FixedVector
+import NanoVG.Internal.Image
+import NanoVG.Internal.Paint
+import NanoVG.Internal.Path
+import NanoVG.Internal.Scissor
+import NanoVG.Internal.State
+import NanoVG.Internal.Style
+import NanoVG.Internal.Transformation
+import NanoVG.Internal.Types
 
 {#pointer *NVGcontext as Context newtype nocode#}
 
diff --git a/src/NanoVG/Internal/FixedVector.hs b/src/NanoVG/Internal/FixedVector.hs
new file mode 100644
--- /dev/null
+++ b/src/NanoVG/Internal/FixedVector.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable #-}
+module NanoVG.Internal.FixedVector where
+
+-- | Vector of 2 strict elements
+data V2 a =
+  V2 !a
+     !a
+  deriving (Show,Read,Eq,Ord,Functor,Foldable,Traversable)
+
+-- | Vector of 3 strict elements
+data V3 a =
+  V3 !a
+     !a
+     !a
+  deriving (Show,Read,Eq,Ord,Functor,Foldable,Traversable)
+
+-- | Vector of 4 strict elements
+data V4 a =
+  V4 !a
+     !a
+     !a
+     !a
+  deriving (Show,Read,Eq,Ord,Functor,Foldable,Traversable)
+
+-- | Type synonym for 2x3 matrices
+type M23 a = V2 (V3 a)
diff --git a/src/NanoVG/Internal/Paint.chs b/src/NanoVG/Internal/Paint.chs
--- a/src/NanoVG/Internal/Paint.chs
+++ b/src/NanoVG/Internal/Paint.chs
@@ -6,12 +6,11 @@
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
-import Linear.V2
-
 import NanoVG.Internal.Color
 import NanoVG.Internal.Context
-import NanoVG.Internal.Types
+import NanoVG.Internal.FixedVector
 import NanoVG.Internal.Transformation
+import NanoVG.Internal.Types
 
 #include "nanovg.h"
 #include "nanovg_wrapper.h"
diff --git a/src/NanoVG/Internal/Text.chs b/src/NanoVG/Internal/Text.chs
--- a/src/NanoVG/Internal/Text.chs
+++ b/src/NanoVG/Internal/Text.chs
@@ -2,19 +2,18 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 module NanoVG.Internal.Text where
 
-import qualified Data.Set as S
 import           Data.ByteString hiding (null)
+import qualified Data.Set as S
 import qualified Data.Text as T
 import           Foreign.C.Types
 import           Foreign.Marshal.Alloc
 import           Foreign.Ptr
 import           Foreign.Storable
-import           Linear.V4
-import           Prelude hiding (null)
-
-import           NanoVG.Internal.FFIHelpers
 import           NanoVG.Internal.Context
+import           NanoVG.Internal.FFIHelpers
+import           NanoVG.Internal.FixedVector
 import           NanoVG.Internal.Types
+import           Prelude hiding (null)
 
 #include "nanovg.h"
 
diff --git a/src/NanoVG/Internal/Transformation.chs b/src/NanoVG/Internal/Transformation.chs
--- a/src/NanoVG/Internal/Transformation.chs
+++ b/src/NanoVG/Internal/Transformation.chs
@@ -6,11 +6,8 @@
 import Foreign.Marshal.Utils
 import Foreign.Ptr
 import Foreign.Storable
-import Linear.Matrix
-import Linear.V2
-import Linear.V3
-
 import NanoVG.Internal.Context
+import NanoVG.Internal.FixedVector
 
 #include "nanovg.h"
 
diff --git a/test/NanoVGSpec.hs b/test/NanoVGSpec.hs
--- a/test/NanoVGSpec.hs
+++ b/test/NanoVGSpec.hs
@@ -17,9 +17,6 @@
 import Test.Hspec
 import NanoVG
 import Test.QuickCheck
-import           Linear.V2
-import           Linear.V3
-import Linear.V4
 
 C.context (C.baseCtx <> nanoVGCtx)
 C.include "nanovg.h"
