diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,8 @@
+# 0.1.0.3
+
+- Lower `base` minimum required base to 4.12 (GHC 8.6). Minimum
+  supported `unix` is still 2.8 because of `OsString`.
+
 # 0.1.0.2
 
 - Fix compatibility with `filepath-1.5`
diff --git a/directory-ospath-streaming.cabal b/directory-ospath-streaming.cabal
--- a/directory-ospath-streaming.cabal
+++ b/directory-ospath-streaming.cabal
@@ -5,7 +5,7 @@
 name:
   directory-ospath-streaming
 version:
-  0.1.0.2
+  0.1.0.3
 synopsis:
   Stream directory entries in constant memory in vanilla IO
 description:
@@ -28,6 +28,16 @@
 category:
   File, Streaming
 
+tested-with:
+  GHC == 8.6,
+  GHC == 8.8,
+  GHC == 8.10,
+  GHC == 9.2,
+  GHC == 9.4,
+  GHC == 9.6,
+  GHC == 9.8,
+  GHC == 9.10
+
 build-type:
   Simple
 
@@ -57,11 +67,7 @@
     False
 
 common ghc-options
-  default-language:
-    GHC2021
-
-  default-extensions:
-    LambdaCase
+  default-language: Haskell2010
 
   ghc-options:
     -Weverything
@@ -70,19 +76,28 @@
     -Wno-missed-specialisations
     -Wno-missing-import-lists
     -Wno-missing-local-signatures
-    -Wno-missing-safe-haskell-mode
     -Wno-safe
-    -Wno-type-defaults
     -Wno-unsafe
 
   if impl(ghc >= 8.8)
     ghc-options:
       -Wno-missing-deriving-strategies
 
+  if impl(ghc >= 8.10)
+    ghc-options:
+      -Wno-missing-safe-haskell-mode
+      -Wno-prepositive-qualified-module
+
   if impl(ghc >= 9.2)
     ghc-options:
       -Wno-missing-kind-signatures
 
+  if impl(ghc >= 9.8)
+    ghc-options:
+      -Wno-missing-role-annotations
+      -Wno-missing-poly-kind-signatures
+
+
 common depends-on-filepath
   if flag(os-string)
     build-depends:
@@ -100,7 +115,7 @@
   hs-source-dirs:
     src
   build-depends:
-    , base >= 4.16 && < 5
+    , base >= 4.12 && < 5
 
   if os(windows)
     build-depends:
@@ -108,6 +123,7 @@
       , directory >= 1.3.8
       , Win32 >= 2.13.3
   else
+    -- Cannot use lower version because it doesn’t support OsStrings
     build-depends:
       , unix >= 2.8
 
@@ -121,15 +137,15 @@
     .
     test
   build-depends:
-    , base >= 4.16
-    , directory
+    , base >= 4.12
     , directory-ospath-streaming
-    , random
     , tasty
     , tasty-hunit
   if !os(windows)
     build-depends:
-      unix >= 2.8
+      , directory
+      , random
+      , unix >= 2.8
   ghc-options:
     -rtsopts
     -main-is TestMain
diff --git a/src/System/Directory/OsPath/FileType.hs b/src/System/Directory/OsPath/FileType.hs
--- a/src/System/Directory/OsPath/FileType.hs
+++ b/src/System/Directory/OsPath/FileType.hs
@@ -4,7 +4,8 @@
 -- License:    Apache-2.0 (see LICENSE)
 -- Maintainer: serg.foo@gmail.com
 
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP                 #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 
 module System.Directory.OsPath.FileType
   ( FileType(..)
@@ -30,7 +31,7 @@
 
 import Control.Exception (try, IOException)
 import System.OsString.Internal.Types (getOsString)
-import System.Posix.Files.PosixString qualified as PosixF
+import qualified System.Posix.Files.PosixString as PosixF
 
 getFileType :: OsPath -> IO FileType
 getFileType fp = do
diff --git a/src/System/Directory/OsPath/Streaming.hs b/src/System/Directory/OsPath/Streaming.hs
--- a/src/System/Directory/OsPath/Streaming.hs
+++ b/src/System/Directory/OsPath/Streaming.hs
@@ -16,13 +16,13 @@
 #ifdef mingw32_HOST_OS
 
 import Control.Concurrent.Counter (Counter)
-import Control.Concurrent.Counter qualified as Counter
+import qualified Control.Concurrent.Counter as Counter
 import Control.Monad (unless)
 import System.OsPath.Types (OsPath)
 import System.OsString.Internal.Types (OsString(OsString), getOsString)
 import System.OsString.Windows (pstr)
-import System.Win32.Types qualified as Win32
-import System.Win32.WindowsString.File qualified as Win32
+import qualified System.Win32.Types as Win32
+import qualified System.Win32.WindowsString.File as Win32
 
 data DirStream = DirStream !Win32.HANDLE !Win32.FindData !Counter
 
@@ -56,7 +56,7 @@
 import System.OsPath.Types (OsPath)
 import System.OsString.Internal.Types (OsString(OsString), getOsString)
 import System.Posix.Directory.PosixPath (DirStream, closeDirStream)
-import System.Posix.Directory.PosixPath qualified as Posix
+import qualified System.Posix.Directory.PosixPath as Posix
 
 openDirStream :: OsPath -> IO DirStream
 openDirStream = Posix.openDirStream . getOsString
diff --git a/test/TestMain.hs b/test/TestMain.hs
--- a/test/TestMain.hs
+++ b/test/TestMain.hs
@@ -6,20 +6,16 @@
 
 {-# LANGUAGE ApplicativeDo       #-}
 {-# LANGUAGE CPP                 #-}
-{-# LANGUAGE ImportQualifiedPost #-}
 {-# LANGUAGE NamedFieldPuns      #-}
 {-# LANGUAGE QuasiQuotes         #-}
 {-# LANGUAGE RecordWildCards     #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 
 module TestMain (main) where
 
 import Control.Exception
-import Data.List qualified as L
-import Numeric (showHex)
-import System.Directory.OsPath
+import qualified Data.List as L
 import System.OsPath
-import System.OsString.Internal.Types (getOsString)
-import System.Random
 
 import System.Directory.OsPath.FileType
 import System.Directory.OsPath.Streaming
@@ -28,7 +24,12 @@
 import Test.Tasty.HUnit
 
 #ifndef mingw32_HOST_OS
-import System.Posix.Files.PosixString qualified as Posix
+import Numeric (showHex)
+import System.Directory.OsPath
+import System.OsString.Internal.Types (getOsString)
+import System.Random
+
+import qualified System.Posix.Files.PosixString as Posix
 #endif
 
 main :: IO ()
@@ -108,7 +109,6 @@
 #ifndef mingw32_HOST_OS
 tryIO :: IO a -> IO (Either IOException a)
 tryIO = try
-#endif
 
 createFreshTempDir :: OsPath -> OsPath -> IO OsPath
 createFreshTempDir dir prefix = go
@@ -119,7 +119,8 @@
       let path = dir </> prefix <> [osp|-|] <> n'
       exists <- doesDirectoryExist path
       if exists
-      then go
-      else do
-        createDirectory path
-        pure path
+        then go
+        else do
+          createDirectory path
+          pure path
+#endif
