diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
 # Revision history for nanopass
 
-## 0.0.3.0 -- YYYY-mm-dd
+## 0.0.3.1 -- 2025-11-12
+
+* updated dependency version bounds; now compiles on ghc 9.2 through 9.12
+* I am likely to drop support on ghc versions <9.6
+
+## 0.0.3.0 -- 2024-01-08
 
 * Stop generating records for each production.
   (This would create partial fields which were a rich source of bugs for clients.)
diff --git a/nanopass.cabal b/nanopass.cabal
--- a/nanopass.cabal
+++ b/nanopass.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: nanopass
-version: 0.0.3.0
+version: 0.0.3.1
 synopsis: Create compilers using small passes and many intermediate representations.
 description:
   Uses Template Haskell to facilitate using a vast number of intermediate representations.
@@ -9,8 +9,8 @@
   
   See README.md for more details.
 category: Language
-homepage: https://github.com/edemko/nanopass
-bug-reports: https://github.com/edemko/nanopass/issues
+homepage: https://github.com/marseillebd/nanopass
+bug-reports: https://github.com/marseillebd/nanopass/issues
 author: Marseille Bounchard
 maintainer: marseillebd@proton.me
 copyright: 2022 Marseille Bounchard
@@ -21,9 +21,15 @@
 
 source-repository head
   type: git
-  location: https://github.com/edemko/nanopass
+  location: https://github.com/marseillebd/nanopass
 
+common deps
+  build-depends:
+    , base >=4.11.1 && <4.22
+    , template-haskell >=2.18 && <2.24
+
 library
+  import: deps
   hs-source-dirs: src
   exposed-modules:
     Language.Nanopass
@@ -38,28 +44,25 @@
     Language.Nanopass.QQ
     Language.Nanopass.Xlate
   build-depends:
-    , base >=4.11.1 && <4.19
-    , containers >=0.6 && <0.7
-    , megaparsec >=9.2 && <9.3
+    , containers >=0.6 && <0.9
+    , megaparsec >=9.2 && <9.8
     , mtl >=2.2 && <2.4
     , sexpr-parser >=0.2.2.0 && <0.3
-    , template-haskell >=2.18 && <2.21
-    , text >=2.0 && <2.1
+    , text >=2.0 && <2.2
     , pretty-simple >=3.0 && <4.2
     , transformers >=0.5.6 && <0.7
   default-language: Haskell2010
   ghc-options: -Wall -Wpartial-fields -Wunticked-promoted-constructors
 
 executable dumb-nanopass-example
+  import: deps
   hs-source-dirs: app
   main-is: Main.hs
   other-modules:
     Lang
   build-depends:
-    , base >=4.11.1 && <4.19
     , nanopass
     , pretty-simple >=4 && <4.2
-    , template-haskell >=2.18 && <2.21
     , transformers >=0.5.6 && <0.7
   default-language: Haskell2010
   ghc-options:
diff --git a/src/Language/Nanopass.hs b/src/Language/Nanopass.hs
--- a/src/Language/Nanopass.hs
+++ b/src/Language/Nanopass.hs
@@ -2,7 +2,7 @@
 -- Languages can be created from scratch or by derivation using 'deflang'.
 -- The tedious parts of a compiler pass (or at least, most passes) can be generated with 'defpass'.
 --
--- More details and examples are given in the [readme](https://github.com/edemko/nanopass/blob/master/README.md).
+-- More details and examples are given in the [readme](https://github.com/marseillebd/nanopass/blob/master/README.md).
 module Language.Nanopass
   ( deflang
   , defpass
diff --git a/src/Language/Nanopass/LangDef.hs b/src/Language/Nanopass/LangDef.hs
--- a/src/Language/Nanopass/LangDef.hs
+++ b/src/Language/Nanopass/LangDef.hs
@@ -76,7 +76,7 @@
   -- define a type with one nullary ctor for every grammatical type
   langInfo <- defineLangHeader l
   -- define every nonterminal type
-  params <- gets langTyvars <&> \tvs -> tvs <&> \tv -> TH.PlainTV tv ()
+  params <- gets langTyvars <&> \tvs -> TH.plainTV <$> tvs
   nontermTypeDecs <- forM (Map.elems l.langInfo.nonterms) $ \nonterm -> do
     M.lift $ TH.addModFinalizer $ TH.putDoc (TH.DeclDoc nonterm.nontermName.th) $
       "This type is a non-terminal of the t'" ++ fromUpName l.langName.name ++ "' language."
diff --git a/src/Language/Nanopass/QQ.hs b/src/Language/Nanopass/QQ.hs
--- a/src/Language/Nanopass/QQ.hs
+++ b/src/Language/Nanopass/QQ.hs
@@ -29,7 +29,7 @@
 -- The syntax is based on s-expressions.
 --
 -- TODO document the syntax here, or for now you can look in "Nanopass.Internal.Parser"
--- More details and examples are given in the [readme](https://github.com/edemko/nanopass/blob/master/README.md).
+-- More details and examples are given in the [readme](https://github.com/marseillebd/nanopass/blob/master/README.md).
 deflang :: QuasiQuoter
 deflang = QuasiQuoter (bad "expression") (bad "pattern") (bad "type") go
   where
@@ -84,7 +84,7 @@
 -- None of the functions defined by this quasiquoter need to be expoted for Nanopass to function.
 -- I expect you will not export any of these definitions directly, but instead wrap them into a complete pass, and only export that pass.
 --
--- More details and examples are given in the [readme](https://github.com/edemko/nanopass/blob/master/README.md).
+-- More details and examples are given in the [readme](https://github.com/marseillebd/nanopass/blob/master/README.md).
 --
 -- TODO document the syntax here, but for now, see 'parsePass' for a grammar.
 defpass :: QuasiQuoter
diff --git a/src/Language/Nanopass/Xlate.hs b/src/Language/Nanopass/Xlate.hs
--- a/src/Language/Nanopass/Xlate.hs
+++ b/src/Language/Nanopass/Xlate.hs
@@ -236,7 +236,7 @@
     []
   where
   xlateName = TH.mkName "Xlate"
-  tvs = flip TH.PlainTV () <$> xlateParams x ++ [xlateFParam x]
+  tvs = TH.plainTV <$> xlateParams x ++ [xlateFParam x]
 
 declareTypeI :: XlateDef -> Q Dec
 declareTypeI x = do
@@ -276,7 +276,7 @@
     []
   where
   xlateName = TH.mkName "XlateI"
-  tvs = flip TH.PlainTV () <$> xlateParams x
+  tvs = TH.plainTV <$> xlateParams x
 
 declareXlateLifter :: XlateDef -> Q [Dec]
 declareXlateLifter x = do
