diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for hpath-directory
 
+## 0.13.4 -- 2020-05-08
+
+* Add getDirsFilesStream and use streamly-posix for dircontents (#34)
+
 ## 0.13.3 -- 2020-04-14
 
 * Fix tests on mac
diff --git a/hpath-directory.cabal b/hpath-directory.cabal
--- a/hpath-directory.cabal
+++ b/hpath-directory.cabal
@@ -1,7 +1,7 @@
 cabal-version:       >=1.10
 
 name:                hpath-directory
-version:             0.13.3
+version:             0.13.4
 synopsis:            Alternative to 'directory' package with ByteString based filepaths
 description:         This provides a safer alternative to the 'directory'
                      package. FilePaths are ByteString based, so this
@@ -44,7 +44,9 @@
                        , safe-exceptions     >= 0.1
                        , streamly            >= 0.7
                        , streamly-bytestring >= 0.1.2
+                       , streamly-posix      >= 0.1.0.1
                        , time                >= 1.8
+                       , transformers
                        , unix                >= 2.5
                        , unix-bytestring     >= 0.3
                        , utf8-string
diff --git a/src/System/Posix/RawFilePath/Directory.hs b/src/System/Posix/RawFilePath/Directory.hs
--- a/src/System/Posix/RawFilePath/Directory.hs
+++ b/src/System/Posix/RawFilePath/Directory.hs
@@ -27,7 +27,8 @@
 -- Import as:
 -- > import System.Posix.RawFilePath.Directory
 
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
+{-# LANGUAGE FlexibleContexts #-} -- streamly
 
 module System.Posix.RawFilePath.Directory
   (
@@ -82,6 +83,7 @@
   -- * Directory reading
   , getDirsFiles
   , getDirsFiles'
+  , getDirsFilesStream
   -- * Filetype operations
   , getFileType
   -- * Others
@@ -93,8 +95,11 @@
 
 import           Control.Applicative            ( (<$>) )
 import           Control.Exception.Safe         ( IOException
+                                                , MonadCatch
+                                                , MonadMask
                                                 , bracket
                                                 , bracketOnError
+                                                , onException
                                                 , throwIO
                                                 , finally
                                                 )
@@ -105,6 +110,7 @@
 import           Control.Monad.Catch            ( MonadThrow(..) )
 import           Control.Monad.Fail             ( MonadFail )
 import           Control.Monad.IfElse           ( unlessM )
+import           Control.Monad.IO.Class         ( liftIO )
 import qualified Data.ByteString               as BS
 import           Data.ByteString                ( ByteString )
 import           Data.Traversable               ( for )
@@ -155,6 +161,8 @@
 import           Streamly.External.ByteString
 import qualified Streamly.External.ByteString.Lazy
                                                as SL
+import qualified Streamly.External.Posix.DirStream
+                                               as SD
 import qualified Streamly.Data.Fold            as FL
 import           Streamly.Memory.Array
 import qualified Streamly.FileSystem.Handle    as FH
@@ -1147,11 +1155,17 @@
 -- of prepending the base path.
 getDirsFiles' :: RawFilePath        -- ^ dir to read
               -> IO [RawFilePath]
-getDirsFiles' fp = do
-  fd          <- openFd fp SPI.ReadOnly [SPDF.oNofollow] Nothing
-  rawContents <- getDirectoryContents' fd
-  fmap catMaybes $ for rawContents $ \(_, f) ->
-    if FP.isSpecialDirectoryEntry f then pure Nothing else pure $ Just f
+getDirsFiles' fp = getDirsFilesStream fp >>= S.toList
+
+
+-- | Like 'getDirsFiles'', except returning a Stream.
+getDirsFilesStream :: (MonadCatch m, MonadAsync m, MonadMask m)
+                   => RawFilePath
+                   -> IO (SerialT m RawFilePath)
+getDirsFilesStream fp = do
+  fd <- openFd fp SPI.ReadOnly [SPDF.oNofollow] Nothing
+  ds <- SPDT.fdOpendir fd `onException` SPI.closeFd fd
+  pure $ fmap snd $ SD.dirContentsStream ds
 
 
 
