diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-## [_Unreleased_](https://github.com/freckle/yesod-session-persist/compare/v__...main)
+## [_Unreleased_](https://github.com/freckle/yesod-session-persist/compare/v0.0.0.1...main)
+
+## [v0.0.0.1](https://github.com/freckle/yesod-session-persist/compare/v0.0.0.0...v0.0.0.1)
+
+Add support for `base64` version `1.0`
 
 ## [v0.0.0.0](https://github.com/freckle/yesod-session-persist/tree/v0.0.0.0)
 
diff --git a/internal/Base64.hs b/internal/Base64.hs
new file mode 100644
--- /dev/null
+++ b/internal/Base64.hs
@@ -0,0 +1,30 @@
+{-# LANGUAGE CPP #-}
+
+module Base64
+  ( encodeBase64
+  , decodeBase64
+  ) where
+
+import Data.ByteString (ByteString)
+import Data.Either (Either)
+import Data.Function ((.))
+import Data.Text (Text)
+import Data.Text.Encoding qualified as T
+
+#if MIN_VERSION_base64(1,0,0)
+import Data.Base64.Types qualified as I (extractBase64)
+import Data.ByteString.Base64.URL qualified as I (decodeBase64Untyped, encodeBase64)
+#else
+import Data.ByteString.Base64.URL qualified as I (decodeBase64, encodeBase64)
+#endif
+
+encodeBase64 :: ByteString -> Text
+decodeBase64 :: Text -> Either Text ByteString
+
+#if MIN_VERSION_base64(1,0,0)
+encodeBase64 = I.extractBase64 . I.encodeBase64
+decodeBase64 = I.decodeBase64Untyped . T.encodeUtf8
+#else
+encodeBase64 = I.encodeBase64
+decodeBase64 = I.decodeBase64 . T.encodeUtf8
+#endif
diff --git a/internal/Session/Key.hs b/internal/Session/Key.hs
--- a/internal/Session/Key.hs
+++ b/internal/Session/Key.hs
@@ -9,7 +9,7 @@
 
 import Internal.Prelude
 
-import Data.ByteString.Base64.URL qualified as B64URL
+import Base64 (decodeBase64, encodeBase64)
 import Data.ByteString.Char8 qualified as BS8
 import Data.Text qualified as T
 import Data.Text.Encoding (decodeUtf8', encodeUtf8)
@@ -34,7 +34,10 @@
 makeSessionKeyManager :: Monad m => Randomization m -> SessionKeyManager m
 makeSessionKeyManager (Randomization generateRandomBytes) =
   let
-    new = SessionKey . B64URL.encodeBase64 <$> generateRandomBytes keyLengthInBytes
+    new =
+      SessionKey
+        . encodeBase64
+        <$> generateRandomBytes keyLengthInBytes
 
     check (SessionKey text) =
       T.length text
@@ -42,7 +45,7 @@
         && either
           (const False)
           ((== keyLengthInBytes) . BS8.length)
-          (B64URL.decodeBase64 $ encodeUtf8 text)
+          (decodeBase64 text)
   in
     SessionKeyManager {new, check}
 
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: yesod-session-persist
-version: 0.0.0.0
+version: 0.0.0.1
 maintainer: Freckle Education
 category: Web
 github: freckle/yesod-session-persist
diff --git a/yesod-session-persist.cabal b/yesod-session-persist.cabal
--- a/yesod-session-persist.cabal
+++ b/yesod-session-persist.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.0
 name:               yesod-session-persist
-version:            0.0.0.0
+version:            0.0.0.1
 license:            MIT
 license-file:       LICENSE
 maintainer:         Freckle Education
@@ -47,6 +47,7 @@
 
 library internal
     exposed-modules:
+        Base64
         Comparison
         Embedding
         Internal.Prelude
