XZ Utils

XZ Utils is a complete C99 implementation of the .xz file format. XZ Utils were originally written for POSIX systems, but has been ported to a few non-POSIX systems over the years.

XZ Utils consist of several components:

Documentation

The documentation provided here is from the 5.6.0 release.

Man pages with keyword indexes:

Doxygen-generated liblzma API documentation is also included in the source packages since XZ Utils 5.4.2.

Releases

Versions 5.2.12, 5.4.3 and later have been signed with Jia Tan's OpenPGP key . The older releases have been signed with Lasse Collin's OpenPGP key .

See the NEWS file for a summary of changes between versions. A more detailed change log is provided in the source code releases.

Stable

5.6.0 was released on 2024-02-24.

xz-5.6.0.tar.gz (2966 KiB) signature
xz-5.6.0.tar.bz2 (2233 KiB) signature
xz-5.6.0.tar.zst (1793 KiB) signature
xz-5.6.0.tar.xz (1732 KiB) signature

All releases since 5.2.10 and 5.4.0 are hosted on GitHub.

Unstable

The odd numbered minor releases are development releases and should be considered unstable. Incompatible changes to unstable features may be done before they are included in a stable release.

There currently are no unstable releases in this cycle.

Old Versions

Source and binary packages of old XZ Utils releases are available for the stable releases.

Security Issues

xzgrep CVE-2022-1271, ZDI-CAN-16587

A patch to fix a security vulnerability in xzgrep (CVE-2022-1271, ZDI-CAN-16587) was made public on 2022-04-07. The patch applies to 4.999.9beta, 5.2.5, 5.3.1alpha, and 5.3.2alpha. Newer XZ Utils releases include an improved fix for the problem.

It is a severe issue if an attacker can control the filenames that are given on the xzgrep command line. The vulnerability was discovered by cleemy desu wayo working with Trend Micro Zero Day Initiative. For more information, see the detailed description in the patch file linked below.

xzgrep-ZDI-CAN-16587.patch
xzgrep-ZDI-CAN-16587.patch.sig

Development

The project's main repository is on GitHub and is mirrored (with some delay) to git.tukaani.org.

Check out the current source code:

git clone https://github.com/tukaani-project/xz

Building


XZ Utils should primarily be built using GNU Autotools. CMake is close to feature parity with the GNU Autotools build, but is still missing a few features.

We encourage users to test the CMake-based build on different operating systems. See the main comment in CMakeLists.txt for more information.

For GNU Autotools, the minimum versions required are:

  • Autoconf 2.69
  • Automake 1.12
  • gettext 0.19.6 (Note: autopoint depends on cvs!)
  • Libtool 2.4

Note: It is strongly recommended to build using the latest versions.

The following are optional dependencies. The autogen.sh script will fail if they are missing but autogen.sh takes command line arguments to disable these dependencies.

  • po4a is needed for translated documentation (man pages). To build without po4a, use --no-po4a with autogen.sh.
  • Doxygen is needed to generate liblzma API documentation. To build without Doxygen, use --no-doxygen with autogen.sh.

For the CMake build, version 3.14 or greater is required. However, translation support is disabled with CMake versions older than 3.20.

Branches:

  • master: the latest development code
  • v5.6: fixes for the next 5.6.x release
  • v5.4: fixes for the next 5.4.x release (unmaintained)
  • v5.2: fixes for the next 5.2.x release (unmaintained)
  • v5.0: fixes for the next 5.0.x release (unmaintained)

Bindings

Python

Python 3.3 includes bindings for liblzma.


Perl

Perl bindings for liblzma: IO-Compress-Lzma and Compress-Raw-Lzma.


Haskell


Delphi and Free Pascal

Bindings and example programs for Delphi and Free Pascal are available here.

Pre-built binaries

Many free software operating systems already provide easy-to-install XZ Utils binaries. It doesn't make sense to provide links to all those here.

Windows and DOS binaries are provided here for older versions of XZ Utils. If there is any interest in future versions of these binaries then please contact us.

Windows


The Windows version of XZ Utils includes binaries for 32-bit and 64-bit x86. The binaries only depend on msvcrt.dll, which is available on Windows 98 and later out of the box.

  • Command line tools: xz, xzdec, lzmadec, lzmainfo
  • Shared (DLL) and static liblzma, required C header files, and liblzma.def to create import libraries for non-GNU toolchains (no import library is needed with GNU toolchain)
  • Documentation is in plain text (UTF-8) format. The man pages of the command line tools are included also as PDF.

5.2.10, 5.2.11, or 5.2.12 do not have anything significant for Windows so only 5.2.9 is here. 5.4.x builds are not provided for now.

xz-5.2.9.zip (1473 KiB) signature
xz-5.2.9.7z (708 KiB) signature

DOS


The DOS version of XZ Utils includes only the xz command line tool and some documentation. The xz tool should work e.g. on FreeDOS (also in DOSEMU), MS-DOS, and Windows 95/98/98SE/ME. This doesn't necessarily work in DOSBox at all, and at least some problems are expected under Windows XP Command Prompt (signal handling doesn't work).

Since the DOS version is naturally going to get very little testing, it is recommended to use the Windows version instead of the DOS version if you need xz under Windows 98 or later. It is likely that that the DOS version will be updated only occasionally.

5.2.0 and later have experimental support for 8.3 filenames. See xz-dos.txt in the binary package or dos/README.txt in the source package for details.

xz-5.4.0.zip (277 KiB) signature

The package includes some copylefted code from DJGPP and CWSDPMI. The relevant source code is available from their home pages, and copies are also available below.

djlsr205.zip (1880 KiB)
djtst205.zip (963 KiB)
csdpmi7s.zip (88 KiB)

Juan Manuel Guerrero has made a more complete port of XZ Utils to DOS. It also has support for short file names (8.3), but the naming method is different from the one found in 5.2.0 and later. It is available from DJGPP mirrors under /current/v2apps (e.g. xz-500b.zip for 5.0.0 binaries).

Supported platforms

Below is an incomplete and somewhat vague (version numbers mostly missing) list of operating systems on which XZ Utils should work. The compiler(s) or toolchains are mentioned in parenthesis. GCC refers to GCC 3 or later. If you have additions or corrections, please contact us.

  • GNU/Linux (GCC, Clang, ICC, IBM XL C)
  • GNU/HURD (GCC)
  • DragonflyBSD (GCC)
  • FreeBSD (GCC, Clang)
  • MirBSD (GCC)
  • NetBSD (GCC)
  • OpenBSD (Clang, GCC)
  • MINIX 3 (GCC) [1]
  • Haiku (GCC4)
  • Mac OS X (GCC)
  • Solaris 8, 9, 10, 11 (GCC, Sun Studio) [3]
  • Solaris 2.6, 7 (GCC)
  • HP-UX (GCC, HP ANSI C) [2]
  • Tru64 (GCC, Compaq C compiler) [1]
  • IRIX (MIPSpro) [1]
  • AIX (GCC, IBM XL C)
  • z/OS (IBM XL C)
  • QNX (compilers?)
  • OpenVMS (HP C compiler) [1]
  • OpenVOS 17 (GCC)
  • SCO OpenServer 5.0.7 (GCC 3.4.6, 4.2.4) [4]
  • Windows 95 and later (GCC/MinGW, GCC/MinGW-w64, GCC/Cygwin, GCC/Interix, Visual Studio 15+ [1]
  • OS/2, eComStation (GCC)
  • DOS e.g. FreeDOS and MS-DOS (GCC/DJGPP) [1]

[1] See also the platform-specific notes in the INSTALL file.

[2] 2010-09-22: HP ANSI C compiler crashes when compiling XZ Utils on PA-RISC. On Itanium there are no problems.

[3] On Solaris 8 and 9 one may need to pass ac_cv_prog_cc_c99= to configure if using Sun Studio.

[4] Use --disable-threads when running configure.

Licensing

From the version 5.5.2beta onwards, the core components of XZ Utils are under the the BSD Zero Clause License (0BSD). The previous versions remain in the public domain.

Some parts of XZ Utils (for example, scripts from GNU gzip and some build system files) are under different free software licenses such as GNU LGPLv2.1, GNU GPLv2, or GNU GPLv3.

See the file COPYING for more details.