diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+## [v1.4.1](https://github.com/diagrams/diagrams-canvas/tree/v1.4.1) (2018-05-09)
+
+- allow `base-4.11`
+- allow `lens-4.16`
+- Add `Semigroup (Render Canvas V2 Double)` instance
+
+## v1.4r1 (Hackage revision)
+
+- allow `base-4.10`
+- allow `optparse-applicative-0.14`
+
 ## [v1.4](https://github.com/diagrams/diagrams-canvas/tree/v1.4) (2016-10-26)
 
 - allow `lens-4.15`
diff --git a/diagrams-canvas.cabal b/diagrams-canvas.cabal
--- a/diagrams-canvas.cabal
+++ b/diagrams-canvas.cabal
@@ -1,5 +1,5 @@
 Name:                diagrams-canvas
-Version:             1.4
+Version:             1.4.1
 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
@@ -14,7 +14,7 @@
 Category:            Graphics
 Build-type:          Simple
 Extra-source-files:  README.md, CHANGELOG.md
-Tested-with:         GHC == 7.8.4, GHC == 7.10.2, GHC == 8.0.1
+Tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.2
 Cabal-version:       >=1.10
 Source-repository head
   type:     git
@@ -24,18 +24,18 @@
   Exposed-modules:     Diagrams.Backend.Canvas
                        Diagrams.Backend.Canvas.CmdLine
   Hs-source-dirs:      src
-  Build-depends:       base >= 4.6 && < 4.10,
+  Build-depends:       base >= 4.6 && < 4.12,
                        mtl >= 2.0 && < 3.0,
                        NumInstances >= 1.0 && < 1.5,
                        diagrams-core >= 1.3 && < 1.5,
                        diagrams-lib >= 1.3 && < 1.5,
                        cmdargs >= 0.6 && < 0.11,
                        blank-canvas >= 0.5 && < 0.7,
-                       lens >= 4.0 && < 4.16,
+                       lens >= 4.0 && < 4.17,
                        containers >= 0.3 && < 0.6,
                        text >= 1.0 && < 1.3,
                        data-default-class >= 0.0.1 && < 0.2,
                        statestack >= 0.2 && <0.3,
-                       optparse-applicative >= 0.13 && < 0.14
+                       optparse-applicative >= 0.13 && < 0.15
 
   Default-language:    Haskell2010
diff --git a/src/Diagrams/Backend/Canvas.hs b/src/Diagrams/Backend/Canvas.hs
--- a/src/Diagrams/Backend/Canvas.hs
+++ b/src/Diagrams/Backend/Canvas.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                   #-}
 {-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleInstances     #-}
@@ -136,9 +137,14 @@
 runRenderM :: RenderM a -> BC.Canvas a
 runRenderM = flip SS.evalStateStackT def
 
+instance Semigroup (Render Canvas V2 Double) where
+  C c1 <> C c2 = C (c1 >> c2)
+
 instance Monoid (Render Canvas V2 Double) where
   mempty  = C $ return ()
-  (C c1) `mappend` (C c2) = C (c1 >> c2)
+#if !MIN_VERSION_base(4,11,0)
+  mappend = (<>)
+#endif
 
 instance Backend Canvas V2 Double where
   data Render  Canvas V2 Double = C (RenderM ())
