diff --git a/Criterion/Main/Options.hs b/Criterion/Main/Options.hs
--- a/Criterion/Main/Options.hs
+++ b/Criterion/Main/Options.hs
@@ -25,7 +25,7 @@
 
 import Control.Monad (when)
 import Criterion.Analysis (validateAccessors)
-import Criterion.Main.Options.Internal (tabulate)
+import Criterion.Main.Options.Internal (tabulate, text)
 import Criterion.Types (Config(..), Verbosity(..), measureAccessors,
                         measureKeys)
 import Data.Char (isSpace, toLower)
@@ -36,13 +36,12 @@
 import GHC.Generics (Generic)
 import Options.Applicative
 import Options.Applicative.Help (Chunk(..))
-import Options.Applicative.Help.Pretty ((.$.))
+import Options.Applicative.Help.Pretty ((.$.), Doc)
 import Options.Applicative.Types
 import Paths_criterion (version)
 import Prelude ()
 import Prelude.Compat
 import Statistics.Types (mkCL,cl95)
-import Text.PrettyPrint.ANSI.Leijen (Doc, text)
 import qualified Data.Map as M
 
 -- | How to match a benchmark name.
diff --git a/Criterion/Main/Options/Internal.hs b/Criterion/Main/Options/Internal.hs
--- a/Criterion/Main/Options/Internal.hs
+++ b/Criterion/Main/Options/Internal.hs
@@ -9,17 +9,22 @@
 -- Stability   : experimental
 -- Portability : GHC
 --
--- Provides a shim on top of @optparse-applicative@'s 'Options.tabulate'
--- function that is backwards-compatible with pre-@0.17.*@ versions of
--- @optparse-applicative@. This is deliberately kept separate from the rest of
--- "Criterion.Main.Options" because this function requires CPP to define, and
+-- Provides a shim on top of @optparse-applicative@ to define two functions:
+--
+-- * Define a 'tabulate' function that is backwards-compatible with
+--   pre-@0.17.*@ versions of @optparse-applicative@.
+-- * Define a 'text' function that is forward-compatible with
+--   @optparse-applicative-0.18.*@ or later.
+--
+-- These are deliberately kept separate from the rest of
+-- "Criterion.Main.Options" because these functions require CPP to define, and
 -- there is a Haddock comment in "Criterion.Main.Options" that will cause the
 -- CPP preprocessor to trigger an \"unterminated comment\" error. Ugh.
 --
--- TODO: When we support @optparse-applicative-0.17@ as the minimum, remove
--- this module and simply inline the definition of 'tabulate' in
+-- TODO: When we support @optparse-applicative-0.18@ as the minimum, remove
+-- this module, and simply inline the definitions of 'tabulate' and 'text' in
 -- "Criterion.Main.Options".
-module Criterion.Main.Options.Internal (tabulate) where
+module Criterion.Main.Options.Internal (tabulate, text) where
 
 import qualified Options.Applicative.Help as Options
 import Options.Applicative.Help (Chunk, Doc)
@@ -35,4 +40,13 @@
 tabulate = Options.tabulate (prefTabulateFill defaultPrefs)
 #else
 tabulate = Options.tabulate
+#endif
+
+-- | A shim on top of 'Options.pretty' from @optparse-applicative@ that is
+-- forward-compatible with @optparse-applicative-0.18.*@ or later.
+text :: String -> Doc
+#if MIN_VERSION_optparse_applicative(0,18,0)
+text = Options.pretty
+#else
+text = Options.text
 #endif
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -13,14 +13,6 @@
 in the <a href="/examples"
 target="_blank">examples directory</a>.
 
-
-# Building and installing
-
-To build and install criterion, just run
-
-    cabal install criterion
-
-
 # Get involved!
 
 Please report bugs via the
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+1.6.1.0
+
+* Support building with `optparse-applicative-0.18.*`.
+
 1.6.0.0
 
 * `criterion-measurement-0.2.0.0` adds the `measPeakMbAllocated` field to
diff --git a/criterion.cabal b/criterion.cabal
--- a/criterion.cabal
+++ b/criterion.cabal
@@ -1,5 +1,5 @@
 name:           criterion
-version:        1.6.0.0
+version:        1.6.1.0
 synopsis:       Robust, reliable performance measurement and analysis
 license:        BSD3
 license-file:   LICENSE
@@ -29,7 +29,9 @@
   GHC==8.8.4,
   GHC==8.10.7,
   GHC==9.0.2,
-  GHC==9.2.2
+  GHC==9.2.7,
+  GHC==9.4.5,
+  GHC==9.6.1
 
 data-files:
   templates/*.css
@@ -85,9 +87,8 @@
     -- TODO: Eventually, we should bump the lower version bounds to >=2 so that
     -- we can remove some CPP in Criterion.Report. See #247.
     aeson >= 1 && < 2.2,
-    ansi-wl-pprint >= 0.6.7.2,
     base >= 4.5 && < 5,
-    base-compat-batteries >= 0.10 && < 0.13,
+    base-compat-batteries >= 0.10 && < 0.14,
     binary >= 0.5.1.0,
     binary-orphans >= 1.0.1 && < 1.1,
     bytestring >= 0.9 && < 1.0,
@@ -104,8 +105,8 @@
     js-chart >= 2.9.4 && < 3,
     mtl >= 2,
     mwc-random >= 0.8.0.3,
-    -- TODO: Depend on optparse-applicative-0.17 as the minimum (see #258)
-    optparse-applicative >= 0.13 && < 0.18,
+    -- TODO: Depend on optparse-applicative-0.18 as the minimum (see #258)
+    optparse-applicative >= 0.13 && < 0.19,
     parsec >= 3.1.0,
     statistics >= 0.14 && < 0.17,
     text >= 0.11,
diff --git a/examples/Fibber.hs b/examples/Fibber.hs
--- a/examples/Fibber.hs
+++ b/examples/Fibber.hs
@@ -1,8 +1,11 @@
--- The simplest/silliest of all benchmarks!
+{- cabal:
+build-depends: base, criterion
+-}
 
 import Criterion.Main
 
-fib :: Integer -> Integer
+-- The function we're benchmarking.
+fib :: Int -> Int
 fib m | m < 0     = error "negative!"
       | otherwise = go m
   where
diff --git a/examples/criterion-examples.cabal b/examples/criterion-examples.cabal
--- a/examples/criterion-examples.cabal
+++ b/examples/criterion-examples.cabal
@@ -22,7 +22,9 @@
   GHC==8.8.4,
   GHC==8.10.7,
   GHC==9.0.2,
-  GHC==9.2.2
+  GHC==9.2.7,
+  GHC==9.4.5,
+  GHC==9.6.1
 
 flag conduit-vs-pipes
   default: True
