diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for constraints-extras
 
+## 0.4.0.2
+
+* Support GHC 9.12
+
 ## 0.4.0.1
 
 * Support GHC 9.10
diff --git a/constraints-extras.cabal b/constraints-extras.cabal
--- a/constraints-extras.cabal
+++ b/constraints-extras.cabal
@@ -1,5 +1,5 @@
 name: constraints-extras
-version: 0.4.0.1
+version: 0.4.0.2
 synopsis: Utility package for constraints
 description: Convenience functions and TH for working with constraints. See <https://github.com/obsidiansystems/constraints-extras/blob/develop/README.md README.md> for example usage.
 category: Constraints
@@ -14,7 +14,7 @@
 cabal-version: 2.0
 tested-with:
   GHC ==8.6.5 || ==8.8.4 || ==8.10.7
-   || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.5 || ==9.8.2 || ==9.10.1
+   || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.6 || ==9.8.4 || ==9.10.1 || ==9.12.1
 extra-doc-files: ChangeLog.md
 extra-source-files: README.md
 
@@ -33,11 +33,18 @@
                   , TypeOperators
                   , ConstraintKinds
                   , TemplateHaskell
-  build-depends: base >=4.9 && <4.21
+  build-depends: base >=4.9 && <4.23
                , constraints >= 0.9 && < 0.15
-               , template-haskell >=2.11 && <2.23
+               , template-haskell >=2.11 && <2.24
+
   hs-source-dirs:  src
   default-language: Haskell2010
+
+  -- This is needed to get around a bug/misfeature in the cabal solver which is choosing an
+  -- old version of aeson (0.9.*) for some reason.
+  if impl (ghc >= 9.12)
+    build-depends: aeson >= 2
+
 
 executable readme
   if !flag(build-readme)
