Skip to main content

The next-generation Python library engineered for modern archive management, leveraging cutting-edge Zstandard compression to deliver superior performance, security, and reliability

Project description


codecov CodeQL CI/CD PyPI - Version PyPI - Downloads GitHub License Sponsor Documentation

๐Ÿ‡บ๐Ÿ‡ธ English | ๐Ÿ‡จ๐Ÿ‡ณ ๆฑ‰่ฏญ | ๐Ÿ‡ช๐Ÿ‡ธ espaรฑol | ๐Ÿ‡ฏ๐Ÿ‡ต ๆ—ฅๆœฌ่ชž | ๐Ÿ‡ฆ๐Ÿ‡ช ุงู„ุนุฑุจูŠุฉ | ๐Ÿ‡ท๐Ÿ‡บ ั€ัƒััะบะธะน | ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch | ๐Ÿ‡ซ๐Ÿ‡ท franรงais | ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด | ๐Ÿ‡ง๐Ÿ‡ท portuguรชs

tzst is a next-generation Python library engineered for modern archive management, leveraging cutting-edge Zstandard compression to deliver superior performance, security, and reliability. Built exclusively for Python 3.12+, this enterprise-grade solution combines atomic operations, streaming efficiency, and a meticulously crafted API to redefine how developers handle .tzst/.tar.zst archives in production environments. ๐Ÿš€

In-depth technical analysis article published: Deep Dive into tzst: A Modern Python Archiving Library Based on Zstandard.

โœจ Features

  • ๐Ÿ—œ๏ธ High Compression: Zstandard compression for excellent compression ratios and speed
  • ๐Ÿ“ Tar Compatibility: Creates standard tar archives compressed with Zstandard
  • ๐Ÿ’ป Command Line Interface: Intuitive CLI with streaming support and comprehensive options
  • ๐Ÿ Python API: Clean, Pythonic API for programmatic use
  • ๐ŸŒ Cross-Platform: Works on Windows, macOS, and Linux
  • ๐Ÿ“‚ Multiple Extensions: Supports both .tzst and .tar.zst extensions
  • ๐Ÿ’พ Memory Efficient: Streaming mode for handling large archives with minimal memory usage
  • โšก Atomic Operations: Safe file operations with automatic cleanup on interruption
  • ๐Ÿ”’ Secure by Default: Uses the 'data' filter for maximum security during extraction
  • ๐Ÿšจ Enhanced Error Handling: Clear error messages with helpful alternatives

๐Ÿ“ฅ Installation

From GitHub Releases

Download standalone executables that don't require Python installation:

Supported Platforms

Platform Architecture File
๐Ÿง Linux x86_64 tzst-{version}-linux-amd64.zip
๐Ÿง Linux ARM64 tzst-{version}-linux-arm64.zip
๐ŸชŸ Windows x64 tzst-{version}-windows-amd64.zip
๐ŸชŸ Windows ARM64 tzst-{version}-windows-arm64.zip
๐ŸŽ macOS Intel tzst-{version}-darwin-amd64.zip
๐ŸŽ macOS Apple Silicon tzst-{version}-darwin-arm64.zip

๐Ÿ› ๏ธ Installation Steps

  1. ๐Ÿ“ฅ Download the appropriate archive for your platform from the latest releases page
  2. ๐Ÿ“ฆ Extract the archive to get the tzst executable (or tzst.exe on Windows)
  3. ๐Ÿ“‚ Move the executable to a directory in your PATH:
    • ๐Ÿง Linux/macOS: sudo mv tzst /usr/local/bin/
    • ๐ŸชŸ Windows: Add the directory containing tzst.exe to your PATH environment variable
  4. โœ… Verify installation: tzst --help

๐ŸŽฏ Benefits of Binary Installation

  • โœ… No Python required - Standalone executable
  • โœ… Faster startup - No Python interpreter overhead
  • โœ… Easy deployment - Single file distribution
  • โœ… Consistent behavior - Bundled dependencies

๐Ÿ“ฆ From PyPI

Using pip:

pip install tzst

Or using uv (recommended):

uv tool install tzst

๐Ÿ”ง From Source

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install .

๐Ÿš€ Development Installation

This project uses modern Python packaging standards:

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install -e .[dev]

๐Ÿš€ Quick Start

๐Ÿ’ป Command Line Usage

# ๐Ÿ“ Create an archive
tzst a archive.tzst file1.txt file2.txt directory/

# ๐Ÿ“ค Extract an archive
tzst x archive.tzst

# ๐Ÿ“‹ List archive contents
tzst l archive.tzst

# ๐Ÿงช Test archive integrity
tzst t archive.tzst

๐Ÿ Python API Usage

from tzst import create_archive, extract_archive, list_archive

# Create an archive
create_archive("archive.tzst", ["file1.txt", "file2.txt", "directory/"])

# Extract an archive
extract_archive("archive.tzst", "output_directory/")

# List archive contents
contents = list_archive("archive.tzst", verbose=True)
for item in contents:
    print(f"{item['name']}: {item['size']} bytes")

๐Ÿ’ป Command Line Interface

๐Ÿ“ Archive Operations

โž• Create Archive

# Basic usage
tzst a archive.tzst file1.txt file2.txt

# With compression level (1-22, default: 3)
tzst a archive.tzst files/ -l 15

# Alternative commands
tzst add archive.tzst files/
tzst create archive.tzst files/

๐Ÿ“ค Extract Archive

# Extract with full directory structure
tzst x archive.tzst

# Extract to specific directory
tzst x archive.tzst -o output/

# Extract specific files
tzst x archive.tzst file1.txt dir/file2.txt

# Extract without directory structure (flat)
tzst e archive.tzst -o output/

# Use streaming mode for large archives
tzst x archive.tzst --streaming -o output/

๐Ÿ“‹ List Contents

# Simple listing
tzst l archive.tzst

# Verbose listing with details
tzst l archive.tzst -v

# Use streaming mode for large archives
tzst l archive.tzst --streaming -v

๐Ÿงช Test Integrity

# Test archive integrity
tzst t archive.tzst

# Test with streaming mode
tzst t archive.tzst --streaming

๐Ÿ“Š Command Reference

Command Aliases Description Streaming Support
a add, create Create or add to archive N/A
x extract Extract with full paths โœ“ --streaming
e extract-flat Extract without directory structure โœ“ --streaming
l list List archive contents โœ“ --streaming
t test Test archive integrity โœ“ --streaming

โš™๏ธ CLI Options

  • -v, --verbose: Enable verbose output
  • -o, --output DIR: Specify output directory (extract commands)
  • -l, --level LEVEL: Set compression level 1-22 (create command)
  • --streaming: Enable streaming mode for memory-efficient processing
  • --filter FILTER: Security filter for extraction (data/tar/fully_trusted)
  • --no-atomic: Disable atomic file operations (not recommended)

๐Ÿ”’ Security Filters

# Extract with maximum security (default)
tzst x archive.tzst --filter data

# Extract with standard tar compatibility
tzst x archive.tzst --filter tar

# Extract with full trust (dangerous - only for trusted archives)
tzst x archive.tzst --filter fully_trusted

๐Ÿ” Security Filter Options:

  • data (default): Most secure. Blocks dangerous files, absolute paths, and paths outside extraction directory
  • tar: Standard tar compatibility. Blocks absolute paths and directory traversal
  • fully_trusted: No security restrictions. Only use with completely trusted archives

๐Ÿ Python API

๐Ÿ“ฆ TzstArchive Class

from tzst import TzstArchive

# Create a new archive
with TzstArchive("archive.tzst", "w", compression_level=5) as archive:
    archive.add("file.txt")
    archive.add("directory/", recursive=True)

# Read an existing archive
with TzstArchive("archive.tzst", "r") as archive:
    # List contents
    contents = archive.list(verbose=True)
    
    # Extract with security filter
    archive.extract("file.txt", "output/", filter="data")
    
    # Test integrity
    is_valid = archive.test()

# For large archives, use streaming mode
with TzstArchive("large_archive.tzst", "r", streaming=True) as archive:
    archive.extract(path="output/")

โš ๏ธ Important Limitations:

  • โŒ Append Mode Not Supported: Create multiple archives or recreate the entire archive instead

๐ŸŽฏ Convenience Functions

๐Ÿ“ create_archive()

from tzst import create_archive

# Create with atomic operations (default)
create_archive(
    archive_path="backup.tzst",
    files=["documents/", "photos/", "config.txt"],
    compression_level=10
)

๐Ÿ“ค extract_archive()

from tzst import extract_archive

# Extract with security (default: 'data' filter)
extract_archive("backup.tzst", "restore/")

# Extract specific files
extract_archive("backup.tzst", "restore/", members=["config.txt"])

# Flatten directory structure
extract_archive("backup.tzst", "restore/", flatten=True)

# Use streaming for large archives
extract_archive("large_backup.tzst", "restore/", streaming=True)

๐Ÿ“‹ list_archive()

from tzst import list_archive

# Simple listing
files = list_archive("backup.tzst")

# Detailed listing
files = list_archive("backup.tzst", verbose=True)

# Streaming for large archives
files = list_archive("large_backup.tzst", streaming=True)

๐Ÿงช test_archive()

from tzst import test_archive

# Basic integrity test
if test_archive("backup.tzst"):
    print("Archive is valid")

# Test with streaming
if test_archive("large_backup.tzst", streaming=True):
    print("Large archive is valid")

๐Ÿ”ง Advanced Features

๐Ÿ“‚ File Extensions

The library automatically handles file extensions with intelligent normalization:

  • .tzst - Primary extension for tar+zstandard archives
  • .tar.zst - Alternative standard extension
  • Auto-detection when opening existing archives
  • Automatic extension addition when creating archives
# These all create valid archives
create_archive("backup.tzst", files)      # Creates backup.tzst
create_archive("backup.tar.zst", files)  # Creates backup.tar.zst  
create_archive("backup", files)          # Creates backup.tzst
create_archive("backup.txt", files)      # Creates backup.tzst (normalized)

๐Ÿ—œ๏ธ Compression Levels

Zstandard compression levels range from 1 (fastest) to 22 (best compression):

  • Level 1-3: Fast compression, larger files
  • Level 3 (default): Good balance of speed and compression
  • Level 10-15: Better compression, slower
  • Level 20-22: Maximum compression, much slower

๐ŸŒŠ Streaming Mode

Use streaming mode for memory-efficient processing of large archives:

โœ… Benefits:

  • Significantly reduced memory usage
  • Better performance for archives that don't fit in memory
  • Automatic cleanup of resources

๐ŸŽฏ When to Use:

  • Archives larger than 100MB
  • Limited memory environments
  • Processing archives with many large files
# Example: Processing a large backup archive
from tzst import extract_archive, list_archive, test_archive

large_archive = "backup_500gb.tzst"

# Memory-efficient operations
is_valid = test_archive(large_archive, streaming=True)
contents = list_archive(large_archive, streaming=True, verbose=True)
extract_archive(large_archive, "restore/", streaming=True)

โšก Atomic Operations

All file creation operations use atomic file operations by default:

  • Archives created in temporary files first, then atomically moved
  • Automatic cleanup if process is interrupted
  • No risk of corrupted or incomplete archives
  • Cross-platform compatibility
# Atomic operations enabled by default
create_archive("important.tzst", files)  # Safe from interruption

# Can be disabled if needed (not recommended)
create_archive("test.tzst", files, use_temp_file=False)

๐Ÿšจ Error Handling

from tzst import TzstArchive
from tzst.exceptions import (
    TzstError,
    TzstArchiveError,
    TzstCompressionError,
    TzstDecompressionError,
    TzstFileNotFoundError
)

try:
    with TzstArchive("archive.tzst", "r") as archive:
        archive.extract()
except TzstDecompressionError:
    print("Failed to decompress archive")
except TzstFileNotFoundError:
    print("Archive file not found")
except KeyboardInterrupt:
    print("Operation interrupted by user")
    # Cleanup handled automatically

๐Ÿš€ Performance and Comparison

๐Ÿ’ก Performance Tips

  1. ๐Ÿ—œ๏ธ Compression levels: Level 3 is optimal for most use cases
  2. ๐ŸŒŠ Streaming: Use for archives larger than 100MB
  3. ๐Ÿ“ฆ Batch operations: Add multiple files in single session
  4. ๐Ÿ“„ File types: Already compressed files won't compress much further

๐Ÿ†š vs Other Tools

vs tar + gzip:

  • โœ… Better compression ratios
  • โšก Faster decompression
  • ๐Ÿ”„ Modern algorithm

vs tar + xz:

  • ๐Ÿš€ Significantly faster compression
  • ๐Ÿ“Š Similar compression ratios
  • โš–๏ธ Better speed/compression trade-off

vs zip:

  • ๐Ÿ—œ๏ธ Better compression
  • ๐Ÿ” Preserves Unix permissions and metadata
  • ๐ŸŒŠ Better streaming support

๐Ÿ“‹ Requirements

  • ๐Ÿ Python 3.12 or higher
  • ๐Ÿ“ฆ zstandard >= 0.19.0

๐Ÿ› ๏ธ Development

๐Ÿš€ Setting up Development Environment

This project uses modern Python packaging standards:

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install -e .[dev]

๐Ÿงช Running Tests

# Run tests with coverage
pytest --cov=tzst --cov-report=html

# Or use the simpler command (coverage settings are in pyproject.toml)
pytest

โœจ Code Quality

# Check code quality
ruff check src tests

# Format code
ruff format src tests

๐Ÿค Contributing

We welcome contributions! Please read our Contributing Guide for:

  • Development setup and project structure
  • Code style guidelines and best practices
  • Testing requirements and writing tests
  • Pull request process and review workflow

๐Ÿš€ Quick Start for Contributors

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install -e .[dev]
python -m pytest tests/

๐ŸŽฏ Types of Contributions Welcome

  • ๐Ÿ› Bug fixes - Fix issues in existing functionality
  • โœจ Features - Add new capabilities to the library
  • ๐Ÿ“š Documentation - Improve or add documentation
  • ๐Ÿงช Tests - Add or improve test coverage
  • โšก Performance - Optimize existing code
  • ๐Ÿ”’ Security - Address security vulnerabilities

๐Ÿ™ Acknowledgments

๐Ÿ“„ License

Copyright ยฉ Xi Xu. All rights reserved.

Licensed under the BSD 3-Clause license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tzst-1.3.2.tar.gz (60.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tzst-1.3.2-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file tzst-1.3.2.tar.gz.

File metadata

  • Download URL: tzst-1.3.2.tar.gz
  • Upload date:
  • Size: 60.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tzst-1.3.2.tar.gz
Algorithm Hash digest
SHA256 15736f074c628e94db4de48b7cf32841cc44e7e08f80a5cefad20bf11fb9624f
MD5 bd4d253fd15f6af40d4b033cd4e53025
BLAKE2b-256 8d3cd148d5dd77932ee9a5aa5449902114a829aa49b69835ed2b0003da31c84a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tzst-1.3.2.tar.gz:

Publisher: ci.yml on xixu-me/tzst

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tzst-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: tzst-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 26.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tzst-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f6805f535904404d04a2e0e78cb58b5d120032fcb83f93ce8afdbcd9ba1020db
MD5 83a06f1cc1d972658fc80681d81758b4
BLAKE2b-256 364bb65709643cff1ff1f5234635024d53a8191378e343988c80f82a4704d481

See more details on using hashes here.

Provenance

The following attestation bundles were made for tzst-1.3.2-py3-none-any.whl:

Publisher: ci.yml on xixu-me/tzst

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page