Skip to main content

pillow-rs

pillow-rs is a Rust image-processing library with Python and WebAssembly bindings. It follows Pillow's public behavior through a manifest-driven, input-only parity suite. The current source release is version 0.1.3; compatibility is measured per operation and backend rather than advertised as a complete Pillow replacement.

Current status

The active contract is defined by pillow-rs/tests/fixtures/manifest.yaml (migration-parity/manifest@2). The last complete all-backend campaign selected 11,345 public input workflows and recorded exact terminal output comparisons across the available CPU, SIMD, GPU, Node WASM, and browser WASM lanes. The GPU lane recorded 7,090 native dispatches and 137 explicitly classified host controls; those controls remain visible as backend coverage gaps. Benchmark budget acceptance remains open as described in docs/benchmark-backend-pending-2026-09-03.md.

Version 0.1.2 added three native-font boundary cases. Python 3.10, Python 3.12, Node, and browser WASM each passed 11,348/11,348 comparisons in the 0.1.2 main CI run. Changed-line evidence is recorded in docs/COVERAGE.md, and alpha publication gates are defined in docs/REGISTRY_RELEASE_MATRIX.md.

Version 0.1.3 fixes the npm publishing job's Node cache configuration. The 0.1.2 Cargo and PyPI uploads succeeded through OIDC; its npm job stopped before authentication. Runtime behavior and the parity corpus are unchanged in 0.1.3.

These figures are measured evidence from named runs, not a promise that every Pillow API, platform, or GPU adapter is supported.

Packages

Target Source Import/use
Rust core pillow-rs/ pillow_rs
Python extension pillow-rs-py/ from PIL import Image
WebAssembly package pillow-rs-js/README.md import { Image } from "pillow-rs"

The Python wheel uses the abi3-py38 boundary and declares requires-python >=3.8. The parity oracle is Pillow 12.2.0, which requires Python 3.10 or newer, so CI parity runs use Python 3.10 and 3.12. The WASM CI lane uses Node 22.14.0 with npm 11.5.1.

Quick start from a checkout

Use an isolated Python 3.10+ environment for the parity tools:

make setup-venv PYTHON=python3.12
make build
python -c "from PIL import Image; print(Image.new('RGB', (10, 10)))"

The Python package uses Pillow's normal PIL import path. make build is a local replacement install; for parity work, use make build-parity so the checkout facade is available on PYTHONPATH while the separately installed Pillow oracle remains intact.

Migrating from RSPIL

Replace the old package import directly:

from PIL import Image

The public PIL modules are backed by the Rust extension. pillow_rs is an internal binding namespace, and RSPIL remains only as a deprecated import bridge for older applications.

Build the WASM package and run its package check with:

make build-wasm-release
cd pillow-rs-js && npm run test:package

Published registry artifacts are not implied by this source checkout. Use the release checklist before installing from or publishing to PyPI, npm, or crates.io.

API and parity

The manifest currently declares 24 public surfaces, 209 operations, 1,801 requirements, 11,348 parity inputs, 24 coverage plans, and 744 standard benchmark workloads. These are declared/indexed counts; live results are kept separately in build/migration-parity/.

Every active parity case contains only public stimulus. Pillow produces the oracle result at run time, and the Rust target is compared with the same input. Coverage selectors and benchmark workloads reference those cases without embedding expected output bytes or hashes.

Regenerate and validate the input contract with:

make migration-parity-inputs
make migration-parity-inputs-check
make migration-parity-fixtures-check

Test and verification commands

The root Makefile is the maintained command interface:

make fmt
make clippy
make migration-parity-test
make migration-parity-test-all-backends
make migration-parity-coverage
make test

make test runs the shared target lanes, JS/WASM lanes, reverse Pillow source coverage, and the ordered missing-feature report. GPU and browser capability limitations are recorded in the result artifact. They are not converted into passing output.

For one case, use make migration-parity-case MIGRATION_PARITY_CASE=<case-id>. Use the same case ID with the coverage and all-backend variables when debugging a first divergence.

Benchmarking

The benchmark inputs and repeat policy are documented in docs/BENCHMARKING.md. Run the quick smoke cohort with:

MIGRATION_BENCHMARK_PROFILE=quick make migration-parity-benchmark
make migration-parity-pipeline-report

Run the complete standard workload set with MIGRATION_BENCHMARK_PROFILE=standard make migration-parity-benchmark. A timing number is publishable only when the workload passed its correctness gate and the manifest, input, runtime, and backend identities match the comparison. Use MIGRATION_BENCHMARK_PROFILE=release make migration-parity-benchmark for the fixed 11-workload release acceptance cohort. BENCHMARKS.md is a landing page; the JSON result is the evidence record.

Architecture

pillow-rs/       pure Rust image model, operations, pipeline, and backends
pillow-rs-py/    thin PyO3 boundary and Python compatibility modules
pillow-rs-js/    thin wasm-bindgen boundary and Node/browser adapters
scripts/         manifest generators, parity runners, validators, and reports

Runtime image logic lives in the Rust core. Bindings convert host values and delegate to it. The compute registry can route a pipeline through CPU, SIMD, or GPU; unsupported or unproven GPU work keeps an explicit host-control record and follows the configured fallback policy.

Documentation map

Page Purpose
CONTRIBUTING.md Setup, development, tests, coverage, and release checks
docs/DOCUMENTATION_CHECKLIST.md Active documentation rules and claim labels
docs/REPOSITORY_FILE_AUDIT.md Tracked-file classification and archive/deletion policy
docs/CI_CD_RELEASE_PLAN.md Fixed inputs, CI stages, release sequence, and Pages plan
docs/LOCAL_FIRST_RELEASE.md Exact local bootstrap tags, package order, evidence, and public prerequisites
docs/REGISTRY_RELEASE_MATRIX.md Local registry setup, dependency order, and guarded publication runbook
RELEASING.md Root artifact order, bootstrap rehearsal, and tag-driven releases
SECURITY.md Private vulnerability reporting and disclosure scope
SUPPORT.md Reproducible bug reports and parity support
CODE_OF_CONDUCT.md Contribution and project-space conduct
docs/REPO_MAP.md Maintained ownership map and generated source tree
docs/COVERAGE.md Current coverage evidence landing page
BENCHMARKS.md Current benchmark evidence landing page
docs/generated/ Generated contract and evidence views
docs/benchmark-backend-pending-2026-09-03.md Integrated GPU parity and benchmark acceptance record

Older dated reports, CODEBASE_AUDIT.md, SYSTEMIC_FIXES.md, and docs/superpowers/ are historical references. The retired fixture and oracle trees are under deprecated/ with an explicit migration map.

Contributing

Before opening a change, read CONTRIBUTING.md and the documentation checklist. New operations require a manifest entry, input-only parity and coverage cases, and measured coverage. Fixes must preserve failing cases and thresholds until the implementation is correct.

License and attribution

pillow-rs is licensed under the MIT-CMU License. It targets the public behavior of Pillow, whose license and attribution remain in LICENSE. The pinned fontdone checkout and image-slash-star dependency retain their own licenses and notices.

Release files for pillow-rs 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pillow-rs 0.1.3
File Size Uploaded
pillow_rs-0.1.3.tar.gz 4.6 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for pillow-rs 0.1.3
File Interpreter ABI Platform
pillow_rs-0.1.3-cp38-abi3-win_amd64.whl CPython 3.8 abi3 Windows x86-64 Details
pillow_rs-0.1.3-cp38-abi3-manylinux_2_28_x86_64.whl CPython 3.8 abi3 Linux glibc 2.28+ x86-64 Details
pillow_rs-0.1.3-cp38-abi3-macosx_11_0_arm64.whl CPython 3.8 abi3 macOS 11.0+ ARM64 Details

Total release size: 17.9 MB

Release files / pillow_rs-0.1.3.tar.gz

Download URL pillow_rs-0.1.3.tar.gz
Size 4.6 MB
Tags Source
SHA-256 checksum
How to use checksums
25c658fac508f9515b34c6d8248f83fbf0b8c231874c1f540fd2a20a43ae6751
BLAKE2b-256 checksum
How to use checksums
0b556289660024e544ec48842fd89a3461200d3cf482b7e0cbe0db1b7220595e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / pillow_rs-0.1.3-cp38-abi3-win_amd64.whl

Download URL pillow_rs-0.1.3-cp38-abi3-win_amd64.whl
Size 4.5 MB
Tags CPython 3.8 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
f8744f1120b97293ef26c47ad13d583c314aecf4f5db19d22bc7fd560d39ffa0
BLAKE2b-256 checksum
How to use checksums
f3988c0a94b41074cba062e95575e47dda91dc083e3fdcbe4d647127e0485e61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / pillow_rs-0.1.3-cp38-abi3-manylinux_2_28_x86_64.whl

Download URL pillow_rs-0.1.3-cp38-abi3-manylinux_2_28_x86_64.whl
Size 4.7 MB
Tags CPython 3.8 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
fcebb05c230483cbf066b953cf518eed6c9e57e95b7ea08a46b8a4fc1e107e1f
BLAKE2b-256 checksum
How to use checksums
5ebb7b40606c89b9ea5075e517bd4d36a150daebd85fd6194868a37f05fa1b30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / pillow_rs-0.1.3-cp38-abi3-macosx_11_0_arm64.whl

Download URL pillow_rs-0.1.3-cp38-abi3-macosx_11_0_arm64.whl
Size 4.1 MB
Tags CPython 3.8 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a086151ff336bc7372d701850f094f3df6bc1530edd567358b1a57706f8a12dd
BLAKE2b-256 checksum
How to use checksums
78c466dc1b5de4caa6d93dc89539b5ffbe6fc776b0e203b4a4bd95b16a901e73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

4 release files

0.1.2

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page