diff --git a/src/scripts/xzdiff.1 b/src/scripts/xzdiff.1
index 3cb6bcc5ecdef57ceb563c9f1ad872d0d84adb04_c3JjL3NjcmlwdHMveHpkaWZmLjE=..119d3ce1d749752c0c1d0fdc5b1f96e6befffded_c3JjL3NjcmlwdHMveHpkaWZmLjE= 100644
--- a/src/scripts/xzdiff.1
+++ b/src/scripts/xzdiff.1
@@ -6,7 +6,7 @@
 .\"
 .\" License: GNU GPLv2+
 .\"
-.TH XZDIFF 1 "2011-03-19" "Tukaani" "XZ Utils"
+.TH XZDIFF 1 "2021-01-11" "Tukaani" "XZ Utils"
 .SH NAME
 xzcmp, xzdiff, lzcmp, lzdiff \- compare compressed files
 .SH SYNOPSIS
@@ -34,4 +34,5 @@
 .BR lzma (1),
 .BR gzip (1),
 .BR bzip2 (1),
+.BR lzop (1),
 or
@@ -37,5 +38,5 @@
 or
-.BR lzop (1).
+.BR zstd (1).
 All options specified are passed directly to
 .BR cmp (1)
 or
@@ -68,6 +69,7 @@
 .BR gzip (1),
 .BR bzip2 (1),
 .BR lzop (1),
+.BR zstd (1),
 .BR zdiff (1)
 .SH BUGS
 Messages from the
diff --git a/src/scripts/xzdiff.in b/src/scripts/xzdiff.in
index 3cb6bcc5ecdef57ceb563c9f1ad872d0d84adb04_c3JjL3NjcmlwdHMveHpkaWZmLmlu..119d3ce1d749752c0c1d0fdc5b1f96e6befffded_c3JjL3NjcmlwdHMveHpkaWZmLmlu 100644
--- a/src/scripts/xzdiff.in
+++ b/src/scripts/xzdiff.in
@@ -80,8 +80,10 @@
       xz1=gzip;;
     *[-.]lzo | *.tzo)
       xz1=lzop;;
+    *[-.]zst | *.tzst)
+      xz1='zstd -q';;
     *)
       echo >&2 "$0: $1: Unknown compressed file name suffix"
       exit 2;;
   esac
   case $1 in
@@ -83,13 +85,13 @@
     *)
       echo >&2 "$0: $1: Unknown compressed file name suffix"
       exit 2;;
   esac
   case $1 in
-    *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *[-.]lzo)
-      FILE=`expr "X$1" : 'X\(.*\)[-.][abglmoxzZ2]*$'`;;
+    *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *[-.]lzo | *[-.]zst)
+      FILE=`expr "X$1" : 'X\(.*\)[-.][abglmostxzZ2]*$'`;;
     *.t[abglx]z)
       FILE=`expr "X$1" : 'X\(.*[-.]t\)[abglx]z$'`ar;;
     *.tbz2)
       FILE=`expr "X$1" : 'X\(.*[-.]t\)bz2$'`ar;;
     *.tzo)
       FILE=`expr "X$1" : 'X\(.*[-.]t\)zo$'`ar;;
@@ -90,9 +92,11 @@
     *.t[abglx]z)
       FILE=`expr "X$1" : 'X\(.*[-.]t\)[abglx]z$'`ar;;
     *.tbz2)
       FILE=`expr "X$1" : 'X\(.*[-.]t\)bz2$'`ar;;
     *.tzo)
       FILE=`expr "X$1" : 'X\(.*[-.]t\)zo$'`ar;;
+    *.tzst)
+      FILE=`expr "X$1" : 'X\(.*[-.]t\)zst$'`ar;;
   esac
   xz_status=$(
     exec 4>&1
@@ -103,8 +107,9 @@
     *[-.]bz2 | *.tbz | *.tbz2) xz1=bzip2;;
     *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz1=gzip;;
     *[-.]lzo | *.tzo) xz1=lzop;;
+    *[-.]zst | *.tzst) xz1='zstd -q';;
   esac
   case $2 in
     *[-.]bz2 | *.tbz | *.tbz2) xz2=bzip2;;
     *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz2=gzip;;
     *[-.]lzo | *.tzo) xz2=lzop;;
@@ -106,7 +111,8 @@
   esac
   case $2 in
     *[-.]bz2 | *.tbz | *.tbz2) xz2=bzip2;;
     *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz2=gzip;;
     *[-.]lzo | *.tzo) xz2=lzop;;
+    *[-.]zst | *.tzst) xz2='zstd -q';;
   esac
   case $1 in
@@ -111,4 +117,4 @@
   esac
   case $1 in
-    *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | -)
+    *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | *[-.]zst | *.tzst | -)
       case "$2" in
@@ -114,5 +120,5 @@
       case "$2" in
-        *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | -)
+        *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | *[-.]zst | *.tzst | -)
           if test "$1$2" = --; then
             xz_status=$(
               exec 4>&1
@@ -176,7 +182,7 @@
     esac;;
   *)
     case "$2" in
-      *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | -)
+      *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | *[-.]lzo | *.tzo | *[-.]zst | *.tzst | -)
         xz_status=$(
           exec 4>&1
           ($xz2 -cdf -- "$2" 4>&-; echo $? >&4) 3>&- |