diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,15 @@
 Brick changelog
 ---------------
 
+0.6
+---
+
+API changes:
+ * Brick now uses the microlens family of packages instead of lens. This
+   version of brick also depends on vty 5.5.0, which was modified to use
+   microlens instead of lens. This change shouldn't impact functionality
+   but will greatly reduce build times.
+
 0.5.1
 -----
 
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.5.1
+version:             0.6
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal applications painlessly with 'brick'! You write an
@@ -77,11 +77,12 @@
     Brick.Widgets.Internal
 
   build-depends:       base <= 5,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        transformers,
                        data-default,
                        containers,
-                       lens,
+                       microlens,
+                       microlens-th,
                        vector,
                        contravariant,
                        text,
@@ -98,10 +99,11 @@
   main-is:             VisibilityDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens,
+                       microlens-th
 
 executable brick-viewport-scroll-demo
   if !flag(demos)
@@ -112,10 +114,10 @@
   main-is:             ViewportScrollDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens
 
 executable brick-dialog-demo
   if !flag(demos)
@@ -126,10 +128,10 @@
   main-is:             DialogDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens
 
 executable brick-layer-demo
   if !flag(demos)
@@ -140,10 +142,11 @@
   main-is:             LayerDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens,
+                       microlens-th
 
 executable brick-suspend-resume-demo
   if !flag(demos)
@@ -154,10 +157,11 @@
   main-is:             SuspendAndResumeDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens,
+                       microlens-th
 
 executable brick-padding-demo
   if !flag(demos)
@@ -168,10 +172,10 @@
   main-is:             PaddingDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens
 
 executable brick-attr-demo
   if !flag(demos)
@@ -182,10 +186,10 @@
   main-is:             AttrDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens
 
 executable brick-markup-demo
   if !flag(demos)
@@ -196,10 +200,10 @@
   main-is:             MarkupDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens
 
 executable brick-list-demo
   if !flag(demos)
@@ -210,10 +214,10 @@
   main-is:             ListDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens,
+                       microlens,
                        vector
 
 executable brick-custom-event-demo
@@ -225,10 +229,11 @@
   main-is:             CustomEventDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens,
+                       microlens-th
 
 executable brick-hello-world-demo
   if !flag(demos)
@@ -239,10 +244,10 @@
   main-is:             HelloWorldDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens
 
 executable brick-edit-demo
   if !flag(demos)
@@ -253,10 +258,11 @@
   main-is:             EditDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens,
+                       microlens-th
 
 executable brick-border-demo
   if !flag(demos)
@@ -267,7 +273,7 @@
   main-is:             BorderDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.3.1,
+                       vty >= 5.5.0,
                        data-default,
                        text,
-                       lens
+                       microlens
diff --git a/programs/CustomEventDemo.hs b/programs/CustomEventDemo.hs
--- a/programs/CustomEventDemo.hs
+++ b/programs/CustomEventDemo.hs
@@ -2,7 +2,8 @@
 {-# LANGUAGE TemplateHaskell #-}
 module Main where
 
-import Control.Lens (makeLenses, (^.), (&), (.~), (%~))
+import Lens.Micro ((^.), (&), (.~), (%~))
+import Lens.Micro.TH (makeLenses)
 import Control.Monad (void, forever)
 import Control.Concurrent (newChan, writeChan, threadDelay, forkIO)
 import Data.Default
diff --git a/programs/EditDemo.hs b/programs/EditDemo.hs
--- a/programs/EditDemo.hs
+++ b/programs/EditDemo.hs
@@ -3,7 +3,8 @@
 {-# LANGUAGE RankNTypes #-}
 module Main where
 
-import Control.Lens
+import Lens.Micro
+import Lens.Micro.TH
 import qualified Graphics.Vty as V
 
 import qualified Brick.Main as M
diff --git a/programs/LayerDemo.hs b/programs/LayerDemo.hs
--- a/programs/LayerDemo.hs
+++ b/programs/LayerDemo.hs
@@ -2,7 +2,8 @@
 {-# LANGUAGE TemplateHaskell #-}
 module Main where
 
-import Control.Lens (makeLenses, (^.), (&), (%~))
+import Lens.Micro ((^.), (&), (%~))
+import Lens.Micro.TH (makeLenses)
 import Control.Monad (void)
 import Data.Default
 import qualified Graphics.Vty as V
diff --git a/programs/ListDemo.hs b/programs/ListDemo.hs
--- a/programs/ListDemo.hs
+++ b/programs/ListDemo.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 module Main where
 
-import Control.Lens ((^.))
+import Lens.Micro ((^.))
 import Control.Monad (void)
 import Data.Monoid
 import Data.Maybe (fromMaybe)
diff --git a/programs/SuspendAndResumeDemo.hs b/programs/SuspendAndResumeDemo.hs
--- a/programs/SuspendAndResumeDemo.hs
+++ b/programs/SuspendAndResumeDemo.hs
@@ -2,7 +2,8 @@
 {-# LANGUAGE TemplateHaskell #-}
 module Main where
 
-import Control.Lens (makeLenses, (.~), (^.), (&))
+import Lens.Micro ((.~), (^.), (&))
+import Lens.Micro.TH (makeLenses)
 import Control.Monad (void)
 import Data.Monoid
 import Data.Default
diff --git a/programs/VisibilityDemo.hs b/programs/VisibilityDemo.hs
--- a/programs/VisibilityDemo.hs
+++ b/programs/VisibilityDemo.hs
@@ -3,7 +3,8 @@
 module Main where
 
 import Control.Monad (void)
-import Control.Lens
+import Lens.Micro
+import Lens.Micro.TH
 import Data.Monoid
 import qualified Graphics.Vty as V
 
diff --git a/src/Brick/Focus.hs b/src/Brick/Focus.hs
--- a/src/Brick/Focus.hs
+++ b/src/Brick/Focus.hs
@@ -14,7 +14,7 @@
   )
 where
 
-import Control.Lens ((^.))
+import Lens.Micro ((^.))
 import Data.Maybe (listToMaybe)
 
 import Brick.Types
diff --git a/src/Brick/Main.hs b/src/Brick/Main.hs
--- a/src/Brick/Main.hs
+++ b/src/Brick/Main.hs
@@ -31,7 +31,7 @@
 where
 
 import Control.Exception (finally)
-import Control.Lens ((^.))
+import Lens.Micro ((^.))
 import Control.Monad (forever)
 import Control.Monad.Trans.Class (lift)
 import Control.Monad.Trans.State
diff --git a/src/Brick/Markup.hs b/src/Brick/Markup.hs
--- a/src/Brick/Markup.hs
+++ b/src/Brick/Markup.hs
@@ -11,7 +11,7 @@
   )
 where
 
-import Control.Lens ((.~), (&), (^.))
+import Lens.Micro ((.~), (&), (^.))
 import Control.Monad (forM)
 import qualified Data.Text as T
 import Data.Text.Markup
diff --git a/src/Brick/Types.hs b/src/Brick/Types.hs
--- a/src/Brick/Types.hs
+++ b/src/Brick/Types.hs
@@ -68,7 +68,8 @@
 where
 
 import Control.Applicative
-import Control.Lens (_1, _2, to, (^.), (&), (.~), Lens')
+import Lens.Micro (_1, _2, to, (^.), (&), (.~), Lens')
+import Lens.Micro.Type (Getting)
 import Data.Monoid (Monoid(..))
 import Control.Monad.Trans.State.Lazy
 import Control.Monad.Trans.Reader
@@ -172,7 +173,7 @@
 suffixLenses ''Result
 
 -- | The rendering context's current drawing attribute.
-attrL :: (Contravariant f, Functor f) => (Attr -> f Attr) -> Context -> f Context
+attrL :: forall r. Getting r Context Attr
 attrL = to (\c -> attrMapLookup (c^.ctxAttrNameL) (c^.ctxAttrMapL))
 
 instance TerminalLocation CursorLocation where
diff --git a/src/Brick/Types/Internal.hs b/src/Brick/Types/Internal.hs
--- a/src/Brick/Types/Internal.hs
+++ b/src/Brick/Types/Internal.hs
@@ -29,7 +29,9 @@
   )
 where
 
-import Control.Lens (Field1, Field2, _1, _2, Lens', makeLenses)
+import Lens.Micro (_1, _2, Lens')
+import Lens.Micro.TH (makeLenses)
+import Lens.Micro.Internal (Field1, Field2)
 import Data.String
 import Data.Monoid
 import qualified Data.Map as M
diff --git a/src/Brick/Types/TH.hs b/src/Brick/Types/TH.hs
--- a/src/Brick/Types/TH.hs
+++ b/src/Brick/Types/TH.hs
@@ -6,7 +6,8 @@
 import qualified Language.Haskell.TH.Syntax as TH
 import qualified Language.Haskell.TH.Lib as TH
 
-import Control.Lens (DefName(..), makeLensesWith, lensRules, (&), (.~), lensField)
+import Lens.Micro ((&), (.~))
+import Lens.Micro.TH (DefName(..), makeLensesWith, lensRules, lensField)
 
 -- | A template haskell function to build lenses for a record type. This
 -- function differs from the 'Control.Lens.makeLenses' function in that
diff --git a/src/Brick/Util.hs b/src/Brick/Util.hs
--- a/src/Brick/Util.hs
+++ b/src/Brick/Util.hs
@@ -8,7 +8,7 @@
   )
 where
 
-import Control.Lens ((&), (%~))
+import Lens.Micro ((&), (%~))
 import Data.Monoid ((<>))
 import Graphics.Vty
 
diff --git a/src/Brick/Widgets/Border.hs b/src/Brick/Widgets/Border.hs
--- a/src/Brick/Widgets/Border.hs
+++ b/src/Brick/Widgets/Border.hs
@@ -31,7 +31,7 @@
 where
 
 import Control.Applicative ((<$>))
-import Control.Lens ((^.), to)
+import Lens.Micro ((^.), to)
 import Data.Monoid ((<>))
 import Graphics.Vty (imageHeight, imageWidth)
 
diff --git a/src/Brick/Widgets/Center.hs b/src/Brick/Widgets/Center.hs
--- a/src/Brick/Widgets/Center.hs
+++ b/src/Brick/Widgets/Center.hs
@@ -14,7 +14,7 @@
   )
 where
 
-import Control.Lens ((^.), (&), (.~), to)
+import Lens.Micro ((^.), (&), (.~), to)
 import Data.Maybe (fromMaybe)
 import Graphics.Vty (imageWidth, imageHeight, horizCat, charFill, vertCat)
 
diff --git a/src/Brick/Widgets/Core.hs b/src/Brick/Widgets/Core.hs
--- a/src/Brick/Widgets/Core.hs
+++ b/src/Brick/Widgets/Core.hs
@@ -66,7 +66,7 @@
 where
 
 import Control.Applicative
-import Control.Lens ((^.), (.~), (&), (%~), to, _1, _2, each, to, ix, Lens')
+import Lens.Micro ((^.), (.~), (&), (%~), to, _1, _2, each, to, ix, Lens')
 import Control.Monad ((>=>),when)
 import Control.Monad.Trans.State.Lazy
 import Control.Monad.Trans.Reader
diff --git a/src/Brick/Widgets/Dialog.hs b/src/Brick/Widgets/Dialog.hs
--- a/src/Brick/Widgets/Dialog.hs
+++ b/src/Brick/Widgets/Dialog.hs
@@ -27,7 +27,7 @@
   )
 where
 
-import Control.Lens
+import Lens.Micro
 import Control.Applicative
 import Data.Monoid
 import Data.List (intersperse)
diff --git a/src/Brick/Widgets/Edit.hs b/src/Brick/Widgets/Edit.hs
--- a/src/Brick/Widgets/Edit.hs
+++ b/src/Brick/Widgets/Edit.hs
@@ -27,7 +27,7 @@
   )
 where
 
-import Control.Lens
+import Lens.Micro
 import Graphics.Vty (Event(..), Key(..), Modifier(..))
 
 import qualified Data.Text.Zipper as Z
diff --git a/src/Brick/Widgets/Internal.hs b/src/Brick/Widgets/Internal.hs
--- a/src/Brick/Widgets/Internal.hs
+++ b/src/Brick/Widgets/Internal.hs
@@ -7,7 +7,7 @@
 where
 
 import Control.Applicative
-import Control.Lens ((^.), (&), (%~))
+import Lens.Micro ((^.), (&), (%~))
 import Control.Monad.Trans.State.Lazy
 import Control.Monad.Trans.Reader
 import Data.Default
diff --git a/src/Brick/Widgets/List.hs b/src/Brick/Widgets/List.hs
--- a/src/Brick/Widgets/List.hs
+++ b/src/Brick/Widgets/List.hs
@@ -40,7 +40,7 @@
 where
 
 import Control.Applicative ((<$>),(<*>),pure)
-import Control.Lens ((^.), (&), (.~), (%~), _2)
+import Lens.Micro ((^.), (&), (.~), (%~), _2)
 import Data.Foldable (Foldable)
 import Data.Traversable (Traversable)
 import Data.Maybe (fromMaybe)
diff --git a/src/Brick/Widgets/ProgressBar.hs b/src/Brick/Widgets/ProgressBar.hs
--- a/src/Brick/Widgets/ProgressBar.hs
+++ b/src/Brick/Widgets/ProgressBar.hs
@@ -8,7 +8,7 @@
   )
 where
 
-import Control.Lens ((^.))
+import Lens.Micro ((^.))
 import Data.Maybe (fromMaybe)
 import Data.Monoid
 
