diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,12 @@
+## Changes in 0.12.1 [2021.10.30]
+ - Backport `Solo` to the `Data.Tuple.Compat` module. If using `ghc-prim-0.7.0`
+   or later, `Solo` is taken from `ghc-prim`. If using an older version of
+   `ghc-prim`, `Solo` is taken from the `OneTuple` compatibility library.
+
+ - This coincides with the `base-compat-0.12.1` release. Refer to the
+   [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0121-20211030)
+   for more details.
+
 ## Changes in 0.12.0 [2021.08.29]
  - `Data.Semigroup.Compat{.Repl.Batteries}` no longer re-exports the `Option`
    data type or the `option` function, as both have been removed in
diff --git a/base-compat-batteries.cabal b/base-compat-batteries.cabal
--- a/base-compat-batteries.cabal
+++ b/base-compat-batteries.cabal
@@ -1,5 +1,5 @@
 name:             base-compat-batteries
-version:          0.12.0
+version:          0.12.1
 license:          MIT
 license-file:     LICENSE
 copyright:        (c) 2012-2018 Simon Hengel,
@@ -48,7 +48,8 @@
       Haskell2010
   build-depends:
       base        >= 4.3 && < 5,
-      base-compat == 0.12.0
+      base-compat == 0.12.1,
+      ghc-prim
   if !impl(ghc >= 7.8)
     build-depends:
       tagged >= 0.8.5 && < 0.9
@@ -61,7 +62,7 @@
       fail                >= 4.9.0.0 && < 4.10,
       semigroups          >= 0.18.4  && < 0.20,
       transformers        >= 0.2     && < 0.6,
-      transformers-compat >= 0.6     && < 0.7
+      transformers-compat >= 0.6     && < 0.8
   if !impl(ghc >= 8.2)
     build-depends:
       bifunctors           >= 5.5.2 && < 5.6,
@@ -69,6 +70,9 @@
   if !impl(ghc >= 8.6)
     build-depends:
       contravariant >= 1.5 && < 1.6
+  if !impl(ghc >= 9.0)
+    build-depends:
+      OneTuple >= 0.3 && < 0.4
   ghc-options:
       -fno-warn-duplicate-exports
   if impl(ghc >= 7.10)
@@ -111,6 +115,7 @@
       Data.Semigroup.Compat
       Data.STRef.Compat
       Data.String.Compat
+      Data.Tuple.Compat
       Data.Type.Coercion.Compat
       Data.Type.Equality.Compat
       Data.Version.Compat
@@ -172,6 +177,7 @@
       Data.Semigroup.Compat.Repl.Batteries
       Data.STRef.Compat.Repl.Batteries
       Data.String.Compat.Repl.Batteries
+      Data.Tuple.Compat.Repl.Batteries
       Data.Type.Coercion.Compat.Repl.Batteries
       Data.Type.Equality.Compat.Repl.Batteries
       Data.Version.Compat.Repl.Batteries
diff --git a/src/Data/Tuple/Compat.hs b/src/Data/Tuple/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Tuple/Compat.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
+module Data.Tuple.Compat
+  ( Solo (..)
+  , fst
+  , snd
+  , curry
+  , uncurry
+  , swap
+  ) where
+
+#if MIN_VERSION_ghc_prim(0,7,0)
+import "base-compat" Data.Tuple.Compat
+#else
+import "base" Data.Tuple
+import "OneTuple" Data.Tuple.Solo (Solo(..))
+#endif
diff --git a/src/Data/Tuple/Compat/Repl/Batteries.hs b/src/Data/Tuple/Compat/Repl/Batteries.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Tuple/Compat/Repl/Batteries.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE PackageImports #-}
+{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}
+-- | Reexports "Data.Tuple.Compat"
+-- from a globally unique namespace.
+module Data.Tuple.Compat.Repl.Batteries (
+  module Data.Tuple.Compat
+) where
+import "this" Data.Tuple.Compat
diff --git a/test/SafeHaskellSpec.hs b/test/SafeHaskellSpec.hs
--- a/test/SafeHaskellSpec.hs
+++ b/test/SafeHaskellSpec.hs
@@ -38,6 +38,7 @@
 import Data.Semigroup.Compat ()
 import Data.STRef.Compat ()
 import Data.String.Compat ()
+import Data.Tuple.Compat ()
 import Data.Type.Coercion.Compat ()
 import Data.Type.Equality.Compat ()
 import Data.Version.Compat ()
