diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1101d05a585dc09ce2ef11f20cbf89d679bf1ed1..6152146363265e8b440c5b5699a1c5576735cc3e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -11,7 +11,7 @@ test:
   stage: test
   image: registry.git.autistici.org/ai3/docker/test/golang:master
   script:
-    - apt-get -q update && apt-get -qy install restic lz4
+    - apt-get -q update && apt-get -qy install restic zstd
     - run-go-test ./...
   artifacts:
     when: always
diff --git a/debian/control b/debian/control
index 261d346b18c8e8313fb7c0f1d26510951359e96c..625491910cc4485b401667a367e42c2065c794d6 100644
--- a/debian/control
+++ b/debian/control
@@ -5,7 +5,7 @@ Maintainer: ale <ale@incal.net>
 Build-Depends: debhelper-compat (= 13),
                dh-golang,
                golang-any (>= 1.10),
-               lz4,
+               zstd,
                restic
 Standards-Version: 3.9.6
 XS-Go-Import-Path: git.autistici.org/ai3/tools/tabacco
@@ -15,6 +15,7 @@ Architecture: any
 Built-Using: ${misc:Built-Using}
 Depends: ${shlibs:Depends},
          ${misc:Depends}
+Recommends: zstd
 Description: Backup manager for distributed systems.
  Backup manager for distributed systems, with a specific
  focus on multi-tenant (partitioned) services.
diff --git a/handler_pipe.go b/handler_pipe.go
index 2389dd888737eb45b430b6a0e7bd43ebd2a36d23..31ba6e5615c5734e353840edd5f077dcd242d2e8 100644
--- a/handler_pipe.go
+++ b/handler_pipe.go
@@ -22,8 +22,8 @@ type pipeHandler struct {
 
 const (
 	defaultCompress      = false
-	defaultCompressCmd   = "lz4c -3z - -"
-	defaultDecompressCmd = "lz4c -d - -"
+	defaultCompressCmd   = "zstd -c --rsyncable"
+	defaultDecompressCmd = "zstd -dcf"
 )
 
 func newPipeHandler(name string, params Params) (Handler, error) {