diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,6 @@
+# 0.3.0.1
+ * Add support for GHC 9.6
+
 # 0.3.0
  * Add support for Nix shell environments ([#58](https://github.com/martijnbastiaan/doctest-parallel/pull/58))
  * `Language.Haskell.GhciWrapper` has been moved to `Test.DocTest.Internal.GhciWrapper`. This module was never intended to be part of the public API. ([#61](https://github.com/martijnbastiaan/doctest-parallel/pull/61))
diff --git a/doctest-parallel.cabal b/doctest-parallel.cabal
--- a/doctest-parallel.cabal
+++ b/doctest-parallel.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.0
 
 name:           doctest-parallel
-version:        0.3.0
+version:        0.3.0.1
 synopsis:       Test interactive Haskell examples
 description:    The doctest program checks examples in source code comments.  It is modeled
                 after doctest for Python (<https://docs.python.org/3/library/doctest.html>).
@@ -25,6 +25,7 @@
   , GHC == 9.0.2
   , GHC == 9.2.5
   , GHC == 9.4.3
+  , GHC == 9.6.1
 extra-source-files:
     example/example.cabal
     example/src/Example.hs
@@ -90,7 +91,7 @@
       Data.List.Extra
       Paths_doctest_parallel
   build-depends:
-      Cabal >= 2.4 && < 3.9
+      Cabal >= 2.4 && < 3.10
     , Glob
     , base >=4.10 && <5
     , base-compat >=0.7.0
@@ -100,7 +101,7 @@
     , directory
     , exceptions
     , filepath
-    , ghc >=8.2 && <9.5
+    , ghc >=8.2 && <9.7
     , ghc-paths >=0.1.0.9
     , process
     , random >= 1.2
diff --git a/src/Test/DocTest/Internal/Extract.hs b/src/Test/DocTest/Internal/Extract.hs
--- a/src/Test/DocTest/Internal/Extract.hs
+++ b/src/Test/DocTest/Internal/Extract.hs
@@ -50,9 +50,11 @@
 #elif __GLASGOW_HASKELL__ < 902
 import           GHC.Data.FastString (unpackFS)
 import           GHC.Types.Basic (SourceText(SourceText))
+#elif __GLASGOW_HASKELL__ < 906
+import           GHC.Types.SourceText (SourceText(SourceText))
+import           GHC.Data.FastString (unpackFS)
 #else
 import           GHC.Data.FastString (unpackFS)
-import           GHC.Types.SourceText (SourceText(SourceText))
 #endif
 
 import           System.Posix.Internals (c_getpid)
@@ -258,8 +260,10 @@
   header :: [(Maybe String, LHsDocString)]
 #if __GLASGOW_HASKELL__ < 904
   header  = [(Nothing, x) | Just x <- [hsmodHaddockModHeader source]]
-#else
+#elif __GLASGOW_HASKELL__ < 906
   header = [(Nothing, hsDocString <$> x) | Just x <- [hsmodHaddockModHeader source]]
+#else
+  header = [(Nothing, hsDocString <$> x) | Just x <- [hsmodHaddockModHeader (hsmodExt source)]]
 #endif
 
   exports :: [(Maybe String, LHsDocString)]
@@ -301,8 +305,10 @@
   fromLHsDecl (L (locA -> loc) decl) = case decl of
 #if __GLASGOW_HASKELL__ < 805
     AnnD (HsAnnotation (SourceText _) ModuleAnnProvenance (L _loc expr))
-#else
+#elif __GLASGOW_HASKELL__ < 906
     AnnD _ (HsAnnotation _ (SourceText _) ModuleAnnProvenance (L _loc expr))
+#else
+    AnnD _ (HsAnnotation _ ModuleAnnProvenance (L _loc expr))
 #endif
      | Just s <- extractLit loc expr
      -> select s
diff --git a/src/Test/DocTest/Internal/GhcUtil.hs b/src/Test/DocTest/Internal/GhcUtil.hs
--- a/src/Test/DocTest/Internal/GhcUtil.hs
+++ b/src/Test/DocTest/Internal/GhcUtil.hs
@@ -62,7 +62,9 @@
 
 setHaddockMode :: DynFlags -> DynFlags
 setHaddockMode dynflags = (gopt_set dynflags Opt_Haddock) {
-#if __GLASGOW_HASKELL__ >= 901
+#if __GLASGOW_HASKELL__ >= 906
+      backend   = noBackend
+#elif __GLASGOW_HASKELL__ >= 901
       backend   = NoBackend
 #else
       hscTarget = HscNothing
