Skip to main content

zstandard 1.5.3 copy "zstandard: ^1.5.3" to clipboard
zstandard: ^1.5.3 copied to clipboard

Flutter plugin for fast Zstandard compression and decompression across native and WebAssembly platforms.

pub package

Zstandard #

Zstandard (zstd) is a fast, high-compression algorithm developed by Meta (formerly Facebook) for real-time applications. It offers a broad range of compression levels, supporting both high-speed and high-compression-ratio requirements, making it ideal for data storage, transmission, and backup solutions.

This Flutter plugin provides a native implementation of the zstd compression algorithm. It integrates the zstd library in C through FFI for native platforms (Android, iOS, Windows, macOS, and Linux), ensuring efficient compression and decompression. On the web, it leverages WebAssembly to deliver the same high-performance compression. This plugin enables seamless, cross-platform data compression, suitable for applications needing fast, efficient data processing.

Android iOS Web macOS Windows Linux Fuchsia
Status ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ❌
Native FFI FFI WebAssembly FFI FFI FFI ❌
Precompiled No No Yes (wasm) No No No ❌

Note: The C files for the compression library are sourced from the official facebook/zstd repository.

For command-line usage on desktops, refer to the zstandard_cli package.

Basic Usage #

void act() async {
  final zstandard = Zstandard();

  Uint8List original = Uint8List.fromList([...]);

  Uint8List? compressed = await zstandard.compress(original);
  
  final decompressed = compressed == null
      ? null
      : await zstandard.decompress(compressed);
}

With extension functions:

void act() async {
  Uint8List original = Uint8List.fromList([...]);

  Uint8List? compressed = await original.compress();
  
  final decompressed = await compressed.decompress();
}

Compression always emits a valid zstd frame, including for empty input. Decompression supports concatenated frames and frames without a declared content size. It returns null for malformed or truncated input and limits output to 256 MiB by default. Pass maxOutputSize to decompress (including the extension method) to choose a smaller application-specific budget.

Below are examples of the plugin in action across different platforms.