diff --git a/COPYING b/COPYING
new file mode 100644
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,23 @@
+Copyright (c) 2017
+Luis Pedro Coelho <luis@luispedro.org>
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,2 @@
+Version 0.0.1 2018-02-12 by luispedro
+	* First version
diff --git a/Data/Conduit/Zstd.hs b/Data/Conduit/Zstd.hs
new file mode 100644
--- /dev/null
+++ b/Data/Conduit/Zstd.hs
@@ -0,0 +1,33 @@
+module Data.Conduit.Zstd
+    ( compress
+    , decompress
+    ) where
+
+import qualified Data.Conduit as C
+import qualified Data.ByteString as B
+import qualified Codec.Compression.Zstd.Streaming as Z
+import           Control.Monad.IO.Class (MonadIO, liftIO)
+import           Control.Exception.Base (throwIO)
+import           System.IO.Error (userError)
+import           Data.Maybe (fromMaybe)
+
+
+-- | compression conduit
+compress :: MonadIO m =>
+        Int -- ^ compression level
+        -> C.Conduit B.ByteString m B.ByteString
+compress level = liftIO (Z.compress level) >>= go
+
+-- | decompression conduit
+decompress :: MonadIO m => C.Conduit B.ByteString m B.ByteString
+decompress = liftIO Z.decompress >>= go
+
+go :: MonadIO m => Z.Result -> C.Conduit B.ByteString m B.ByteString
+go (Z.Produce r next) = do
+    C.yield r
+    liftIO next >>= go
+go (Z.Consume f) = do
+    next <- C.await
+    liftIO (f $ fromMaybe B.empty next) >>= go
+go (Z.Error m e) = liftIO (throwIO $ userError ("ZStandard error :" ++ m ++ ": " ++ e))
+go (Z.Done r) = C.yield r
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,6 @@
+# ZStandard conduit wrappers
+
+Very thin wrapper around the
+[hs-zstd](https://github.com/facebookexperimental/hs-zstd) Haskell bindings for
+the [ZStandard compresssion library](http://facebook.github.io/zstd/).
+
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/conduit-zstd.cabal b/conduit-zstd.cabal
new file mode 100644
--- /dev/null
+++ b/conduit-zstd.cabal
@@ -0,0 +1,65 @@
+-- This file has been generated from package.yaml by hpack version 0.21.2.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: f895f93106c2227e098a21dc6fb09dbc63f3e67e7d73e05c07c035f64dd55450
+
+name:           conduit-zstd
+version:        0.0.1.0
+synopsis:       Conduit-based ZStd Compression
+description:    Zstandard compression packaged as a conduit. This is a very thin wrapper around the [official hs-zstd interface](https://github.com/facebookexperimental/hs-zstd/)
+category:       Conduit
+homepage:       https://github.com/luispedro/conduit-zstd#readme
+bug-reports:    https://github.com/luispedro/conduit-zstd/issues
+author:         Luis Pedro Coelho
+maintainer:     Luis Pedro Coelho
+license:        MIT
+license-file:   COPYING
+build-type:     Simple
+cabal-version:  >= 1.10
+
+extra-source-files:
+    ChangeLog
+    README.md
+
+source-repository head
+  type: git
+  location: https://github.com/luispedro/conduit-zstd
+
+library
+  exposed-modules:
+      Data.Conduit.Zstd
+  default-extensions: BangPatterns OverloadedStrings LambdaCase TupleSections
+  ghc-options: -Wall
+  build-depends:
+      base >4.8 && <5
+    , bytestring
+    , conduit >=1.0
+    , zstd
+  default-language: Haskell2010
+
+test-suite conduit-zstd-test
+  type: exitcode-stdio-1.0
+  main-is: Tests.hs
+  other-modules:
+      Data.Conduit.Zstd
+      Paths_conduit_zstd
+  hs-source-dirs:
+      ./.
+      ./tests
+  default-extensions: BangPatterns OverloadedStrings LambdaCase TupleSections
+  ghc-options: -Wall
+  build-depends:
+      HUnit
+    , base >4.8 && <5
+    , bytestring
+    , conduit
+    , conduit-combinators
+    , conduit-extra
+    , conduit-zstd
+    , directory
+    , test-framework
+    , test-framework-hunit
+    , test-framework-th
+    , zstd
+  default-language: Haskell2010
diff --git a/tests/Tests.hs b/tests/Tests.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tests.hs
@@ -0,0 +1,25 @@
+{- Copyright 2018 Luis Pedro Coelho
+ - License: MIT
+ -}
+{-# LANGUAGE TemplateHaskell, QuasiQuotes, FlexibleContexts, OverloadedStrings #-}
+module Main where
+
+import Test.Framework.TH
+import Test.HUnit
+import Test.Framework.Providers.HUnit
+
+import qualified Data.ByteString as B
+import qualified Data.Conduit as C
+import qualified Data.Conduit.Combinators as CC
+import qualified Data.Conduit.List as CL
+import           Data.Conduit ((.|))
+
+import qualified Data.Conduit.Zstd as CZ
+
+main :: IO ()
+main = $(defaultMainGenerator)
+
+case_basic :: IO ()
+case_basic = do
+    hello <- B.concat <$> (C.runConduitRes (CC.yieldMany ["Hello", " ", "World"] .| CZ.compress 2 .| CZ.decompress .| CL.consume))
+    hello @?= "Hello World"
