diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-## [_Unreleased_](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.5...main)
+## [_Unreleased_](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.6...main)
+
+## [v1.1.2.6](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.5...v1.1.2.6)
+
+- Support ghc-9.8 and aeson-2.2
 
 ## [v1.1.2.5](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.4...v1.1.2.5)
 
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.2.5
+version:         1.1.2.6
 license:         MIT
 license-file:    LICENSE
 copyright:       2018 Freckle Education
@@ -88,25 +88,25 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists
 
     build-depends:
-        aeson,
-        aeson-casing,
+        aeson >=1.4.7.1,
+        aeson-casing >=0.2.0.0,
         base >=4 && <5,
-        bytestring,
-        crypton-connection,
-        cryptonite,
-        errors,
-        megaparsec,
-        memory,
-        mtl,
-        network,
-        random,
-        safe-exceptions,
-        scanner,
+        bytestring >=0.10.10.1,
+        crypton-connection >=0.3.1,
+        cryptonite >=0.26,
+        errors >=2.3.0,
+        megaparsec >=8.0.0,
+        memory >=0.15.0,
+        mtl >=2.2.2,
+        network >=3.1.1.1,
+        random >=1.1,
+        safe-exceptions >=0.1.7.1,
+        scanner >=0.3.1,
         semigroups >=0.19.1,
-        text,
-        time,
-        unix,
-        unordered-containers
+        text >=1.2.4.0,
+        time >=1.9.3,
+        unix >=2.7.2.2,
+        unordered-containers >=0.2.10.0
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -115,6 +115,9 @@
     if impl(ghc >=9.2)
         ghc-options: -Wno-missing-kind-signatures
 
+    if impl(ghc >=9.8)
+        ghc-options: -Wno-missing-role-annotations
+
 executable faktory-example-consumer
     main-is:            Main.hs
     hs-source-dirs:     examples/consumer
@@ -136,10 +139,10 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists
 
     build-depends:
-        aeson,
+        aeson >=1.4.7.1,
         base >=4 && <5,
         faktory,
-        safe-exceptions
+        safe-exceptions >=0.1.7.1
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -148,6 +151,9 @@
     if impl(ghc >=9.2)
         ghc-options: -Wno-missing-kind-signatures
 
+    if impl(ghc >=9.8)
+        ghc-options: -Wno-missing-role-annotations
+
 executable faktory-example-producer
     main-is:            Main.hs
     hs-source-dirs:     examples/producer
@@ -169,10 +175,10 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists
 
     build-depends:
-        aeson,
+        aeson >=1.4.7.1,
         base >=4 && <5,
         faktory,
-        safe-exceptions
+        safe-exceptions >=0.1.7.1
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -181,6 +187,9 @@
     if impl(ghc >=9.2)
         ghc-options: -Wno-missing-kind-signatures
 
+    if impl(ghc >=9.8)
+        ghc-options: -Wno-missing-role-annotations
+
 test-suite hspec
     type:               exitcode-stdio-1.0
     main-is:            Spec.hs
@@ -212,14 +221,14 @@
         -Wno-monomorphism-restriction -Wno-missing-import-lists -rtsopts
 
     build-depends:
-        aeson,
-        aeson-qq,
-        async,
+        aeson >=1.4.7.1,
+        aeson-qq >=0.8.3,
+        async >=2.2.2,
         base >=4 && <5,
         faktory,
-        hspec,
-        mtl,
-        time
+        hspec >=2.7.6,
+        mtl >=2.2.2,
+        time >=1.9.3
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -228,6 +237,9 @@
     if impl(ghc >=9.2)
         ghc-options: -Wno-missing-kind-signatures
 
+    if impl(ghc >=9.8)
+        ghc-options: -Wno-missing-role-annotations
+
 test-suite readme
     type:               exitcode-stdio-1.0
     main-is:            README.lhs
@@ -251,10 +263,10 @@
         markdown-unlit
 
     build-depends:
-        aeson,
+        aeson >=1.4.7.1,
         base >=4 && <5,
         faktory,
-        markdown-unlit
+        markdown-unlit >=0.5.1
 
     if impl(ghc >=8.10)
         ghc-options:
@@ -262,3 +274,6 @@
 
     if impl(ghc >=9.2)
         ghc-options: -Wno-missing-kind-signatures
+
+    if impl(ghc >=9.8)
+        ghc-options: -Wno-missing-role-annotations
diff --git a/library/Faktory/Job.hs b/library/Faktory/Job.hs
--- a/library/Faktory/Job.hs
+++ b/library/Faktory/Job.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 module Faktory.Job
   ( Job
   , JobId
@@ -121,7 +123,11 @@
   toJSON = object . toPairs
   toEncoding = pairs . mconcat . toPairs
 
+#if MIN_VERSION_aeson(2,2,0)
+toPairs :: (KeyValue e a, ToJSON arg) => Job arg -> [a]
+#else
 toPairs :: (KeyValue a, ToJSON arg) => Job arg -> [a]
+#endif
 toPairs Job {..} =
   [ "jid" .= jobJid
   , "at" .= jobAt
