diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+## [v1.5](https://github.com/diagrams/diagrams-rasterific/tree/v1.5) (2025-03-28)
+
+- allow `base-4.21`
+- allow `diagrams-lib-1.5`
+- Test on GHC 9.12
+- Remove no longer supported `DiagramLoopOpts`
+- bump version to 1.5
+
 ## [v1.4.3](https://github.com/diagrams/diagrams-rasterific/tree/v1.4.3) (2024-10-30)
 
 - Require `data-default-0.8`
diff --git a/diagrams-rasterific.cabal b/diagrams-rasterific.cabal
--- a/diagrams-rasterific.cabal
+++ b/diagrams-rasterific.cabal
@@ -1,5 +1,5 @@
 name:                diagrams-rasterific
-version:             1.4.3
+version:             1.5
 synopsis:            Rasterific backend for diagrams.
 description:         A full-featured backend for rendering
                      diagrams using the Rasterific rendering engine.
@@ -13,7 +13,7 @@
 build-type:          Simple
 extra-source-files:  fonts/*.ttf
 extra-doc-files:     README.md, CHANGELOG.md
-tested-with:         GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.5 || ==9.8.2 || ==9.10.1
+tested-with:         GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.5 || ==9.8.2 || ==9.10.1 || ==9.12.1
 cabal-version:       1.18
 Source-repository head
   type:     git
@@ -25,9 +25,9 @@
                        Diagrams.Backend.Rasterific.Text
   hs-source-dirs:      src
   other-modules:       Paths_diagrams_rasterific
-  build-depends:       base >= 4.2 && < 4.21,
+  build-depends:       base >= 4.2 && < 4.22,
                        diagrams-core >= 1.4 && < 1.6,
-                       diagrams-lib >= 1.4 && < 1.5,
+                       diagrams-lib >= 1.4 && < 1.6,
                        hashable >= 1.1 && < 1.6,
                        Rasterific >= 0.7.4 && < 0.8,
                        FontyFruity >= 0.5 && < 0.6,
@@ -48,10 +48,10 @@
   type:                exitcode-stdio-1.0
   main-is:             test-render.hs
   hs-source-dirs:      test
-  build-depends:       base >= 4.2 && < 4.21,
+  build-depends:       base >= 4.2 && < 4.22,
                        diagrams-rasterific,
                        diagrams-core >= 1.4 && < 1.6,
-                       diagrams-lib >= 1.4 && < 1.5
+                       diagrams-lib >= 1.4 && < 1.6
   ghc-options:         -Wall
   default-language:    Haskell2010
 
@@ -59,10 +59,10 @@
   type:                exitcode-stdio-1.0
   main-is:             test-widths.hs
   hs-source-dirs:      test
-  build-depends:       base >= 4.2 && < 4.21,
+  build-depends:       base >= 4.2 && < 4.22,
                        diagrams-rasterific,
                        diagrams-core >= 1.4 && < 1.6,
-                       diagrams-lib >= 1.4 && < 1.5
+                       diagrams-lib >= 1.4 && < 1.6
   ghc-options:         -Wall
   default-language:    Haskell2010
 
@@ -70,9 +70,9 @@
   type:                exitcode-stdio-1.0
   main-is:             test-size.hs
   hs-source-dirs:      test
-  build-depends:       base >= 4.2 && < 4.21,
+  build-depends:       base >= 4.2 && < 4.22,
                        diagrams-rasterific,
                        diagrams-core >= 1.4 && < 1.6,
-                       diagrams-lib >= 1.4 && < 1.5
+                       diagrams-lib >= 1.4 && < 1.6
   ghc-options:         -Wall
   default-language:    Haskell2010
diff --git a/src/Diagrams/Backend/Rasterific/CmdLine.hs b/src/Diagrams/Backend/Rasterific/CmdLine.hs
--- a/src/Diagrams/Backend/Rasterific/CmdLine.hs
+++ b/src/Diagrams/Backend/Rasterific/CmdLine.hs
@@ -94,11 +94,9 @@
 defaultMain = mainWith
 
 instance TypeableFloat n => Mainable (QDiagram Rasterific V2 n Any) where
-  type MainOpts (QDiagram Rasterific V2 n Any) = (DiagramOpts, DiagramLoopOpts)
+  type MainOpts (QDiagram Rasterific V2 n Any) = DiagramOpts
 
-  mainRender (opts,loopOpts) d = do
-      chooseRender opts d
-      defaultLoopRender loopOpts
+  mainRender opts d = chooseRender opts d
 
 chooseRender :: TypeableFloat n => DiagramOpts -> QDiagram Rasterific V2 n Any -> IO ()
 chooseRender opts d
@@ -159,12 +157,9 @@
 animMain = mainWith
 
 instance TypeableFloat n => Mainable (Animation Rasterific V2 n) where
-  type MainOpts (Animation Rasterific V2 n) =
-    ((DiagramOpts, DiagramAnimOpts), DiagramLoopOpts)
+  type MainOpts (Animation Rasterific V2 n) = (DiagramOpts, DiagramAnimOpts)
 
-  mainRender (opts, l) d = do
-    defaultAnimMainRender chooseRender output opts d
-    defaultLoopRender l
+  mainRender opts d = defaultAnimMainRender chooseRender output opts d
 
 -- | Extra options for animated GIFs.
 data GifOpts = GifOpts { _dither     :: Bool
