diff --git a/app/App/Cli/Run/LocalStack.hs b/app/App/Cli/Run/LocalStack.hs
--- a/app/App/Cli/Run/LocalStack.hs
+++ b/app/App/Cli/Run/LocalStack.hs
@@ -21,7 +21,6 @@
 import qualified Control.Concurrent                                as IO
 import qualified Control.Concurrent.STM                            as IO
 import qualified Control.Exception                                 as IO
-import           Control.Monad.IO.Class                            (MonadIO (..))
 import qualified Control.Monad.Trans.Resource                      as IO
 import qualified Control.Monad.Trans.Resource.Internal             as IO
 import           Data.Acquire                                      (ReleaseType (ReleaseNormal))
diff --git a/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs b/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs
--- a/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs
+++ b/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs
@@ -31,74 +31,84 @@
 import           HaskellWorks.Polysemy.Prelude
 import           HaskellWorks.TestContainers.LocalStack
 import           Lens.Micro
+import qualified System.Info                            as OS
 import qualified Test.Tasty                             as Tasty
 import qualified Test.Tasty.Hedgehog                    as H
 import qualified TestContainers.Tasty                   as TC
 
+isWindows :: Bool
+isWindows = OS.os == "mingw32"
+
+isMacos :: Bool
+isMacos = OS.os == "darwin"
+
 -- cabal test rds-data-test --test-options "--pattern \"/RDS integration test/\""
 tasty_rds_integration_test :: Tasty.TestTree
 tasty_rds_integration_test =
-  TC.withContainers (setupContainers' projectDefaultLocalStack) $ \getContainer ->
-    H.testProperty "RDS integration test" $ propertyOnce $ localWorkspace "rds-data" $ runLocalTestEnv getContainer $ do
-      rdsClusterDetails <- createRdsDbCluster "rds_data_migration" getContainer
+  if isWindows || isMacos
+    then Tasty.testGroup "LocalStackSpec skipped on Windows and MacOS" []
+    else
+      TC.withContainers (setupContainers' projectDefaultLocalStack) $ \getContainer ->
+        H.testProperty "RDS integration test" $ propertyOnce $ localWorkspace "rds-data" $ runLocalTestEnv getContainer $ do
+          rdsClusterDetails <- createRdsDbCluster "rds_data_migration" getContainer
 
-      dbClusterArn <- rdsClusterDetails ^. the @"createDbClusterResponse" . the @"dbCluster" . _Just . the @"dbClusterArn"
-        & nothingFail
+          dbClusterArn <- rdsClusterDetails ^. the @"createDbClusterResponse" . the @"dbCluster" . _Just . the @"dbClusterArn"
+            & nothingFail
 
-      runReaderStatementContextFromClusterDetails rdsClusterDetails $ do
-        waitUntilRdsDbClusterAvailable dbClusterArn
-          & trapFail @AWS.Error
-          & jotShowDataLog @AwsLogEntry
+          runReaderStatementContextFromClusterDetails rdsClusterDetails $ do
+            waitUntilRdsDbClusterAvailable dbClusterArn
+              & trapFail @AWS.Error
+              & jotShowDataLog @AwsLogEntry
 
-        initialiseDb
-          & trapFail @RdsDataError
-          & trapFail @AWS.Error
-          & jotShowDataLog @AwsLogEntry
+            initialiseDb
+              & trapFail @RdsDataError
+              & trapFail @AWS.Error
+              & jotShowDataLog @AwsLogEntry
 
-        migrateUp "db/migration.yaml"
-          & trapFail @AWS.Error
-          & trapFail @IOException
-          & trapFail @JsonDecodeError
-          & trapFail @RdsDataError
-          & trapFail @YamlDecodeError
-          & jotShowDataLog
+            migrateUp "db/migration.yaml"
+              & trapFail @AWS.Error
+              & trapFail @IOException
+              & trapFail @JsonDecodeError
+              & trapFail @RdsDataError
+              & trapFail @YamlDecodeError
+              & jotShowDataLog
 
-        upResult <-
-          ( executeStatement $ mconcat
-              [ "SELECT table_name"
-              , "  FROM information_schema.tables"
-              , "  WHERE table_schema = 'public'"
-              , "    AND table_type = 'BASE TABLE';"
-              ]
-          )
-          & trapFail @AWS.Error
-          & trapFail @RdsDataError
-          & jotShowDataLog
+            upResult <-
+              ( executeStatement $ mconcat
+                  [ "SELECT table_name"
+                  , "  FROM information_schema.tables"
+                  , "  WHERE table_schema = 'public'"
+                  , "    AND table_type = 'BASE TABLE';"
+                  ]
+              )
+              & trapFail @AWS.Error
+              & trapFail @RdsDataError
+              & jotShowDataLog
 
-        let upTables = upResult ^.. the @"records" . each . each . each . the @"stringValue" . _Just
+            let upTables = upResult ^.. the @"records" . each . each . each . the @"stringValue" . _Just
 
-        L.sort upTables === ["examples", "migration", "projects", "users"]
+            L.sort upTables === ["examples", "migration", "projects", "users"]
 
-        migrateDown "db/migration.yaml"
-          & trapFail @AWS.Error
-          & trapFail @IOException
-          & trapFail @JsonDecodeError
-          & trapFail @RdsDataError
-          & trapFail @YamlDecodeError
-          & jotShowDataLog
+            migrateDown "db/migration.yaml"
+              & trapFail @AWS.Error
+              & trapFail @IOException
+              & trapFail @JsonDecodeError
+              & trapFail @RdsDataError
+              & trapFail @YamlDecodeError
+              & jotShowDataLog
 
-        downResult <-
-          ( executeStatement $ mconcat
-              [ "SELECT table_name"
-              , "  FROM information_schema.tables"
-              , "  WHERE table_schema = 'public'"
-              , "    AND table_type = 'BASE TABLE'"
-              ]
-          )
-          & trapFail @AWS.Error
-          & trapFail @RdsDataError
-          & jotShowDataLog
+            downResult <-
+              ( executeStatement $ mconcat
+                  [ "SELECT table_name"
+                  , "  FROM information_schema.tables"
+                  , "  WHERE table_schema = 'public'"
+                  , "    AND table_type = 'BASE TABLE'"
+                  ]
+              )
+              & trapFail @AWS.Error
+              & trapFail @RdsDataError
+              & jotShowDataLog
 
-        let downTables = downResult ^.. the @"records" . each . each . each . the @"stringValue" . _Just
+            let downTables = downResult ^.. the @"records" . each . each . each . the @"stringValue" . _Just
 
-        L.sort downTables === ["migration"]
+            L.sort downTables === ["migration"]
diff --git a/polysemy/Data/RdsData/Polysemy/Core.hs b/polysemy/Data/RdsData/Polysemy/Core.hs
--- a/polysemy/Data/RdsData/Polysemy/Core.hs
+++ b/polysemy/Data/RdsData/Polysemy/Core.hs
@@ -16,7 +16,6 @@
 import qualified Amazonka.RDSData.BatchExecuteStatement as AWS
 import qualified Amazonka.RDSData.ExecuteStatement      as AWS
 import qualified Amazonka.Types                         as AWS
-import           Control.Monad.IO.Class                 (MonadIO)
 import           Data.Generics.Product.Any
 import           Data.RdsData.Aws
 import           Data.RdsData.Polysemy.Error
diff --git a/rds-data.cabal b/rds-data.cabal
--- a/rds-data.cabal
+++ b/rds-data.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.6
 
 name:                   rds-data
-version:                0.1.1.1
+version:                0.1.1.2
 synopsis:               Codecs for use with AWS rds-data
 description:            Codecs for use with AWS rds-data.
 category:               Data
@@ -13,7 +13,7 @@
 copyright:              2024 John Ky
 license:                BSD-3-Clause
 license-file:           LICENSE
-tested-with:            GHC == 9.6.6
+tested-with:            GHC == 9.6.6, GHC == 9.4.8
 build-type:             Simple
 extra-source-files:     README.md
 
@@ -39,10 +39,10 @@
 common hedgehog                                 { build-depends: hedgehog                                 >= 1.4        && < 2      }
 common hedgehog-extras                          { build-depends: hedgehog-extras                          >= 0.6.0.2    && < 0.7    }
 common http-client                              { build-depends: http-client                              >= 0.5.14     && < 0.8    }
-common hw-polysemy-amazonka                     { build-depends: hw-polysemy:amazonka                     >= 0.3.1      && < 0.4    }
-common hw-polysemy-core                         { build-depends: hw-polysemy:core                         >= 0.3.1      && < 0.4    }
-common hw-polysemy-hedgehog                     { build-depends: hw-polysemy:hedgehog                     >= 0.3.1      && < 0.4    }
-common hw-polysemy-testcontainers-localstack    { build-depends: hw-polysemy:testcontainers-localstack    >= 0.3.1      && < 0.4    }
+common hw-polysemy-amazonka                     { build-depends: hw-polysemy:amazonka                     >= 0.3.1.1    && < 0.4    }
+common hw-polysemy-core                         { build-depends: hw-polysemy:core                         >= 0.3.1.1    && < 0.4    }
+common hw-polysemy-hedgehog                     { build-depends: hw-polysemy:hedgehog                     >= 0.3.1.1    && < 0.4    }
+common hw-polysemy-testcontainers-localstack    { build-depends: hw-polysemy:testcontainers-localstack    >= 0.3.1.1    && < 0.4    }
 common hw-prelude                               { build-depends: hw-prelude                               >= 0.0.1.0    && < 0.1    }
 common microlens                                { build-depends: microlens                                >= 0.4.13     && < 0.5    }
 common mtl                                      { build-depends: mtl                                      >= 2          && < 3      }
diff --git a/src/Data/RdsData/Decode/Value.hs b/src/Data/RdsData/Decode/Value.hs
--- a/src/Data/RdsData/Decode/Value.hs
+++ b/src/Data/RdsData/Decode/Value.hs
@@ -58,7 +58,6 @@
 import           Data.Word
 import           Prelude                       hiding (fail, maybe, null)
 
-import qualified Amazonka.Data.ByteString      as AWS
 import qualified Data.Aeson                    as J
 import qualified Data.ByteString.Base64        as B64
 import qualified Data.ByteString.Base64.Lazy   as LB64
@@ -248,7 +247,7 @@
 
 bytestring :: DecodeValue ByteString
 bytestring =
-  AWS.toBS <$> base64
+  unBase64 <$> base64
 
 lazyText :: DecodeValue LT.Text
 lazyText =
diff --git a/src/Data/RdsData/Encode/Param.hs b/src/Data/RdsData/Encode/Param.hs
--- a/src/Data/RdsData/Encode/Param.hs
+++ b/src/Data/RdsData/Encode/Param.hs
@@ -60,7 +60,6 @@
 import           Lens.Micro
 import           Prelude                       hiding (maybe, null)
 
-import qualified Amazonka.Bytes                as AWS
 import qualified Amazonka.Data.Base64          as AWS
 import qualified Amazonka.RDSData              as AWS
 import qualified Data.Aeson                    as J
@@ -179,7 +178,7 @@
 
 bytestring :: EncodeParam ByteString
 bytestring =
-  (AWS.Base64 . AWS.encodeBase64) >$< base64
+  AWS.Base64 >$< base64
 
 lazyBytestring :: EncodeParam LBS.ByteString
 lazyBytestring =
diff --git a/test/Data/RdsDataSpec.hs b/test/Data/RdsDataSpec.hs
--- a/test/Data/RdsDataSpec.hs
+++ b/test/Data/RdsDataSpec.hs
@@ -79,7 +79,7 @@
       { TT.bigint             = 1234567890
       , TT.bigserial          = 1
       , TT.boolean            = True
-      , TT.bytea              = "EjQ="
+      , TT.bytea              = "\DC24"
       , TT.character          = "A"
       , TT.characters         = "AB"
       , TT.varyingCharacter   = "C"
