blake3 1.0.9


pip install blake3

  Latest version

Released: Jun 22, 2026


Meta
Author: Jack O'Connor <oconnor663@gmail.com>
Requires Python: >=3.8

Classifiers

Development Status
  • 5 - Production/Stable

Programming Language
  • Python
  • Python :: 3 :: Only
  • Python :: Free Threading
  • Rust

Topic
  • Security
  • Security :: Cryptography
  • Utilities

blake3-py tests PyPI version

Python bindings for the official Rust implementation of BLAKE3, based on PyO3. These bindings expose all the features of BLAKE3, including extendable output, keying, and multithreading. The basic API matches that of Python's standard hashlib module.

Examples

from blake3 import blake3

# Hash some input all at once. The input can be bytes, a bytearray, or a memoryview.
hash1 = blake3(b"foobarbaz").digest()

# Hash the same input incrementally.
hasher = blake3()
hasher.update(b"foo")
hasher.update(b"bar")
hasher.update(b"baz")
hash2 = hasher.digest()
assert hash1 == hash2

# Hash the same input fluently.
assert hash1 == blake3(b"foo").update(b"bar").update(b"baz").digest()

# Hexadecimal output.
print("The hash of 'hello world' is", blake3(b"hello world").hexdigest())

# Use the keyed hashing mode, which takes a 32-byte key.
import secrets
random_key = secrets.token_bytes(32)
message = b"a message to authenticate"
mac = blake3(message, key=random_key).digest()

# Use the key derivation mode, which takes a context string. Context strings
# should be hardcoded, globally unique, and application-specific.
context = "blake3-py 2020-03-04 11:13:10 example context"
key_material = b"usually at least 32 random bytes, not a password"
derived_key = blake3(key_material, derive_key_context=context).digest()

# Extendable output. The default digest size is 32 bytes.
extended = blake3(b"foo").digest(length=100)
assert extended[:32] == blake3(b"foo").digest()
assert extended[75:100] == blake3(b"foo").digest(length=25, seek=75)

# Hash a large input using multiple threads. Note that this can be slower for
# inputs shorter than ~1 MB, and it's a good idea to benchmark it for your use
# case on your platform.
large_input = bytearray(1_000_000)
hash_single = blake3(large_input).digest()
hash_two = blake3(large_input, max_threads=2).digest()
hash_many = blake3(large_input, max_threads=blake3.AUTO).digest()
assert hash_single == hash_two == hash_many

# Hash a file with multiple threads using memory mapping. This is what b3sum
# does by default.
file_hasher = blake3(max_threads=blake3.AUTO)
file_hasher.update_mmap("/big/file.txt")
file_hash = file_hasher.digest()

# Copy a hasher that's already accepted some input.
hasher1 = blake3(b"foo")
hasher2 = hasher1.copy()
hasher1.update(b"bar")
hasher2.update(b"baz")
assert hasher1.digest() == blake3(b"foobar").digest()
assert hasher2.digest() == blake3(b"foobaz").digest()

Installation

The blake3 package is installable from PyPI like most other Python packages. For folks using a package manager like uv, that's:

uv add blake3

Or the "old school" way:

pip install blake3

This package uses the Rust implementation of BLAKE3 internally. There are binary wheels available on PyPI for most environments, so most users don't need a Rust compiler. But if you're building the source distribution, or if a binary wheel isn't available for your environment, you'll need to install the Rust toolchain first.

C Bindings

Experimental bindings for the official BLAKE3 C implementation are available in the c_impl directory. These will probably not be published on PyPI, and most applications should prefer the Rust-based bindings. But if you can't depend on the Rust toolchain, and you're on some platform that this project doesn't provide binary wheels for, the C-based bindings might be an alternative.

Wheel compatibility matrix

Platform CPython 3.8 CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython (additional flags: t) 3.14
macosx_10_12_x86_64
macosx_11_0_arm64
manylinux2014_aarch64
manylinux2014_armv7l
manylinux2014_i686
manylinux2014_ppc64le
manylinux2014_s390x
manylinux2014_x86_64
manylinux_2_17_aarch64
manylinux_2_17_armv7l
manylinux_2_17_i686
manylinux_2_17_ppc64le
manylinux_2_17_s390x
manylinux_2_17_x86_64
manylinux_2_31_riscv64
musllinux_1_1_aarch64
musllinux_1_1_x86_64
win32
win_amd64

Files in release

blake3-1.0.9-cp310-cp310-macosx_10_12_x86_64.whl (338.4KiB)
blake3-1.0.9-cp310-cp310-macosx_11_0_arm64.whl (327.5KiB)
blake3-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (369.2KiB)
blake3-1.0.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (368.7KiB)
blake3-1.0.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (441.0KiB)
blake3-1.0.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (481.1KiB)
blake3-1.0.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (378.2KiB)
blake3-1.0.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (378.5KiB)
blake3-1.0.9-cp310-cp310-manylinux_2_31_riscv64.whl (375.7KiB)
blake3-1.0.9-cp310-cp310-musllinux_1_1_aarch64.whl (540.3KiB)
blake3-1.0.9-cp310-cp310-musllinux_1_1_x86_64.whl (581.3KiB)
blake3-1.0.9-cp310-cp310-win32.whl (225.7KiB)
blake3-1.0.9-cp310-cp310-win_amd64.whl (215.7KiB)
blake3-1.0.9-cp311-cp311-macosx_10_12_x86_64.whl (338.1KiB)
blake3-1.0.9-cp311-cp311-macosx_11_0_arm64.whl (327.6KiB)
blake3-1.0.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (368.8KiB)
blake3-1.0.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (368.6KiB)
blake3-1.0.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (440.6KiB)
blake3-1.0.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (480.5KiB)
blake3-1.0.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (377.8KiB)
blake3-1.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (378.8KiB)
blake3-1.0.9-cp311-cp311-manylinux_2_31_riscv64.whl (375.3KiB)
blake3-1.0.9-cp311-cp311-musllinux_1_1_aarch64.whl (540.0KiB)
blake3-1.0.9-cp311-cp311-musllinux_1_1_x86_64.whl (581.1KiB)
blake3-1.0.9-cp311-cp311-win32.whl (225.8KiB)
blake3-1.0.9-cp311-cp311-win_amd64.whl (215.5KiB)
blake3-1.0.9-cp312-cp312-macosx_10_12_x86_64.whl (336.5KiB)
blake3-1.0.9-cp312-cp312-macosx_11_0_arm64.whl (321.2KiB)
blake3-1.0.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (365.0KiB)
blake3-1.0.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (365.4KiB)
blake3-1.0.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (436.3KiB)
blake3-1.0.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (475.9KiB)
blake3-1.0.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (374.8KiB)
blake3-1.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (374.9KiB)
blake3-1.0.9-cp312-cp312-manylinux_2_31_riscv64.whl (371.2KiB)
blake3-1.0.9-cp312-cp312-musllinux_1_1_aarch64.whl (536.6KiB)
blake3-1.0.9-cp312-cp312-musllinux_1_1_x86_64.whl (577.5KiB)
blake3-1.0.9-cp312-cp312-win32.whl (223.9KiB)
blake3-1.0.9-cp312-cp312-win_amd64.whl (213.1KiB)
blake3-1.0.9-cp313-cp313-macosx_10_12_x86_64.whl (335.8KiB)
blake3-1.0.9-cp313-cp313-macosx_11_0_arm64.whl (320.8KiB)
blake3-1.0.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (364.9KiB)
blake3-1.0.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (365.4KiB)
blake3-1.0.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (435.7KiB)
blake3-1.0.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (475.8KiB)
blake3-1.0.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl (375.0KiB)
blake3-1.0.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (374.6KiB)
blake3-1.0.9-cp313-cp313-manylinux_2_31_riscv64.whl (371.4KiB)
blake3-1.0.9-cp313-cp313-musllinux_1_1_aarch64.whl (536.3KiB)
blake3-1.0.9-cp313-cp313-musllinux_1_1_x86_64.whl (577.3KiB)
blake3-1.0.9-cp313-cp313-win32.whl (223.7KiB)
blake3-1.0.9-cp313-cp313-win_amd64.whl (212.5KiB)
blake3-1.0.9-cp314-cp314-macosx_10_12_x86_64.whl (337.3KiB)
blake3-1.0.9-cp314-cp314-macosx_11_0_arm64.whl (322.3KiB)
blake3-1.0.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (366.4KiB)
blake3-1.0.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (365.0KiB)
blake3-1.0.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl (436.5KiB)
blake3-1.0.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (477.0KiB)
blake3-1.0.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl (375.9KiB)
blake3-1.0.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (375.3KiB)
blake3-1.0.9-cp314-cp314-manylinux_2_31_riscv64.whl (372.2KiB)
blake3-1.0.9-cp314-cp314-musllinux_1_1_aarch64.whl (537.7KiB)
blake3-1.0.9-cp314-cp314-musllinux_1_1_x86_64.whl (578.0KiB)
blake3-1.0.9-cp314-cp314-win32.whl (224.0KiB)
blake3-1.0.9-cp314-cp314-win_amd64.whl (213.4KiB)
blake3-1.0.9-cp314-cp314t-macosx_10_12_x86_64.whl (337.0KiB)
blake3-1.0.9-cp314-cp314t-macosx_11_0_arm64.whl (321.6KiB)
blake3-1.0.9-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (365.4KiB)
blake3-1.0.9-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (365.0KiB)
blake3-1.0.9-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl (436.1KiB)
blake3-1.0.9-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (475.8KiB)
blake3-1.0.9-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl (375.7KiB)
blake3-1.0.9-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (375.5KiB)
blake3-1.0.9-cp314-cp314t-manylinux_2_31_riscv64.whl (371.7KiB)
blake3-1.0.9-cp314-cp314t-musllinux_1_1_aarch64.whl (537.1KiB)
blake3-1.0.9-cp314-cp314t-musllinux_1_1_x86_64.whl (578.4KiB)
blake3-1.0.9-cp314-cp314t-win32.whl (224.1KiB)
blake3-1.0.9-cp314-cp314t-win_amd64.whl (212.9KiB)
blake3-1.0.9-cp38-cp38-macosx_10_12_x86_64.whl (341.2KiB)
blake3-1.0.9-cp38-cp38-macosx_11_0_arm64.whl (330.8KiB)
blake3-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (372.5KiB)
blake3-1.0.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (371.2KiB)
blake3-1.0.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (444.7KiB)
blake3-1.0.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (483.9KiB)
blake3-1.0.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (380.5KiB)
blake3-1.0.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (382.9KiB)
blake3-1.0.9-cp38-cp38-manylinux_2_31_riscv64.whl (379.1KiB)
blake3-1.0.9-cp38-cp38-musllinux_1_1_aarch64.whl (543.2KiB)
blake3-1.0.9-cp38-cp38-musllinux_1_1_x86_64.whl (583.7KiB)
blake3-1.0.9-cp38-cp38-win32.whl (227.4KiB)
blake3-1.0.9-cp38-cp38-win_amd64.whl (217.9KiB)
blake3-1.0.9-cp39-cp39-macosx_10_12_x86_64.whl (340.9KiB)
blake3-1.0.9-cp39-cp39-macosx_11_0_arm64.whl (330.7KiB)
blake3-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (371.9KiB)
blake3-1.0.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (370.9KiB)
blake3-1.0.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (443.9KiB)
blake3-1.0.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (484.1KiB)
blake3-1.0.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (380.4KiB)
blake3-1.0.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (382.2KiB)
blake3-1.0.9-cp39-cp39-manylinux_2_31_riscv64.whl (378.7KiB)
blake3-1.0.9-cp39-cp39-musllinux_1_1_aarch64.whl (542.6KiB)
blake3-1.0.9-cp39-cp39-musllinux_1_1_x86_64.whl (583.5KiB)
blake3-1.0.9-cp39-cp39-win32.whl (227.2KiB)
blake3-1.0.9-cp39-cp39-win_amd64.whl (217.5KiB)
blake3-1.0.9.tar.gz (114.1KiB)
Extras: None
Dependencies:
typing-extensions (>=4.6.0)