diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
+1.6 (2024-08)
+-------------
+
+* Added a package flag `binary`, enabling optional dependency on the `binary` package to provide instances of `Binary`.
+
 1.5 (2022-06)
 -------------
-* Add Julian `decade`, `century`, and `millennium` to `NonSI`.
+* Add Julian `decade` and `millennium` to `NonSI`.
 * Rename `deka` prefix to `deca` in accordance with [international spelling](https://www.bipm.org/documents/20126/41483022/SI-Brochure-9.pdf/fcf090b2-04e6-88cc-1149-c3e029ad8232).
 * Change `astronomicalUnit` symbol to lowercase (`au`).
 * Remove `semigroups` dependency.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -5,7 +5,6 @@
 Data kinds and closed type families provide a flexible, safe, and discoverable implementation that leads to largely self-documenting
 client code.
 
-[![Build Status](https://api.travis-ci.com/bjornbm/dimensional.svg?branch=master)](https://app.travis-ci.com/github/bjornbm/dimensional)
 [![Hackage Version](https://img.shields.io/hackage/v/dimensional.svg)](https://hackage.haskell.org/package/dimensional)
 [![Stackage version](https://www.stackage.org/package/dimensional/badge/lts?label=Stackage)](https://www.stackage.org/package/dimensional)
 
@@ -62,6 +61,21 @@
          putStrLn $ "Average speed is: " ++ showIn (mile / hour) averageSpeed
          putStrLn $ "If we don't want to be explicit about units, the show instance uses the SI basis: " ++ show averageSpeed
          putStrLn $ "The journey requires " ++ show wholeSeconds ++ " seconds, rounded up to the nearest second."
+```
+
+## Package Flags
+
+To provide `Binary` serialization for `Quantity` from the `binary` package, the `binary` flag can be used like so:
+
+```bash
+cabal install dimensional -f binary
+```
+
+If you use a `cabal.project` file, you can instead add the following clause to activate this package flag:
+
+```txt
+package dimensional
+    flags: +binary
 ```
 
 ## Contributing
diff --git a/dimensional.cabal b/dimensional.cabal
--- a/dimensional.cabal
+++ b/dimensional.cabal
@@ -1,8 +1,8 @@
 name:                dimensional
-version:             1.5
+version:             1.6
 license:             BSD3
 license-file:        LICENSE
-copyright:           Bjorn Buckwalter 2006-2022
+copyright:           Bjorn Buckwalter 2006-2024
 author:              Bjorn Buckwalter
 maintainer:          bjorn@buckwalter.se
 stability:           experimental
@@ -11,7 +11,13 @@
 category:            Math, Physics
 synopsis:            Statically checked physical dimensions
 cabal-version:       >= 1.10
-tested-with:         GHC == 8.0.1, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.8.3, GHC == 8.10.4
+tested-with:         GHC == 8.10.7,
+                     GHC == 9.0.2,
+                     GHC == 9.2.8,
+                     GHC == 9.4.8,
+                     GHC == 9.6.6,
+                     GHC == 9.8.2,
+                     GHC == 9.10.1
 build-type:          Simple
 
 description:
@@ -37,6 +43,11 @@
                      examples/GM.lhs,
                      examples/NewtonianMechanics.hs
 
+flag binary
+  description: Provide instances for use with the binary package.
+  default:     False
+  manual:      True
+
 source-repository head
   type:     git
   location: https://github.com/bjornbm/dimensional/
@@ -72,6 +83,9 @@
                        Numeric.Units.Dimensional.Float
   other-modules:       Numeric.Units.Dimensional.Internal
                        Numeric.Units.Dimensional.UnitNames.Internal
+  if flag(binary)
+    build-depends:     binary >= 0.7 && < 1
+    cpp-options:       -DUSE_BINARY
 
 test-suite tests
   type:                exitcode-stdio-1.0
@@ -90,19 +104,6 @@
                        QuickCheck,
                        base
   build-tool-depends: hspec-discover:hspec-discover == 2.*
-
-test-suite doctests
-  type:                exitcode-stdio-1.0
-  ghc-options:         -threaded
-  main-is:             DocTests.hs
-  hs-source-dirs:      tests
-  default-language:    Haskell2010
-  build-depends:       dimensional,
-                       doctest,
-                       Glob,
-                       QuickCheck,
-                       template-haskell,
-                       base
 
 benchmark simple
   type:                exitcode-stdio-1.0
diff --git a/src/Numeric/Units/Dimensional.hs b/src/Numeric/Units/Dimensional.hs
--- a/src/Numeric/Units/Dimensional.hs
+++ b/src/Numeric/Units/Dimensional.hs
@@ -240,6 +240,8 @@
 -- $setup
 -- >>> :set -XFlexibleInstances
 -- >>> :set -XNoImplicitPrelude
+-- >>> :set -fno-warn-orphans
+-- >>> :set -fno-warn-type-defaults
 -- >>> import Test.QuickCheck.Arbitrary
 -- >>> import Numeric.Units.Dimensional.Prelude
 -- >>> import Numeric.Units.Dimensional.Float
diff --git a/src/Numeric/Units/Dimensional/Dimensions/TermLevel.hs b/src/Numeric/Units/Dimensional/Dimensions/TermLevel.hs
--- a/src/Numeric/Units/Dimensional/Dimensions/TermLevel.hs
+++ b/src/Numeric/Units/Dimensional/Dimensions/TermLevel.hs
@@ -1,6 +1,7 @@
 {-# OPTIONS_HADDOCK not-home, show-extensions #-}
 
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DefaultSignatures #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric #-}
@@ -36,6 +37,9 @@
 where
 
 import Control.DeepSeq
+#if USE_BINARY
+import qualified Data.Binary
+#endif
 import Data.Data
 import Data.Semigroup (Semigroup(..))
 import Data.Monoid (Monoid(..))
@@ -44,6 +48,7 @@
 import qualified Prelude as P
 
 -- $setup
+-- >>> :set -fno-warn-orphans
 -- >>> import Prelude (negate)
 -- >>> import Control.Applicative
 -- >>> import Test.QuickCheck.Arbitrary
@@ -66,6 +71,10 @@
   mempty = dOne
   mappend = (<>)
 
+#if USE_BINARY
+instance Data.Binary.Binary Dimension'
+#endif
+
 -- | The dimension of a dynamic value, which may not have any dimension at all.
 data DynamicDimension = NoDimension -- ^ The value has no valid dimension.
                       | SomeDimension Dimension' -- ^ The value has the given dimension.
@@ -73,6 +82,10 @@
   deriving (Eq, Ord, Show, Data, Generic, Typeable)
 
 instance NFData DynamicDimension where
+
+#if USE_BINARY
+instance Data.Binary.Binary DynamicDimension
+#endif
 
 -- | Dimensional values, or those that are only possibly dimensional, inhabit this class,
 -- which allows access to a term-level representation of their dimension.
diff --git a/src/Numeric/Units/Dimensional/Dynamic.hs b/src/Numeric/Units/Dimensional/Dynamic.hs
--- a/src/Numeric/Units/Dimensional/Dynamic.hs
+++ b/src/Numeric/Units/Dimensional/Dynamic.hs
@@ -9,6 +9,7 @@
 Defines types for manipulation of units and quantities without phantom types for their dimensions.
 -}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric #-}
@@ -37,6 +38,9 @@
 
 import Control.DeepSeq
 import Control.Monad
+#if USE_BINARY
+import qualified Data.Binary
+#endif
 import Data.Data
 import Data.ExactPi
 import Data.Kind
@@ -115,6 +119,10 @@
   mempty = demoteQuantity (1 Dim.*~ one)
   mappend = (<>)
 
+#if USE_BINARY
+instance (Data.Binary.Binary a) => Data.Binary.Binary (AnyQuantity a)
+#endif
+
 -- | Possibly a 'Quantity' whose 'Dimension' is only known dynamically.
 --
 -- By modeling the absence of a value, this type differs from 'AnyQuantity' in that it may
@@ -193,6 +201,10 @@
 instance Num a => Monoid (DynQuantity a) where
   mempty = demoteQuantity (1 Dim.*~ one)
   mappend = (<>)
+
+#if USE_BINARY
+instance (Data.Binary.Binary a) => Data.Binary.Binary (DynQuantity a)
+#endif
 
 -- | A 'DynQuantity' which does not correspond to a value of any dimension.
 invalidQuantity :: DynQuantity a
diff --git a/src/Numeric/Units/Dimensional/Float.hs b/src/Numeric/Units/Dimensional/Float.hs
--- a/src/Numeric/Units/Dimensional/Float.hs
+++ b/src/Numeric/Units/Dimensional/Float.hs
@@ -45,6 +45,7 @@
 import Numeric.Units.Dimensional.Coercion
 
 -- $setup
+-- >>> :set -fno-warn-type-defaults
 -- >>> :set -XExtendedDefaultRules
 -- >>> :set -XNegativeLiterals
 
diff --git a/src/Numeric/Units/Dimensional/Internal.hs b/src/Numeric/Units/Dimensional/Internal.hs
--- a/src/Numeric/Units/Dimensional/Internal.hs
+++ b/src/Numeric/Units/Dimensional/Internal.hs
@@ -28,6 +28,9 @@
 import Control.Applicative
 import Control.DeepSeq
 import Data.AEq (AEq)
+#if USE_BINARY
+import qualified Data.Binary
+#endif
 import Data.Coerce (coerce)
 import Data.Data
 import Data.Kind
@@ -57,6 +60,7 @@
 
 -- $setup
 -- >>> :set -XNoImplicitPrelude
+-- >>> :set -fno-warn-type-defaults
 -- >>> import Numeric.Units.Dimensional.Prelude
 
 -- | A unit of measurement.
@@ -136,6 +140,10 @@
 instance (Num a) => Monoid (SQuantity s d a) where
   mempty = Quantity 0
   mappend = (<>)
+
+#if USE_BINARY
+deriving instance (Data.Binary.Binary a) => Data.Binary.Binary (SQuantity s d a)
+#endif
 
 {-
 
diff --git a/src/Numeric/Units/Dimensional/NonSI.hs b/src/Numeric/Units/Dimensional/NonSI.hs
--- a/src/Numeric/Units/Dimensional/NonSI.hs
+++ b/src/Numeric/Units/Dimensional/NonSI.hs
@@ -85,6 +85,7 @@
 import qualified Prelude
 
 -- $setup
+-- >>> :set -fno-warn-type-defaults
 -- >>> import Data.ExactPi
 -- >>> import Data.Function (on)
 -- >>> import Numeric.Units.Dimensional.Coercion
diff --git a/src/Numeric/Units/Dimensional/Quantities.hs b/src/Numeric/Units/Dimensional/Quantities.hs
--- a/src/Numeric/Units/Dimensional/Quantities.hs
+++ b/src/Numeric/Units/Dimensional/Quantities.hs
@@ -418,6 +418,7 @@
 -}
 
 -- $setup
+-- >>> :set -fno-warn-type-defaults
 -- >>> import Numeric.Units.Dimensional.Prelude
 
 -- | Constructs a unit of area from a unit of length, taking the area of a square whose sides are that length.
diff --git a/src/Numeric/Units/Dimensional/SIUnits.hs b/src/Numeric/Units/Dimensional/SIUnits.hs
--- a/src/Numeric/Units/Dimensional/SIUnits.hs
+++ b/src/Numeric/Units/Dimensional/SIUnits.hs
@@ -52,9 +52,9 @@
   astronomicalUnit,
   -- * SI Prefixes
   -- $multiples
-  deka, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta,
+  deka, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta,
   -- $submultiples
-  deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto,
+  deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto, ronto, quecto,
   -- $reified-prefixes
   Prefix, applyPrefix, siPrefixes
 )
@@ -88,7 +88,7 @@
     n' = N.applyPrefix p (name u)
     x = N.scaleFactor p
 
-deca, deka, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta
+deca, deka, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta
   :: Num a => Unit 'Metric d a -> Unit 'NonMetric d a
 -- | The "deca" prefix, denoting a factor of 10.
 deca  = applyMultiple I.deca -- International English.
@@ -112,7 +112,12 @@
 zetta = applyMultiple I.zetta
 -- | The "yotta" prefix, denoting a factor of 10^24.
 yotta = applyMultiple I.yotta
+-- | The "ronna" prefix, denoting a factor of 10^27.
+ronna = applyMultiple I.ronna
+-- | The "quetta" prefix, denoting a factor of 10^30.
+quetta = applyMultiple I.quetta
 
+
 {- $submultiples
 Then the submultiples.
 -}
@@ -124,7 +129,7 @@
     n' = N.applyPrefix p (name u)
     x = N.scaleFactor p
 
-deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto
+deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto, ronto, quecto
   :: Fractional a => Unit 'Metric d a -> Unit 'NonMetric d a
 -- | The "deci" prefix, denoting a factor of 0.1.
 deci  = applyPrefix I.deci
@@ -146,6 +151,11 @@
 zepto = applyPrefix I.zepto
 -- | The "yocto" prefix, denoting a factor of 10^-24.
 yocto = applyPrefix I.yocto
+-- | The "ronto" prefix, denoting a factor of 10^-27.
+ronto = applyPrefix I.ronto
+-- | The "quecto" prefix, denoting a factor of 10^-30.
+quecto = applyPrefix I.quecto
+
 
 {- $reified-prefixes
 
diff --git a/src/Numeric/Units/Dimensional/UnitNames/Internal.hs b/src/Numeric/Units/Dimensional/UnitNames/Internal.hs
--- a/src/Numeric/Units/Dimensional/UnitNames/Internal.hs
+++ b/src/Numeric/Units/Dimensional/UnitNames/Internal.hs
@@ -187,7 +187,7 @@
 baseUnitNames :: [UnitName 'NonMetric]
 baseUnitNames = [weaken nMeter, nKilogram, weaken nSecond, weaken nAmpere, weaken nKelvin, weaken nMole, weaken nCandela]
 
-deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta :: Prefix
+deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta :: Prefix
 deca  = prefix "da" "da" "deca" 1e1
 hecto = prefix "h" "h" "hecto"  1e2
 kilo  = prefix "k" "k" "kilo"   1e3
@@ -198,7 +198,10 @@
 exa   = prefix "E" "E" "exa"    1e18
 zetta = prefix "Z" "Z" "zetta"  1e21
 yotta = prefix "Y" "Y" "yotta"  1e24
-deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto :: Prefix
+ronna = prefix "R" "R" "ronna" 1e27
+quetta = prefix "Q" "Q" "quetta" 1e30
+
+deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto, ronto, quecto :: Prefix
 deci  = prefix "d" "d" "deci"   1e-1
 centi = prefix "c" "c" "centi"  1e-2
 milli = prefix "m" "m" "milli"  1e-3
@@ -209,10 +212,13 @@
 atto  = prefix "a" "a" "atto"   1e-18
 zepto = prefix "z" "z" "zepto"  1e-21
 yocto = prefix "y" "y" "yocto"  1e-24
+ronto = prefix "r" "r" "ronto"  1e-27
+quecto = prefix "q" "q" "quecto"  1e-30
 
+
 -- | A list of all 'Prefix'es defined by the SI.
 siPrefixes :: [Prefix]
-siPrefixes = [yocto, zepto, atto, femto, pico, nano, micro, milli, centi, deci, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta]
+siPrefixes = [quecto, ronto, yocto, zepto, atto, femto, pico, nano, micro, milli, centi, deci, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta]
 
 -- | Forms a 'UnitName' from a 'Metric' name by applying a metric prefix.
 applyPrefix :: Prefix -> UnitName 'Metric -> UnitName 'NonMetric
diff --git a/tests/DocTests.hs b/tests/DocTests.hs
deleted file mode 100644
--- a/tests/DocTests.hs
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE TypeSynonymInstances #-}
-
-module Main (main) where
-
-import System.FilePath.Glob (glob)
-import Test.DocTest (doctest)
-
-#if MIN_VERSION_base(4,12,0)
-doctestFlags = ["-XNoStarIsType"]
-#else
-doctestFlags = []
-#endif
-
-main :: IO ()
-main = glob "src/**/*.hs" >>= (doctest . (doctestFlags++))
