diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # sak
 
+## 0.1.2.4
+
+  * Add snappy support
+
 ## 0.1.2.3
 
   * Add `recompress` subcommand
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -10,6 +10,12 @@
 sak transcode sak-0.1.0.0.tar.gz sak-0.1.0.0.tar.lz
 ```
 
+To recompress a file:
+
+```
+sak recompress binary.tar.zst --best
+```
+
 ### Bash Completions
 
 To get bash completions in your current shell session:
diff --git a/man/sak.1 b/man/sak.1
--- a/man/sak.1
+++ b/man/sak.1
@@ -65,6 +65,8 @@
 deflate (0-9)
 .IP \[bu] 2
 brotli (0-11)
+.IP \[bu] 2
+snappy
 .SH SHELL COMPLETIONS
 .PP
 To get shell completions in your current session:
diff --git a/sak.cabal b/sak.cabal
--- a/sak.cabal
+++ b/sak.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               sak
-version:            0.1.2.3
+version:            0.1.2.4
 license:            BSD3
 license-file:       LICENSE
 copyright:          Copyright: (c) 2020 Vanessa McHale
@@ -25,6 +25,9 @@
     description:
         Build with support for brotli encoding/decoding (disable this to statically link)
 
+flag with-snappy
+    description: Build with support for snappy encoding/decoding
+
 executable sak
     main-is:            Main.hs
     build-tool-depends: cpphs:cpphs -any
@@ -50,6 +53,12 @@
         bytestring -any,
         directory >=1.3.1.0,
         parallel-io -any
+
+    if flag(with-snappy)
+        build-depends: snappy-lazy -any
+
+    if flag(with-snappy)
+        cpp-options: -DSNAPPY
 
     if flag(with-brotli)
         build-depends: brotli -any
diff --git a/src/Compression.cpphs b/src/Compression.cpphs
--- a/src/Compression.cpphs
+++ b/src/Compression.cpphs
@@ -13,19 +13,22 @@
                    ) where
 
 #ifdef BROTLI
-import qualified Codec.Compression.Brotli    as Br
+import qualified Codec.Compression.Brotli     as Br
 #endif
-import qualified Codec.Compression.BZip      as BZip
-import qualified Codec.Compression.GZip      as GZip
-import qualified Codec.Compression.Lzma      as Lzma
-import qualified Codec.Compression.Zlib      as Zlib
-import qualified Codec.Compression.Zstd.Lazy as Zstd
-import qualified Codec.Lz4                   as Lz4
-import qualified Codec.Lzip                  as Lzip
-import qualified Data.ByteString.Lazy        as BSL
-import           Data.List                   (isSuffixOf)
-import           System.FilePath             (dropExtension, (-<.>))
-import           System.IO                   (IOMode (ReadMode), hFileSize, withFile)
+import qualified Codec.Compression.BZip       as BZip
+import qualified Codec.Compression.GZip       as GZip
+import qualified Codec.Compression.Lzma       as Lzma
+#ifdef SNAPPY
+import qualified Codec.Compression.Snappy.BSL as Snappy
+#endif
+import qualified Codec.Compression.Zlib       as Zlib
+import qualified Codec.Compression.Zstd.Lazy  as Zstd
+import qualified Codec.Lz4                    as Lz4
+import qualified Codec.Lzip                   as Lzip
+import qualified Data.ByteString.Lazy         as BSL
+import           Data.List                    (isSuffixOf)
+import           System.FilePath              (dropExtension, (-<.>))
+import           System.IO                    (IOMode (ReadMode), hFileSize, withFile)
 
 data CompressionLevel = Best
                       | Fastest
@@ -40,6 +43,9 @@
 #ifdef BROTLI
                  | Brotli
 #endif
+#ifdef SNAPPY
+                 | Snappy
+#endif
                  | Lz4
                  | Z
                  | None
@@ -56,6 +62,9 @@
 #ifdef BROTLI
 ext Brotli = ".br"
 #endif
+#ifdef SNAPPY
+ext Snappy = ".sz"
+#endif
 ext None   = ""
 
 uncompressedExt :: FilePath -> FilePath
@@ -69,7 +78,7 @@
                    | ".xcfbz2" `isSuffixOf` fp = fp -<.> ".xcf"
                    | ".tbz2" `isSuffixOf` fp   = fp -<.> "tar"
                    | ".tbz" `isSuffixOf` fp    = fp -<.> "tar"
-                   | ".tbr" `isSuffixOf` fp = fp -<.> "tar"
+                   | ".tbr" `isSuffixOf` fp    = fp -<.> "tar"
                    | otherwise                 = dropExtension fp
 
 detectCompression :: FilePath -> Compression
@@ -93,6 +102,9 @@
 #ifdef BROTLI
     | ".br" `isSuffixOf` fp     = Brotli
 #endif
+#ifdef SNAPPY
+    | ".sz" `isSuffixOf` fp     = Snappy
+#endif
     | otherwise                 = None -- error "Suffix not supported or invalid"
 
 toFileDecompressor :: Compression -> FilePath -> IO BSL.ByteString
@@ -110,6 +122,9 @@
 #ifdef BROTLI
 toDecompressor Brotli = Br.decompress
 #endif
+#ifdef SNAPPY
+toDecompressor Snappy = Snappy.decompress
+#endif
 toDecompressor None   = id
 
 check :: Compression -> BSL.ByteString -> IO ()
@@ -139,6 +154,9 @@
 #endif
 
 toInt :: Compression -> CompressionLevel -> Int
+#ifdef SNAPPY
+toInt Snappy _          = undefined
+#endif
 #ifdef BROTLI
 toInt Brotli Fastest    = fromEnum (minBound :: Br.CompressionLevel)
 toInt Brotli (Custom i) = levelGuard (0,11) i
@@ -185,6 +203,9 @@
 toCompressor Lz4  lvl _         = Lz4.compressSz (toInt Lz4 lvl)
 #ifdef BROTLI
 toCompressor Brotli lvl _       = Br.compressWith (brotliCompression $ toInt Brotli lvl)
+#endif
+#ifdef SNAPPY
+toCompressor Snappy _ _         = Snappy.compress
 #endif
 toCompressor None _ _           = id
 
diff --git a/src/Version.cpphs b/src/Version.cpphs
--- a/src/Version.cpphs
+++ b/src/Version.cpphs
@@ -22,3 +22,6 @@
 #ifdef BROTLI
     ++ "\nbrotli-hs: " ++ VERSION_brotli
 #endif
+#ifdef SNAPPY
+    ++ "\nsnappy-lazy-hs " ++ VERSION_snappy_lazy
+#endif
