diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Version 0.0.10.1 2019-05-31 by luispedro
+	* Accept .zst as extension for zstandard
+
+Version 0.0.10.0 2019-03-01 by luispedro
+	* Add withPossiblyCompressedFileOutput:
+
 Version 0.0.9.0 2019-01-09 by luispedro
 	* Add Zstandard compression
 	* Refactor internals to avoid code repetition
diff --git a/Data/Conduit/Algorithms/Async.hs b/Data/Conduit/Algorithms/Async.hs
--- a/Data/Conduit/Algorithms/Async.hs
+++ b/Data/Conduit/Algorithms/Async.hs
@@ -12,6 +12,7 @@
     ( conduitPossiblyCompressedFile
     , conduitPossiblyCompressedToFile
     , withPossiblyCompressedFile
+    , withPossiblyCompressedFileOutput
     , asyncMapC
     , asyncMapEitherC
     , asyncGzipTo
@@ -367,7 +368,7 @@
 -- @
 --
 --      withPossiblyCompressedFile fname $ \src ->
---          src .| mySink
+--          runConduit (src .| mySink)
 -- @
 --
 -- Unlike 'conduitPossiblyCompressedFile', this ensures that the file is closed
@@ -384,10 +385,41 @@
     | ".gz" `isSuffixOf` fname = asyncGzipFrom
     | ".xz" `isSuffixOf` fname = asyncXzFrom
     | ".bz2" `isSuffixOf` fname = asyncBzip2From
+    | ".zst" `isSuffixOf` fname = asyncZstdFrom
     | ".zstd" `isSuffixOf` fname = asyncZstdFrom
     | otherwise = C.sourceHandle
 
 
+-- | If the filename indicates a supported compressed file (gzip, xz, and, on
+-- Unix, bzip2), then it provides an output source
+--
+-- Usage
+--
+-- @
+--
+--      withPossiblyCompressedFileOutput fname $ \out ->
+--          runConduit (mySrc .| out)
+-- @
+--
+-- This ensures that the file is closed even if the conduit terminates early.
+--
+-- On Windows, attempting to read from a bzip2 file, results in 'error'.
+withPossiblyCompressedFileOutput :: (MonadUnliftIO m, MonadResource m, MonadThrow m) => FilePath -> (C.ConduitT B.ByteString C.Void m () -> m a) -> m a
+withPossiblyCompressedFileOutput fname inner = withRunInIO $ \run -> do
+    IO.withBinaryFile fname IO.WriteMode $
+        run . inner . withPossiblyCompressedFileOutput' fname
+
+
+withPossiblyCompressedFileOutput' :: (MonadUnliftIO m, MonadResource m, MonadThrow m) => FilePath -> Handle -> C.ConduitT B.ByteString C.Void m ()
+withPossiblyCompressedFileOutput' fname
+    | ".gz" `isSuffixOf` fname = asyncGzipTo
+    | ".xz" `isSuffixOf` fname = asyncXzTo
+    | ".bz2" `isSuffixOf` fname = asyncBzip2To
+    | ".zst" `isSuffixOf` fname = asyncZstdTo 3
+    | ".zstd" `isSuffixOf` fname = asyncZstdTo 3
+    | otherwise = C.sinkHandle
+
+
 -- | If the filename indicates a gzipped file (or, on Unix, also a bz2 file),
 -- then it reads it and uncompresses it.
 --
@@ -401,17 +433,21 @@
     | ".gz" `isSuffixOf` fname = asyncGzipFromFile fname
     | ".xz" `isSuffixOf` fname = asyncXzFromFile fname
     | ".bz2" `isSuffixOf` fname = asyncBzip2FromFile fname
+    | ".zst" `isSuffixOf` fname = asyncZstdFromFile fname
     | ".zstd" `isSuffixOf` fname = asyncZstdFromFile fname
     | otherwise = C.sourceFile fname
 
 -- | If the filename indicates a gzipped file (or, on Unix, also a bz2 file),
 -- then it compresses and write with the algorithm matching the filename
 --
+-- Consider using 'withPossiblyCompressedFileOutput' to ensure prompt file closing.
+--
 -- On Windows, attempting to write to a bzip2 file, results in 'error'.
 conduitPossiblyCompressedToFile :: (MonadUnliftIO m, MonadResource m) => FilePath -> C.ConduitT B.ByteString C.Void m ()
 conduitPossiblyCompressedToFile fname
     | ".gz" `isSuffixOf` fname = asyncGzipToFile fname
     | ".xz" `isSuffixOf` fname = asyncXzToFile fname
     | ".bz2" `isSuffixOf` fname = asyncBzip2ToFile fname
+    | ".zst" `isSuffixOf` fname = asyncZstdToFile fname
     | ".zstd" `isSuffixOf` fname = asyncZstdToFile fname
     | otherwise = C.sinkFile fname
diff --git a/conduit-algorithms.cabal b/conduit-algorithms.cabal
--- a/conduit-algorithms.cabal
+++ b/conduit-algorithms.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.31.1.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 568a611355a3ef3c59150cc32f207c38a0d6d802487517f30c8e437c8c839ab8
+-- hash: 970b58ff0d5b7502e92faea1119a63d4779237c3e4c31595392ce40d3cad6957
 
 name:           conduit-algorithms
-version:        0.0.9.0
+version:        0.0.10.1
 synopsis:       Conduit-based algorithms
 description:    Algorithms on Conduits, including higher level asynchronous processing and some other utilities.
 category:       Conduit
@@ -16,10 +18,9 @@
 license:        MIT
 license-file:   COPYING
 build-type:     Simple
-cabal-version:  >= 1.10
 extra-source-files:
-    ChangeLog
     README.md
+    ChangeLog
 
 source-repository head
   type: git
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -235,6 +235,21 @@
     removeFile testingFileNameGZ
     back @?= testdata
 
+case_withPossiblyCompressedFileOutput :: IO ()
+case_withPossiblyCompressedFileOutput = do
+    let testdata = [0 :: Int .. 14]
+    R.runResourceT $
+        CAlg.withPossiblyCompressedFileOutput testingFileNameGZ $ \sink ->
+            C.runConduit $
+                CC.yieldMany testdata
+                    .| CL.map (B8.pack . (\n -> show n ++ "\n"))
+                    .| sink
+    back <- R.runResourceT $
+                CAlg.withPossiblyCompressedFile testingFileNameGZ $ \src ->
+                    C.runConduit (src .| CB.lines .| CL.map (read . B8.unpack) .| CC.sinkList)
+    removeFile testingFileNameGZ
+    back @?= testdata
+
 case_async_bzip2_to_from :: IO ()
 case_async_bzip2_to_from = do
     let testdata = [0 :: Int .. 12]
