diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Changelog for the [`ghc-typelits-knownnat`](http://hackage.haskell.org/package/ghc-typelits-knownnat) package
 
+## 0.7.8 *February 20th 2023*
+* Support for GHC-9.6.0.20230210
+
 ## 0.7.7 *October 10th 2022*
 * Add support for GHC 9.4
 
diff --git a/ghc-typelits-knownnat.cabal b/ghc-typelits-knownnat.cabal
--- a/ghc-typelits-knownnat.cabal
+++ b/ghc-typelits-knownnat.cabal
@@ -1,5 +1,5 @@
 name:                ghc-typelits-knownnat
-version:             0.7.7
+version:             0.7.8
 synopsis:            Derive KnownNat constraints from other KnownNat constraints
 description:
   A type checker plugin for GHC that can derive \"complex\" @KnownNat@
@@ -54,8 +54,8 @@
                      CHANGELOG.md
 cabal-version:       >=1.10
 tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5,
-                     GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.4,
-                     GHC == 9.4.2
+                     GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.6,
+                     GHC == 9.4.4, GHC == 9.6.1
 
 source-repository head
   type: git
@@ -87,12 +87,12 @@
                        UndecidableInstances
                        ViewPatterns
   build-depends:       base                      >= 4.9      && <5,
-                       ghc                       >= 8.0.1    && <9.6,
-                       ghc-prim                  >= 0.4.0.0  && <0.10,
+                       ghc                       >= 8.0.1    && <9.8,
+                       ghc-prim                  >= 0.4.0.0  && <0.11,
                        ghc-tcplugins-extra       >= 0.3.1,
                        ghc-typelits-natnormalise >= 0.7.1    && <0.8,
-                       transformers              >= 0.5.2.0  && <0.6,
-                       template-haskell          >= 2.11.0.0 && <2.20
+                       transformers              >= 0.5.2.0  && <0.7,
+                       template-haskell          >= 2.11.0.0 && <2.21
   hs-source-dirs:      src
   default-language:    Haskell2010
   if flag(deverror)
@@ -101,7 +101,7 @@
     ghc-options:       -Wall
   if impl(ghc >= 8.0) && impl(ghc < 9.4)
     hs-source-dirs:    src-pre-ghc-9.4
-  if impl(ghc >= 9.4) && impl(ghc < 9.6)
+  if impl(ghc >= 9.4) && impl(ghc < 9.8)
     hs-source-dirs:    src-ghc-9.4
   if impl(ghc < 8.2)
     build-depends:     integer-gmp               >= 0.5.1.0
diff --git a/src-ghc-9.4/GHC/TypeLits/KnownNat/Solver.hs b/src-ghc-9.4/GHC/TypeLits/KnownNat/Solver.hs
--- a/src-ghc-9.4/GHC/TypeLits/KnownNat/Solver.hs
+++ b/src-ghc-9.4/GHC/TypeLits/KnownNat/Solver.hs
@@ -120,10 +120,19 @@
   (EqRel (NomEq), Pred (ClassPred,EqPred), classifyPredType)
 import GHC.Core.TyCo.Rep (Type (..), TyLit (..), UnivCoProvenance (PluginProv))
 import GHC.Core.TyCon (tyConName)
+#if MIN_VERSION_ghc(9,6,0)
 import GHC.Core.Type
+  (PredType, dropForAlls, funResultTy, mkNumLitTy, mkStrLitTy, mkTyConApp,
+   piResultTys, splitFunTys, splitTyConApp_maybe, tyConAppTyCon_maybe, typeKind,
+   irrelevantMult)
+import GHC.Core.TyCo.Compare
+  (eqType)
+#else
+import GHC.Core.Type
   (PredType, dropForAlls, eqType, funResultTy, mkNumLitTy, mkStrLitTy, mkTyConApp,
    piResultTys, splitFunTys, splitTyConApp_maybe, tyConAppTyCon_maybe, typeKind,
    irrelevantMult)
+#endif
 import GHC.Data.FastString (fsLit)
 import GHC.Driver.Plugins (Plugin (..), defaultPlugin, purePlugin)
 import GHC.Tc.Instance.Family (tcInstNewTyCon_maybe)
@@ -131,14 +140,29 @@
 import GHC.Tc.Types (TcPlugin(..), TcPluginSolveResult (..), getPlatform)
 import GHC.Tc.Types.Constraint
   (Ct, ctEvExpr, ctEvidence, ctEvPred, ctLoc, mkNonCanonical)
+#if MIN_VERSION_ghc(9,6,0)
 import GHC.Tc.Types.Evidence
+  (EvTerm (..), EvExpr, EvBindsVar, evDFunApp, mkEvCast)
+import GHC.Plugins
+  (Coercion, mkSymCo, mkTransCo)
+#else
+import GHC.Tc.Types.Evidence
   (EvTerm (..), EvExpr, EvBindsVar, evDFunApp, mkEvCast, mkTcSymCo, mkTcTransCo)
+#endif
 import GHC.Types.Id (idType)
 import GHC.Types.Name (nameModule_maybe, nameOccName)
 import GHC.Types.Name.Occurrence (mkTcOcc, occNameString)
 import GHC.Types.Unique.FM (emptyUFM)
 import GHC.Types.Var (DFunId)
 import GHC.Unit.Module (mkModuleName, moduleName, moduleNameString)
+
+#if MIN_VERSION_ghc(9,6,0)
+mkTcSymCo :: Coercion -> Coercion
+mkTcSymCo = mkSymCo
+
+mkTcTransCo :: Coercion -> Coercion -> Coercion
+mkTcTransCo = mkTransCo
+#endif
 
 -- | Classes and instances from "GHC.TypeLits.KnownNat"
 data KnownNatDefs
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -16,6 +16,9 @@
 import Data.Type.Equality ((:~:)(..))
 #if __GLASGOW_HASKELL__ >= 802
 import GHC.TypeNats
+#if __GLASGOW_HASKELL__ >= 906
+  hiding (type SNat)
+#endif
 import Numeric.Natural
 #else
 import GHC.TypeLits
