cramjam 2.14.0


pip install cramjam

  Latest version

Released: Oct 13, 2026


Meta
Requires Python: >=3.11

Classifiers

Programming Language
  • Python :: 3
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: 3.14
  • Python :: 3.15
  • Python :: Implementation :: CPython
  • Python :: Implementation :: PyPy

Typing
  • Typed

cramjam


CI Downloads PyPI Conda Version NPM Version

API Documentation

Install (Python)

pip install --upgrade cramjam  # Requires no Python or system dependencies!

Pure-Rust backend

By default zstd, lz4, bzip2, xz and deflate/gzip/zlib use their C libraries. To use libcramjam's pure-Rust implementations instead (same API, no C), install the add-on and select it before cramjam is imported:

pip install --upgrade "cramjam[pure-rust]"
export CRAMJAM_BACKEND=pure-rust  # `cramjam.backend` reports which is active

Output is interchangeable between backends, but the compressed bytes may differ.

Development

Install the locked development dependencies, build the extension, and run the test suite:

make dev-setup
make test

Rust checks can be run separately with cargo test.

Install (JavaScript / TypeScript)

npm install cramjam

CLI

A CLI interface is available as cramjam-cli

libcramjam

A Rust crate and C friendly library available at libcramjam


Extremely thin and easy-to-install Python bindings to de/compression algorithms in Rust. Allows for using algorithms such as Snappy, without any system or other python dependencies.


Benchmarks

Some basic benchmarks are available in the benchmarks directory


Available algorithms:

  • Snappy      cramjam.snappy
  • Brotli          cramjam.brotli
  • Bzip2          cramjam.bzip2
  • Lz4              cramjam.lz4
  • Gzip            cramjam.gzip
  • Zlib              cramjam.zlib
  • Deflate       cramjam.deflate
  • ZSTD           cramjam.zstd
  • XZ / LZMA  cramjam.xz

Experimental (Requires build from source enabling each feature):

  • Blosc2         cramjam.experimental.blosc2
  • ISA-L backend (only on 64-bit targets)
    • igzip          cramjam.experimental.igzip
    • ideflate     cramjam.experimental.ideflate
    • izlib           cramjam.experimental.izlib

All available for use as:

>>> import cramjam
>>> import numpy as np
>>> compressed = cramjam.snappy.compress(b"bytes here")
>>> decompressed = cramjam.snappy.decompress(compressed)
>>> decompressed
cramjam.Buffer(len=10)  # an object which implements the buffer protocol
>>> bytes(decompressed)
b"bytes here"
>>> np.frombuffer(decompressed, dtype=np.uint8)
array([ 98, 121, 116, 101, 115,  32, 104, 101, 114, 101], dtype=uint8)

Where the API is cramjam.<compression-variant>.compress/decompress and accepts bytes/bytearray/numpy.array/cramjam.File/cramjam.Buffer / memoryview objects.

de/compress_into Additionally, all variants support decompress_into and compress_into. Ex.

>>> import numpy as np
>>> from cramjam import snappy, Buffer
>>>
>>> data = np.frombuffer(b'some bytes here', dtype=np.uint8)
>>> data
array([115, 111, 109, 101,  32,  98, 121, 116, 101, 115,  32, 104, 101,
       114, 101], dtype=uint8)
>>>
>>> compressed = Buffer()
>>> snappy.compress_into(data, compressed)
33  # 33 bytes written to compressed buffer
>>>
>>> compressed.tell()  # Where is the buffer position?
33  # goodie!
>>>
>>> compressed.seek(0)  # Go back to the start of the buffer so we can prepare to decompress
>>> decompressed = b'0' * len(data)  # let's write to `bytes` as output
>>> decompressed
b'000000000000000'
>>>
>>> snappy.decompress_into(compressed, decompressed)
15  # 15 bytes written to decompressed
>>> decompressed
b'some bytes here'

TypeScript:

import {Compress, Decompress} from 'cramjam';

const decoder = new TextDecoder();
const encoder = new TextEncoder();

const str = 'hello, world';
const encoded = encoder.encode(str);

const compressed = Compress.brotli(encoded);
const decompressed = Decompress.brotli(compressed);

const decoded = decoder.decode(decompressed);

Wheel compatibility matrix

Platform CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython 3.15 CPython (additional flags: t) 3.14 CPython (additional flags: t) 3.15 PyPy 3.11 (pp73)
macosx_10_12_universal2
macosx_10_12_x86_64
macosx_10_13_universal2
macosx_10_13_x86_64
macosx_10_15_universal2
macosx_10_15_x86_64
macosx_11_0_arm64
manylinux_2_28_aarch64
manylinux_2_28_i686
manylinux_2_28_ppc64le
manylinux_2_28_s390x
manylinux_2_28_x86_64
manylinux_2_31_armv7l
manylinux_2_34_riscv64
manylinux_2_39_riscv64
musllinux_1_2_aarch64
musllinux_1_2_armv7l
musllinux_1_2_i686
musllinux_1_2_x86_64
pyemscripten_2025_0_wasm32
pyemscripten_2026_0_wasm32
win32
win_amd64
win_arm64

Files in release

cramjam-2.14.0-cp311-cp311-macosx_10_12_universal2.whl (3.3MiB)
cramjam-2.14.0-cp311-cp311-macosx_10_12_x86_64.whl (1.7MiB)
cramjam-2.14.0-cp311-cp311-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-cp311-cp311-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp311-cp311-manylinux_2_28_i686.whl (1.9MiB)
cramjam-2.14.0-cp311-cp311-manylinux_2_28_ppc64le.whl (2.1MiB)
cramjam-2.14.0-cp311-cp311-manylinux_2_28_s390x.whl (2.3MiB)
cramjam-2.14.0-cp311-cp311-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp311-cp311-manylinux_2_31_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl (2.0MiB)
cramjam-2.14.0-cp311-cp311-musllinux_1_2_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp311-cp311-musllinux_1_2_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp311-cp311-musllinux_1_2_i686.whl (2.0MiB)
cramjam-2.14.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.0MiB)
cramjam-2.14.0-cp311-cp311-win32.whl (1.6MiB)
cramjam-2.14.0-cp311-cp311-win_amd64.whl (1.7MiB)
cramjam-2.14.0-cp311-cp311-win_arm64.whl (1.6MiB)
cramjam-2.14.0-cp312-cp312-macosx_10_13_universal2.whl (3.3MiB)
cramjam-2.14.0-cp312-cp312-macosx_10_13_x86_64.whl (1.7MiB)
cramjam-2.14.0-cp312-cp312-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-cp312-cp312-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp312-cp312-manylinux_2_28_i686.whl (1.9MiB)
cramjam-2.14.0-cp312-cp312-manylinux_2_28_ppc64le.whl (2.1MiB)
cramjam-2.14.0-cp312-cp312-manylinux_2_28_s390x.whl (2.3MiB)
cramjam-2.14.0-cp312-cp312-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp312-cp312-manylinux_2_31_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl (2.0MiB)
cramjam-2.14.0-cp312-cp312-musllinux_1_2_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp312-cp312-musllinux_1_2_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp312-cp312-musllinux_1_2_i686.whl (2.0MiB)
cramjam-2.14.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.0MiB)
cramjam-2.14.0-cp312-cp312-win32.whl (1.6MiB)
cramjam-2.14.0-cp312-cp312-win_amd64.whl (1.7MiB)
cramjam-2.14.0-cp312-cp312-win_arm64.whl (1.6MiB)
cramjam-2.14.0-cp313-cp313-macosx_10_13_universal2.whl (3.3MiB)
cramjam-2.14.0-cp313-cp313-macosx_10_13_x86_64.whl (1.7MiB)
cramjam-2.14.0-cp313-cp313-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-cp313-cp313-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp313-cp313-manylinux_2_28_i686.whl (1.9MiB)
cramjam-2.14.0-cp313-cp313-manylinux_2_28_ppc64le.whl (2.1MiB)
cramjam-2.14.0-cp313-cp313-manylinux_2_28_s390x.whl (2.3MiB)
cramjam-2.14.0-cp313-cp313-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp313-cp313-manylinux_2_31_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl (2.0MiB)
cramjam-2.14.0-cp313-cp313-musllinux_1_2_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp313-cp313-musllinux_1_2_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp313-cp313-musllinux_1_2_i686.whl (2.0MiB)
cramjam-2.14.0-cp313-cp313-musllinux_1_2_x86_64.whl (2.0MiB)
cramjam-2.14.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl (1.1MiB)
cramjam-2.14.0-cp313-cp313-win32.whl (1.6MiB)
cramjam-2.14.0-cp313-cp313-win_amd64.whl (1.7MiB)
cramjam-2.14.0-cp313-cp313-win_arm64.whl (1.6MiB)
cramjam-2.14.0-cp314-cp314-macosx_10_15_universal2.whl (3.3MiB)
cramjam-2.14.0-cp314-cp314-macosx_10_15_x86_64.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-cp314-cp314-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp314-cp314-manylinux_2_28_i686.whl (1.9MiB)
cramjam-2.14.0-cp314-cp314-manylinux_2_28_ppc64le.whl (2.1MiB)
cramjam-2.14.0-cp314-cp314-manylinux_2_28_s390x.whl (2.3MiB)
cramjam-2.14.0-cp314-cp314-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp314-cp314-manylinux_2_31_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl (2.0MiB)
cramjam-2.14.0-cp314-cp314-musllinux_1_2_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp314-cp314-musllinux_1_2_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314-musllinux_1_2_i686.whl (2.0MiB)
cramjam-2.14.0-cp314-cp314-musllinux_1_2_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl (1.1MiB)
cramjam-2.14.0-cp314-cp314-win32.whl (1.6MiB)
cramjam-2.14.0-cp314-cp314-win_amd64.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314-win_arm64.whl (1.6MiB)
cramjam-2.14.0-cp314-cp314t-macosx_10_15_universal2.whl (3.3MiB)
cramjam-2.14.0-cp314-cp314t-macosx_10_15_x86_64.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314t-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-cp314-cp314t-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp314-cp314t-manylinux_2_28_i686.whl (1.9MiB)
cramjam-2.14.0-cp314-cp314t-manylinux_2_28_ppc64le.whl (2.1MiB)
cramjam-2.14.0-cp314-cp314t-manylinux_2_28_s390x.whl (2.3MiB)
cramjam-2.14.0-cp314-cp314t-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp314-cp314t-manylinux_2_31_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl (2.0MiB)
cramjam-2.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp314-cp314t-musllinux_1_2_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314t-musllinux_1_2_i686.whl (2.0MiB)
cramjam-2.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl (2.0MiB)
cramjam-2.14.0-cp314-cp314t-win32.whl (1.6MiB)
cramjam-2.14.0-cp314-cp314t-win_amd64.whl (1.7MiB)
cramjam-2.14.0-cp314-cp314t-win_arm64.whl (1.6MiB)
cramjam-2.14.0-cp315-cp315-macosx_10_15_universal2.whl (3.3MiB)
cramjam-2.14.0-cp315-cp315-macosx_10_15_x86_64.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-cp315-cp315-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp315-cp315-manylinux_2_28_i686.whl (1.9MiB)
cramjam-2.14.0-cp315-cp315-manylinux_2_28_ppc64le.whl (2.1MiB)
cramjam-2.14.0-cp315-cp315-manylinux_2_28_s390x.whl (2.3MiB)
cramjam-2.14.0-cp315-cp315-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp315-cp315-manylinux_2_31_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl (2.0MiB)
cramjam-2.14.0-cp315-cp315-musllinux_1_2_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp315-cp315-musllinux_1_2_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315-musllinux_1_2_i686.whl (2.0MiB)
cramjam-2.14.0-cp315-cp315-musllinux_1_2_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp315-cp315-win32.whl (1.6MiB)
cramjam-2.14.0-cp315-cp315-win_amd64.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315-win_arm64.whl (1.6MiB)
cramjam-2.14.0-cp315-cp315t-macosx_10_15_universal2.whl (3.3MiB)
cramjam-2.14.0-cp315-cp315t-macosx_10_15_x86_64.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315t-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-cp315-cp315t-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp315-cp315t-manylinux_2_28_i686.whl (1.9MiB)
cramjam-2.14.0-cp315-cp315t-manylinux_2_28_ppc64le.whl (2.1MiB)
cramjam-2.14.0-cp315-cp315t-manylinux_2_28_s390x.whl (2.3MiB)
cramjam-2.14.0-cp315-cp315t-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-cp315-cp315t-manylinux_2_31_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl (2.0MiB)
cramjam-2.14.0-cp315-cp315t-musllinux_1_2_aarch64.whl (1.8MiB)
cramjam-2.14.0-cp315-cp315t-musllinux_1_2_armv7l.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315t-musllinux_1_2_i686.whl (2.0MiB)
cramjam-2.14.0-cp315-cp315t-musllinux_1_2_x86_64.whl (2.0MiB)
cramjam-2.14.0-cp315-cp315t-win32.whl (1.6MiB)
cramjam-2.14.0-cp315-cp315t-win_amd64.whl (1.7MiB)
cramjam-2.14.0-cp315-cp315t-win_arm64.whl (1.6MiB)
cramjam-2.14.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl (1.8MiB)
cramjam-2.14.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl (1.6MiB)
cramjam-2.14.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (1.8MiB)
cramjam-2.14.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl (1.9MiB)
cramjam-2.14.0-pp311-pypy311_pp73-win_amd64.whl (1.7MiB)
cramjam-2.14.0.tar.gz (95.6KiB)
Extras:
Dependencies: