diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog for persistent
 
+## 2.14.5.2
+
+* [#1513](https://github.com/yesodweb/persistent/pull/1513)
+    * Support GHC 9.8 and `aeson-2.2`
+
 ## 2.14.5.1
 
 * [#1496](https://github.com/yesodweb/persistent/pull/1496)
diff --git a/Database/Persist/TH.hs b/Database/Persist/TH.hs
--- a/Database/Persist/TH.hs
+++ b/Database/Persist/TH.hs
@@ -121,6 +121,9 @@
 import qualified Data.Set as Set
 import Language.Haskell.TH.Lib
        (appT, conE, conK, conT, litT, strTyLit, varE, varP, varT)
+#if MIN_VERSION_template_haskell(2,21,0)
+import Language.Haskell.TH.Lib (defaultBndrFlag)
+#endif
 import Language.Haskell.TH.Quote
 import Language.Haskell.TH.Syntax
 import Web.HttpApiData (FromHttpApiData(..), ToHttpApiData(..))
@@ -2325,7 +2328,15 @@
     where
         fieldNames = fieldDefToRecordName mps ent <$> getUnboundFieldDefs ent
 
-#if MIN_VERSION_template_haskell(2,17,0)
+#if MIN_VERSION_template_haskell(2,21,0)
+mkPlainTV
+    :: Name
+    -> TyVarBndr BndrVis
+mkPlainTV n = PlainTV n defaultBndrFlag
+
+mkForallTV :: Name -> TyVarBndr Specificity
+mkForallTV n = PlainTV n SpecifiedSpec
+#elif MIN_VERSION_template_haskell(2,17,0)
 mkPlainTV
     :: Name
     -> TyVarBndr ()
diff --git a/persistent.cabal b/persistent.cabal
--- a/persistent.cabal
+++ b/persistent.cabal
@@ -1,5 +1,5 @@
 name:            persistent
-version:         2.14.5.1
+version:         2.14.5.2
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -15,10 +15,11 @@
 extra-source-files: ChangeLog.md README.md
 
 library
-    build-depends:   
+    build-depends:
         base                     >= 4.11.1.0     && < 5
-      , aeson                    >= 1.0 && < 2.2
+      , aeson                    >= 1.0 && < 2.3
       , attoparsec
+      , attoparsec-aeson         >= 2.1.0.0 && < 2.3
       , base64-bytestring
       , blaze-html               >= 0.9
       , bytestring               >= 0.10
@@ -29,13 +30,13 @@
       , http-api-data            >= 0.3
       , lift-type                >= 0.1.0.0 && < 0.2.0.0
       , monad-logger             >= 0.3.28
-      , mtl                                   
+      , mtl
       , path-pieces              >= 0.2
       , resource-pool            >= 0.2.3
       , resourcet                >= 1.1.10
       , scientific
       , silently
-      , template-haskell         >= 2.13 && < 2.20
+      , template-haskell         >= 2.13 && < 2.22
       , text                     >= 1.2
       , th-lift-instances        >= 0.1.14    && < 0.2
       , time                     >= 1.6
@@ -46,13 +47,13 @@
       , vault
       , vector
 
-    default-extensions: 
+    default-extensions:
         FlexibleContexts
       , MultiParamTypeClasses
       , OverloadedStrings
       , TypeFamilies
 
-    exposed-modules: 
+    exposed-modules:
         Database.Persist
         Database.Persist.Types
         Database.Persist.Names
@@ -92,7 +93,7 @@
         Database.Persist.Class.PersistField
         Database.Persist.Class.PersistStore
 
-    other-modules:   
+    other-modules:
         Database.Persist.Types.Base
 
         Database.Persist.Sql.Internal
@@ -106,9 +107,9 @@
 
     -- These modules only make sense for compilers with access to DerivingVia
     if impl(ghc >= 8.6.1)
-        exposed-modules: 
+        exposed-modules:
             Database.Persist.Compatible
-        other-modules: 
+        other-modules:
             Database.Persist.Compatible.Types
             Database.Persist.Compatible.TH
 
@@ -119,7 +120,7 @@
     type:          exitcode-stdio-1.0
     main-is:       main.hs
 
-    build-depends:   
+    build-depends:
         base >= 4.9 && < 5
       , aeson
       , attoparsec
@@ -164,7 +165,7 @@
                       , TypeFamilies
                       , TypeOperators
 
-    other-modules:   
+    other-modules:
         Database.Persist.ClassSpec
         Database.Persist.PersistValueSpec
         Database.Persist.QuasiSpec
