diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+## [v1.4.2](https://github.com/diagrams/diagrams-html5/tree/v1.4.2) (2023-04-17)
+
+- Support up to GHC 9.4
+- Bump upper bounds to allow:
+    - `base-4.17`
+    - `mtl-2.3`
+    - `lens-5.2`
+    - `containers-0.6`
+    - `text-2.0`
+    - `statestack-0.3`
+    - `diagrams-core-1.5`
+    - `diagrams-lib-1.5`
+
 ## [v1.4.1](https://github.com/diagrams/diagrams-html5/tree/v1.4.1) (2018-05-30)
 
 - test on GHC 8.4
diff --git a/diagrams-html5.cabal b/diagrams-html5.cabal
--- a/diagrams-html5.cabal
+++ b/diagrams-html5.cabal
@@ -1,5 +1,5 @@
 Name:                diagrams-html5
-Version:             1.4.1
+Version:             1.4.2
 Synopsis:            HTML5 canvas backend for diagrams drawing EDSL
 Description:         This package provides a modular backend for rendering
                      diagrams created with the diagrams EDSL using an
@@ -13,8 +13,9 @@
 Stability:           Experimental
 Category:            Graphics
 Build-type:          Simple
-Extra-source-files:  README.md, CHANGELOG.md
-Tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.2
+Extra-source-files:  README.md
+Extra-doc-files:     CHANGELOG.md
+Tested-with:         GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.1
 Cabal-version:       1.18
 Source-repository head
   type:     git
@@ -24,19 +25,19 @@
   Exposed-modules:     Diagrams.Backend.Html5
                        Diagrams.Backend.Html5.CmdLine
   Hs-source-dirs:      src
-  Build-depends:       base >= 4.7 && < 4.12,
-                       mtl >= 2.0 && < 3.0,
+  Build-depends:       base >= 4.7 && < 4.18,
+                       mtl >= 2.0 && < 2.4,
                        NumInstances >= 1.0 && < 1.5,
-                       diagrams-core >= 1.3 && < 1.5,
-                       diagrams-lib >= 1.3 && < 1.5,
+                       diagrams-core >= 1.3 && < 1.6,
+                       diagrams-lib >= 1.3 && < 1.6,
                        cmdargs >= 0.6 && < 0.11,
                        static-canvas >= 0.2 && < 0.3,
-                       lens >= 4.0 && < 4.17,
-                       containers >= 0.3 && < 0.6,
-                       text >= 1.0 && < 1.3,
+                       lens >= 4.0 && < 5.3,
+                       containers >= 0.3 && < 0.7,
+                       text >= 1.0 && < 1.3 || >= 2.0 && < 2.1,
                        data-default-class >= 0.0.1 && < 0.2,
-                       statestack >= 0.2 && <0.3,
-                       optparse-applicative >= 0.10 && < 0.15,
+                       statestack >= 0.2 && <0.4,
+                       optparse-applicative >= 0.10 && < 0.18,
                        split >= 0.2 && < 0.3
 
   Default-language:    Haskell2010
diff --git a/src/Diagrams/Backend/Html5.hs b/src/Diagrams/Backend/Html5.hs
--- a/src/Diagrams/Backend/Html5.hs
+++ b/src/Diagrams/Backend/Html5.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE TypeOperators         #-}
 {-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleInstances     #-}
@@ -83,8 +84,7 @@
   , standalone
 
   ) where
-
-import           Control.Monad.State          (when)
+import           Control.Monad                (when)
 import qualified Control.Monad.StateStack     as SS
 import           Control.Monad.Trans          (lift)
 
@@ -139,11 +139,10 @@
 runRenderM = flip SS.evalStateStackT def
 
 instance Semigroup (Render Html5 V2 Double) where
-  (<>) = mappend
+  C c1 <> C c2 = C (c1 >> c2)
 
 instance Monoid (Render Html5 V2 Double) where
   mempty  = C $ return ()
-  (C c1) `mappend` (C c2) = C (c1 >> c2)
 
 instance Backend Html5 V2 Double where
   data Render  Html5 V2 Double = C (RenderM ())
