diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,11 @@
-## [_Unreleased_](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.3.2...main)
+## [_Unreleased_](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.2.0.0...main)
+
+## [v1.2.0.0](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.3.2...v1.2.0.0)
+
+- Replace `memory` with `ram`
+- Require `crypton >= 1.1`
+- Require `resource-pool >= 0.3.0` (remove `.Compat` module)
+- Drop support for GHCs older than 9.4 on CI
 
 ## [v1.1.3.2](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.3.1...v1.1.3.2)
 
diff --git a/README.lhs b/README.lhs
--- a/README.lhs
+++ b/README.lhs
@@ -56,7 +56,6 @@
 import Faktory.Job
 import Faktory.Worker
 import GHC.Generics
-import Text.Markdown.Unlit ()
 
 {- Don't actually run anything -}
 main :: IO ()
diff --git a/faktory.cabal b/faktory.cabal
--- a/faktory.cabal
+++ b/faktory.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            faktory
-version:         1.1.3.2
+version:         1.2.0.0
 license:         MIT
 license-file:    LICENSE
 copyright:       2018 Freckle Education
@@ -51,7 +51,6 @@
 
 library
     exposed-modules:
-        Data.Pool.Compat
         Faktory.Client
         Faktory.Connection
         Faktory.Ent.Batch
@@ -90,29 +89,29 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists
 
     build-depends:
-        aeson >=1.4.7.1,
+        aeson >=2.2.1.0,
         aeson-casing >=0.2.0.0,
         base >=4 && <5,
-        bytestring >=0.10.10.1,
-        crypton >=0.33,
-        crypton-connection >=0.3.1,
+        bytestring >=0.11.5.3,
+        crypton >=1.1,
+        crypton-connection >=0.4.6,
         data-default >=0.7.1.1,
         errors >=2.3.0,
-        megaparsec >=8.0.0,
-        memory >=0.15.0,
-        microlens >=0.4.11.2,
+        megaparsec >=9.3.1,
+        microlens >=0.4.13.1,
         mtl >=2.2.2,
-        network >=3.1.1.1,
-        random >=1.1,
-        resource-pool >=0.2.3.2,
-        safe-exceptions >=0.1.7.1,
+        network >=3.1.4.0,
+        ram >=0.22.0,
+        random >=1.2.1.1,
+        resource-pool >=0.3.0,
+        safe-exceptions >=0.1.7.4,
         scanner >=0.3.1,
         semigroups >=0.19.1,
-        text >=1.2.4.0,
-        time >=1.9.3,
-        unix >=2.7.2.2,
-        unliftio >=0.2.13.1,
-        unordered-containers >=0.2.10.0
+        text >=2.0.2,
+        time >=1.12.2,
+        unix >=2.7.3,
+        unliftio >=0.2.25.0,
+        unordered-containers >=0.2.19.1
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -145,10 +144,10 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists
 
     build-depends:
-        aeson >=1.4.7.1,
+        aeson >=2.2.1.0,
         base >=4 && <5,
         faktory,
-        safe-exceptions >=0.1.7.1
+        safe-exceptions >=0.1.7.4
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -181,10 +180,10 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists
 
     build-depends:
-        aeson >=1.4.7.1,
+        aeson >=2.2.1.0,
         base >=4 && <5,
         faktory,
-        safe-exceptions >=0.1.7.1
+        safe-exceptions >=0.1.7.4
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -227,14 +226,14 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists -rtsopts
 
     build-depends:
-        aeson >=1.4.7.1,
-        aeson-qq >=0.8.3,
-        async >=2.2.2,
+        aeson >=2.2.1.0,
+        aeson-qq >=0.8.4,
+        async >=2.2.5,
         base >=4 && <5,
         faktory,
-        hspec >=2.7.6,
+        hspec >=2.10.10,
         mtl >=2.2.2,
-        time >=1.9.3
+        time >=1.12.2
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -249,6 +248,7 @@
 test-suite readme
     type:               exitcode-stdio-1.0
     main-is:            README.lhs
+    build-tool-depends: markdown-unlit:markdown-unlit
     hs-source-dirs:     ./
     other-modules:      Paths_faktory
     default-language:   Haskell2010
@@ -269,10 +269,9 @@
         markdown-unlit
 
     build-depends:
-        aeson >=1.4.7.1,
+        aeson >=2.2.1.0,
         base >=4 && <5,
-        faktory,
-        markdown-unlit >=0.5.1
+        faktory
 
     if impl(ghc >=8.10)
         ghc-options:
diff --git a/library/Data/Pool/Compat.hs b/library/Data/Pool/Compat.hs
deleted file mode 100644
--- a/library/Data/Pool/Compat.hs
+++ /dev/null
@@ -1,31 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module Data.Pool.Compat
-  ( module Data.Pool
-  , createPool
-  ) where
-
-import Prelude
-
-import Data.Pool hiding (createPool)
-#if MIN_VERSION_resource_pool(0,3,0)
-#else
-import Control.Concurrent (getNumCapabilities)
-import qualified Data.Pool as Pool
-#endif
-
-createPool
-  :: IO a
-  -> (a -> IO ())
-  -> Double
-  -> Int
-  -> IO (Pool a)
-createPool create destroy timeout size = do
-#if MIN_VERSION_resource_pool(0,3,0)
-  newPool $ defaultPoolConfig create destroy timeout size
-#else
-  -- Re-implement instead of using the deprecated compatibility function, so
-  -- that we can get a consistent numStripes and size behavior.
-  numStripes <- getNumCapabilities
-  Pool.createPool create destroy numStripes (realToFrac timeout) size
-#endif
diff --git a/library/Faktory/Pool.hs b/library/Faktory/Pool.hs
--- a/library/Faktory/Pool.hs
+++ b/library/Faktory/Pool.hs
@@ -24,8 +24,8 @@
 import Control.Monad.IO.Class (MonadIO (..))
 import Control.Monad.Reader (MonadReader, asks)
 import Data.Aeson (ToJSON)
-import Data.Pool.Compat (Pool)
-import qualified Data.Pool.Compat as Pool
+import Data.Pool (Pool)
+import qualified Data.Pool as Pool
 import Faktory.Job hiding (buildJob, perform)
 import qualified Faktory.Job as Job
 import Faktory.Producer
@@ -59,13 +59,14 @@
   -> PoolSettings
   -> m FaktoryPool
 newFaktoryPool settings PoolSettings {..} = do
-  liftIO $
-    FaktoryPool
-      <$> Pool.createPool
-        (newProducer settings)
-        closeProducer
-        (fromIntegral settingsTimeout)
-        (fromIntegral settingsSize)
+  let poolConfig =
+        Pool.defaultPoolConfig
+          (newProducer settings)
+          closeProducer
+          (fromIntegral settingsTimeout)
+          (fromIntegral settingsSize)
+
+  liftIO $ FaktoryPool <$> Pool.newPool poolConfig
 
 -- | 'Faktory.Job.perform' but using a 'Producer' from the pool
 --
