diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Change log
 
+## 2.0.0
+
+* Bump upper bounds on base to 4.12 and logging-effect to 1.4
+* Replace wl-pprint-text with prettyprinter 1.2.*
+
 ## 1.1.4
 
 * Bump upper bound on `exceptions` from 0.10 to 0.11
diff --git a/executable/iso8601-handler.hs b/executable/iso8601-handler.hs
--- a/executable/iso8601-handler.hs
+++ b/executable/iso8601-handler.hs
@@ -6,9 +6,9 @@
 import Control.Monad.Log (MonadLog, WithSeverity)
 import qualified Control.Monad.Log as Log
 import qualified Control.Monad.Log.Extra.Handler as Log
-import Text.PrettyPrint.Leijen.Text (Doc)
+import Data.Text.Prettyprint.Doc (Doc)
 
-app :: MonadLog (WithSeverity Doc) m => m ()
+app :: MonadLog (WithSeverity (Doc ann)) m => m ()
 app = do
   Log.logEmergency "GAH! All systems are down!!!"
   Log.logAlert "Red alert!"
diff --git a/executable/iso8601plus-handler.hs b/executable/iso8601plus-handler.hs
--- a/executable/iso8601plus-handler.hs
+++ b/executable/iso8601plus-handler.hs
@@ -6,9 +6,9 @@
 import Control.Monad.Log (MonadLog, WithSeverity)
 import qualified Control.Monad.Log as Log
 import qualified Control.Monad.Log.Extra.Handler as Log
-import Text.PrettyPrint.Leijen.Text (Doc)
+import Data.Text.Prettyprint.Doc (Doc)
 
-app :: MonadLog (WithSeverity Doc) m => m ()
+app :: MonadLog (WithSeverity (Doc ann)) m => m ()
 app = do
   Log.logEmergency "GAH! All systems are down!!!"
   Log.logAlert "Red alert!"
diff --git a/executable/rfc822-handler.hs b/executable/rfc822-handler.hs
--- a/executable/rfc822-handler.hs
+++ b/executable/rfc822-handler.hs
@@ -6,9 +6,9 @@
 import Control.Monad.Log (MonadLog, WithSeverity)
 import qualified Control.Monad.Log as Log
 import qualified Control.Monad.Log.Extra.Handler as Log
-import Text.PrettyPrint.Leijen.Text (Doc)
+import Data.Text.Prettyprint.Doc (Doc)
 
-app :: MonadLog (WithSeverity Doc) m => m ()
+app :: MonadLog (WithSeverity (Doc ann)) m => m ()
 app = do
   Log.logEmergency "GAH! All systems are down!!!"
   Log.logAlert "Red alert!"
diff --git a/executable/route-handler-with-iso8601.hs b/executable/route-handler-with-iso8601.hs
--- a/executable/route-handler-with-iso8601.hs
+++ b/executable/route-handler-with-iso8601.hs
@@ -6,9 +6,9 @@
 import Control.Monad.Log (MonadLog, WithSeverity)
 import qualified Control.Monad.Log as Log
 import qualified Control.Monad.Log.Extra.Handler as Log
-import Text.PrettyPrint.Leijen.Text (Doc)
+import Data.Text.Prettyprint.Doc (Doc)
 
-app :: MonadLog (WithSeverity Doc) m => m ()
+app :: MonadLog (WithSeverity (Doc ann)) m => m ()
 app = do
   Log.logEmergency "GAH! All systems are down!!!"
   Log.logAlert "Red alert!"
diff --git a/executable/route-handler.hs b/executable/route-handler.hs
--- a/executable/route-handler.hs
+++ b/executable/route-handler.hs
@@ -6,9 +6,9 @@
 import Control.Monad.Log (MonadLog, WithSeverity)
 import qualified Control.Monad.Log as Log
 import qualified Control.Monad.Log.Extra.Handler as Log
-import Text.PrettyPrint.Leijen.Text (Doc)
+import Data.Text.Prettyprint.Doc (Doc)
 
-app :: MonadLog (WithSeverity Doc) m => m ()
+app :: MonadLog (WithSeverity (Doc ann)) m => m ()
 app = do
   Log.logEmergency "GAH! All systems are down!!!"
   Log.logAlert "Red alert!"
diff --git a/library/Control/Monad/Log/Extra/Handler.hs b/library/Control/Monad/Log/Extra/Handler.hs
--- a/library/Control/Monad/Log/Extra/Handler.hs
+++ b/library/Control/Monad/Log/Extra/Handler.hs
@@ -45,11 +45,11 @@
 import qualified Data.Time as Time
 import System.IO (Handle)
 import qualified System.IO as IO
-import Text.PrettyPrint.Leijen.Text (Doc)
+import Data.Text.Prettyprint.Doc (Doc)
 
 -- | Converts an existing handler into a handler that renders an ISO8601
 -- (i.e. YYYY-MM-DDTHH:MM:SS) timestamp on every log message.
-iso8601Handler :: (MonadIO m, MonadMask m) => Handler m Doc -> Handler m Doc
+iso8601Handler :: (MonadIO m, MonadMask m) => Handler m (Doc ann) -> Handler m (Doc ann)
 iso8601Handler = customTimestampHandler formatter where
   formatter = Time.formatTime Time.defaultTimeLocale "%Y-%m-%dT%H:%M:%S"
 
@@ -57,14 +57,14 @@
 -- (i.e. YYYY-MM-DDTHH:MM:SS with decimal point and fraction of second)
 -- timestamp on every log message.
 iso8601PlusHandler :: (MonadIO m, MonadMask m)
-                   => Handler m Doc
-                   -> Handler m Doc
+                   => Handler m (Doc ann)
+                   -> Handler m (Doc ann)
 iso8601PlusHandler = customTimestampHandler formatter where
   formatter = Time.formatTime Time.defaultTimeLocale "%Y-%m-%dT%H:%M:%S%06Q"
 
 -- | Converts an existing handler into a handler that renders an RFC822
 -- timestamp on every log message.
-rfc822Handler :: (MonadIO m, MonadMask m) => Handler m Doc -> Handler m Doc
+rfc822Handler :: (MonadIO m, MonadMask m) => Handler m (Doc ann) -> Handler m (Doc ann)
 rfc822Handler = customTimestampHandler formatter where
   formatter = Time.formatTime Time.defaultTimeLocale Time.rfc822DateFormat
 
@@ -72,8 +72,8 @@
 -- every log message. The timestamp is formatted via the input function.
 customTimestampHandler :: (MonadIO m, MonadMask m)
                        => (UTCTime -> String)
-                       -> Handler m Doc
-                       -> Handler m Doc
+                       -> Handler m (Doc ann)
+                       -> Handler m (Doc ann)
 customTimestampHandler formatter handler = \msg -> do
   msg' <- Log.timestamp msg
   handler (Log.renderWithTimestamp formatter id msg')
@@ -82,9 +82,9 @@
 -- and 'Debug' messages to the first input handler and routes 'Emergency',
 -- 'Alert', 'Critical', and 'Error' messages to the second input handler.
 routeHandler :: (MonadIO m, MonadMask m)
-             => Handler m Doc -- ^ The handler for non-error messages (i.e. stdout handler)
-             -> Handler m Doc -- ^ The handler for error messages (i.e. stderr handler)
-             -> (a -> Doc)    -- ^ How to render
+             => Handler m (Doc ann) -- ^ The handler for non-error messages (i.e. stdout handler)
+             -> Handler m (Doc ann) -- ^ The handler for error messages (i.e. stderr handler)
+             -> (a -> (Doc ann))    -- ^ How to render
              -> Handler m (WithSeverity a)
 routeHandler stdoutHandler stderrHandler renderer = \msg ->
   let msg' = Log.renderWithSeverity renderer msg
@@ -105,36 +105,36 @@
 -- This function is limiting as it assumes incoming messages are
 -- 'WithSeverity' 'Doc' instead of the more general 'WithSeverity' 'a'.
 dispatchHandler :: (MonadIO m, MonadMask m)
-                => Handler m Doc -- ^ The handler for non-error messages (i.e. stdout handler)
-                -> Handler m Doc -- ^ The handler for error messages (i.e. stderr handler)
-                -> Handler m (WithSeverity Doc)
+                => Handler m (Doc ann) -- ^ The handler for non-error messages (i.e. stdout handler)
+                -> Handler m (Doc ann) -- ^ The handler for error messages (i.e. stderr handler)
+                -> Handler m (WithSeverity (Doc ann))
 dispatchHandler stdoutHandler stderrHandler =
   routeHandler stdoutHandler stderrHandler id
 {-# DEPRECATED dispatchHandler "dispatchHandler is deprecated in favor of routeHandler." #-}
 
 -- | Convenience wrapper around 'Log.withFDHandler' for 'IO.stdout' with somewhat sensible defaults.
-withStdoutHandler :: (MonadIO m, MonadMask m) => (Handler m Doc -> m a) -> m a
+withStdoutHandler :: (MonadIO m, MonadMask m) => (Handler m (Doc ann) -> m a) -> m a
 withStdoutHandler = withCustomStdoutHandler Log.defaultBatchingOptions 0.4 80
 
 -- | Convenience wrapper around 'Log.withFDHandler' for 'IO.stderr' with somewhat sensible defaults.
-withStderrHandler :: (MonadIO m, MonadMask m) => (Handler m Doc -> m a) -> m a
+withStderrHandler :: (MonadIO m, MonadMask m) => (Handler m (Doc ann) -> m a) -> m a
 withStderrHandler = withCustomStderrHandler Log.defaultBatchingOptions 0.4 80
 
 -- | Convenience wrapper around 'Log.withFDHandler' for 'IO.stdout'.
 withCustomStdoutHandler :: (MonadIO m, MonadMask m)
                         => BatchingOptions
-                        -> Float -- ^ The @ribbonFrac@ parameter to 'Pretty.renderPretty'
+                        -> Double -- ^ The @ribbonFrac@ parameter to 'Pretty.renderPretty'
                         -> Int -- ^ The amount of characters per line. Lines longer than this will be pretty-printed across multiple lines if possible.
-                        -> (Handler m Doc -> m a)
+                        -> (Handler m (Doc ann) -> m a)
                         -> m a
 withCustomStdoutHandler = withCustomHandler IO.stdout
 
 -- | Convenience wrapper around 'Log.withFDHandler' for 'IO.stderr'.
 withCustomStderrHandler :: (MonadIO m, MonadMask m)
                         => BatchingOptions
-                        -> Float -- ^ The @ribbonFrac@ parameter to 'Pretty.renderPretty'
+                        -> Double -- ^ The @ribbonFrac@ parameter to 'Pretty.renderPretty'
                         -> Int -- ^ The amount of characters per line. Lines longer than this will be pretty-printed across multiple lines if possible.
-                        -> (Handler m Doc -> m a)
+                        -> (Handler m (Doc ann) -> m a)
                         -> m a
 withCustomStderrHandler = withCustomHandler IO.stderr
 
@@ -143,9 +143,9 @@
 withCustomHandler :: (MonadIO m, MonadMask m)
                   => Handle
                   -> BatchingOptions
-                  -> Float -- ^ The @ribbonFrac@ parameter to 'Pretty.renderPretty'
+                  -> Double -- ^ The @ribbonFrac@ parameter to 'Pretty.renderPretty'
                   -> Int -- ^ The amount of characters per line. Lines longer than this will be pretty-printed across multiple lines if possible.
-                  -> (Handler m Doc -> m a)
+                  -> (Handler m (Doc ann) -> m a)
                   -> m a
 withCustomHandler handle options ribbonFrac width = Log.withFDHandler options handle ribbonFrac width
 
@@ -157,7 +157,7 @@
 In the quickstart examples, please assume the following is in scope:
 
 @
-app :: 'Log.MonadLog' ('WithSeverity' 'Doc') m => m ()
+app :: 'Log.MonadLog' ('WithSeverity' ('Doc' ann)) m => m ()
 app = 'Log.logWarning' "Cargo number 2331 has commandeered the vessel"
 @
 
diff --git a/logging-effect-extra-handler.cabal b/logging-effect-extra-handler.cabal
--- a/logging-effect-extra-handler.cabal
+++ b/logging-effect-extra-handler.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 4c5ba080ccc09cc4138a7cc730d5a906e61e3a14a9e714405d2d04a8c12e3a71
+-- hash: 6f3a060c88d397d9c56c387c38ce56c7db521cdc0d03cd498aada2e24d73ff8b
 
 name:           logging-effect-extra-handler
-version:        1.1.4
+version:        2.0.0
 synopsis:       Handy logging handler combinators
 description:    Handy logging handler combinators.
 category:       Other
@@ -32,11 +32,11 @@
       library
   ghc-options: -Wall
   build-depends:
-      base >=4.8 && <4.11
+      base >=4.8 && <4.12
     , exceptions >=0.8.0.2 && <0.11
-    , logging-effect >=1.1.0 && <1.3
+    , logging-effect >=1.1.0 && <1.4
+    , prettyprinter ==1.2.*
     , time >=1.5 && <1.10
-    , wl-pprint-text >=1.1.0.4 && <1.2
   exposed-modules:
       Control.Monad.Log.Extra.Handler
   other-modules:
@@ -49,10 +49,10 @@
       executable
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base >=4.8 && <4.11
-    , logging-effect >=1.1.0 && <1.3
+      base >=4.8 && <4.12
+    , logging-effect >=1.1.0 && <1.4
     , logging-effect-extra-handler
-    , wl-pprint-text >=1.1.0.4 && <1.2
+    , prettyprinter ==1.2.*
   other-modules:
       Paths_logging_effect_extra_handler
   default-language: Haskell2010
@@ -63,10 +63,10 @@
       executable
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base >=4.8 && <4.11
-    , logging-effect >=1.1.0 && <1.3
+      base >=4.8 && <4.12
+    , logging-effect >=1.1.0 && <1.4
     , logging-effect-extra-handler
-    , wl-pprint-text >=1.1.0.4 && <1.2
+    , prettyprinter ==1.2.*
   other-modules:
       Paths_logging_effect_extra_handler
   default-language: Haskell2010
@@ -77,10 +77,10 @@
       executable
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base >=4.8 && <4.11
-    , logging-effect >=1.1.0 && <1.3
+      base >=4.8 && <4.12
+    , logging-effect >=1.1.0 && <1.4
     , logging-effect-extra-handler
-    , wl-pprint-text >=1.1.0.4 && <1.2
+    , prettyprinter ==1.2.*
   other-modules:
       Paths_logging_effect_extra_handler
   default-language: Haskell2010
@@ -91,10 +91,10 @@
       executable
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base >=4.8 && <4.11
-    , logging-effect >=1.1.0 && <1.3
+      base >=4.8 && <4.12
+    , logging-effect >=1.1.0 && <1.4
     , logging-effect-extra-handler
-    , wl-pprint-text >=1.1.0.4 && <1.2
+    , prettyprinter ==1.2.*
   other-modules:
       Paths_logging_effect_extra_handler
   default-language: Haskell2010
@@ -105,10 +105,10 @@
       executable
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base >=4.8 && <4.11
-    , logging-effect >=1.1.0 && <1.3
+      base >=4.8 && <4.12
+    , logging-effect >=1.1.0 && <1.4
     , logging-effect-extra-handler
-    , wl-pprint-text >=1.1.0.4 && <1.2
+    , prettyprinter ==1.2.*
   other-modules:
       Paths_logging_effect_extra_handler
   default-language: Haskell2010
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,9 +1,9 @@
 author: Jason Shipman
 category: Other
 dependencies:
-- base >=4.8 && <4.11
-- logging-effect >= 1.1.0 && <1.3
-- wl-pprint-text >=1.1.0.4 && <1.2
+- base >=4.8 && <4.12
+- logging-effect >= 1.1.0 && <1.4
+- prettyprinter == 1.2.*
 description: Handy logging handler combinators.
 executables:
   route-handler:
@@ -67,4 +67,4 @@
 maintainer: Jason Shipman
 name: logging-effect-extra-handler
 synopsis: Handy logging handler combinators
-version: '1.1.4'
+version: '2.0.0'
