pillow-jxl-plugin
Pillow plugin for JPEG-XL, using Rust for bindings.
What it is and what it does
pillow-jxl-plugin is a Pillow plugin that adds JPEG-XL (JXL) codec support via Rust bindings to libjxl. Once imported, it registers itself with Pillow and enables reading and writing JXL images through the standard image interface. The plugin supports both lossless encoding and lossy encoding with quality parameters, and can preserve EXIF metadata during encoding.
It depends on pillow and packaging, and is distributed as pre-compiled wheels for Python 3.10–3.13 across Windows, macOS, and Linux platforms (manylinux and musllinux). Some platform–interpreter combinations lack wheels and require building from source, which needs Rust installed.
Use it for:
- Convert PNG or JPEG images to JXL format for better compression while preserving quality or lossless fidelity.
- Read JXL images in image processing pipelines that already use Pillow without learning a separate API.
- Batch-transcode image collections to JXL as part of web asset optimization workflows.
- Encode images with EXIF metadata intact when switching to JXL in photo management applications.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Registers JPEG-XL codec support with Pillow, enabling reading and writing of JXL images through the standard image API with lossless and quality-based encoding options.
Yes, if you need JXL support in Pillow and your platform has a compatible wheel. The package is actively maintained, has no known vulnerabilities, and integrates seamlessly with Pillow's standard API. The main caveat is the unclear license status—verify the repository's license before use in proprietary projects. Install friction is moderate due to compiled bindings, but wheels cover most common environments.
Install
pillow-jxl-plugin on PyPI
pip
pip install pillow-jxl-pluginuv
uv add pillow-jxl-pluginpoetry
poetry add pillow-jxl-pluginInstalling pillow-jxl-plugin
Before you install
Medium install friction due to compiled Rust bindings; wheels are available for Python 3.10–3.13 on Windows, macOS, and Linux (manylinux/musllinux), but not all platform combinations are covered. Actively maintained with a recent release.
License in practice
License status is unclear; no SPDX identifier or raw license text is declared in the package metadata. Verify the actual license terms in the repository before use in proprietary or restricted contexts.
Quickstart
import pillow_jxl
from packaging import version
# After import, use standard image operations
# with Image.open("example.png") as img:
# img.save("example.jxl", lossless=True)
Requires pillow and packaging as runtime dependencies; Rust toolchain needed only when building from source.
Verify before relying
- Actual license terms (no SPDX or raw license metadata provided)
- Performance characteristics and stability guarantees across versions
- Whether EXIF metadata encoding works reliably across all supported platforms
Package facts
| License | not declared (unclear) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 2 — packaging, pillow |
| Maintenance | actively maintained — 28 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 215,553/month — #9,398 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: pillow_jxl_plugin-1.3.8-cp310-cp310-macosx_10_12_x86_64.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-macosx_11_0_arm64.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-musllinux_1_2_aarch64.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-musllinux_1_2_armv7l.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-musllinux_1_2_i686.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-musllinux_1_2_x86_64.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-win32.whl; pillow_jxl_plugin-1.3.8-cp310-cp310-win_amd64.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-macosx_10_12_x86_64.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-macosx_11_0_arm64.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-musllinux_1_2_aarch64.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-musllinux_1_2_armv7l.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-musllinux_1_2_i686.whl; pillow_jxl_plugin-1.3.8-cp311-cp311-musllinux_1_2_x86_64.whl
Tags
More Graphics packages
Pillow adds image processing capabilities to…
permissive · top 100 on PyPI
fonttoolsfonttools manipulates font files in multiple…
permissive · top 1,000 on PyPI
matplotlib-inlineEnables matplotlib figures to display inline…
permissive · top 1,000 on PyPI
pymupdfPyMuPDF extracts, renders, converts, and…
agpl · top 1,000 on PyPI
pypdfium2pypdfium2 is a Python binding to PDFium that…
permissive · top 1,000 on PyPI
altairAltair is a declarative Python library for…
permissive · top 1,000 on PyPI
pyjpeglsEncodes and decodes image data using the…
permissive · top 15,000 on PyPI
PyTurboJPEGPyTurboJPEG wraps libjpeg-turbo to decode and…
permissive · top 15,000 on PyPI
pillow-avif-pluginRegisters AVIF image format support with…
permissive · top 5,000 on PyPI
simplejpegEncodes and decodes JPEG images directly to and…
permissive · top 15,000 on PyPI
pilkitPILKit provides a collection of image…
permissive · top 15,000 on PyPI
WillowWillow provides a unified API for image…
permissive · top 5,000 on PyPI
java-manifestEncode and decode Java's META-INF/MANIFEST.MF…
unclear · top 15,000 on PyPI
pylibjpegDecodes and encodes JPEG, JPEG-LS, JPEG 2000,…
permissive · top 15,000 on PyPI
pylibjpeg-openjpegDecodes and encodes JPEG 2000 images to and…
permissive · top 15,000 on PyPI