Skip to main content

zplkit

Parse Zebra Programming Language (ZPL) and render labels locally to PNG, SVG, or multipage PDF, powered by the Rust zpl renderer. No printer, subprocess, network service, or Python runtime dependencies are needed. Both the PyPI distribution and Python import are named zplkit.

Installation

Requires Python 3.10 or newer. Install from PyPI, preferably in a virtual environment:

python -m pip install zplkit

Prebuilt wheels need no Rust toolchain. Wheels are available for Linux x86_64/ARM64 (glibc 2.28+), macOS Intel/Apple Silicon, and Windows x86_64. On other platforms, pip builds the source distribution, which requires a stable Rust toolchain and a native linker. To require a prebuilt wheel:

python -m pip install --only-binary=:all: zplkit

Quick start

from pathlib import Path
from zplkit import Options, render

options = Options(profile="specification", width=400, height=200, dpi=203)
document = render(b"^XA^FO20,20^A0N,32,0^FDHello, ZPL!^FS^XZ", options)
for index, label in enumerate(document.labels):
    Path(f"label-{index}.png").write_bytes(label.png())
    Path(f"label-{index}.svg").write_bytes(label.svg())
Path("labels.pdf").write_bytes(document.pdf())
print(document.warnings)

render accepts bytes unchanged or encodes str as UTF-8. A string does not implicitly select ^CI28; select the appropriate ZPL character encoding yourself. Use bytes for other printer encodings and binary downloads. Convert mutable buffers with bytes(buffer) before calling.

Options() uses the native ZD621 203-DPI defaults. Profiles are zd621, specification, and zq610-plus; their native initial dimensions and DPI apply unless overridden. ZPL ^PW and ^LL can also change dimensions. The printer profiles have the same firmware/capture scope and fidelity limitations as the Rust renderer.

All compatibility fields are available independently. Configurations are immutable; replace returns a changed copy. Compatibility() starts with all overrides disabled, matching the native type; use an options object to start from a printer profile:

base = Options(profile="zd621")
options = Options(compatibility=base.compatibility.replace(
    qr_printer_mask_selection=False,
))

document.labels returns scenes in source order. Each scene has width, height, and dpi, and encodes to PNG, SVG or single-page PDF bytes. The document PDF contains all labels in order. Scenes remain usable after the document is released. Warnings are returned, never silently printed or discarded.

For raw pixels, scene.rasterize() returns a raster with width, height, and pixels: row-major bytes, one byte per dot, 0 black and 255 white. For example, with optional Pillow installed:

from PIL import Image
raster = document.labels[0].rasterize()
image = Image.frombytes("L", (raster.width, raster.height), raster.pixels)

Parse without rendering

from zplkit.parse import parse, Syntax

source = b"^XA^FO10,20^FDhello^FS^XZ"
result = parse(source)
assert b"".join(bytes(element) for element in result.elements) == source
for element in result.elements:
    print(element.kind, element.offset, element.data)
next_result = parse(b"^XA^XZ", syntax=result.syntax)

Kinds are before_first_command, format_command, control_command, and control_character. Elements preserve every byte, including whitespace, unknown commands, and binary payloads. Offsets are byte offsets, including for UTF-8 strings. Syntax(format_prefix=94, control_prefix=126, delimiter=44) controls initial syntax; the result reports final syntax after changes in the stream. Framing does not validate operands, establish render support, or authorize printer operations. Parsing consumes a complete buffer and raises on any framing error; it does not return partial results.

Limits and errors

from zplkit.rendering import Limits, RenderError
from zplkit.output import Limits as OutputLimits

try:
    document = render(b"^XA^XZ", limits=Limits(input_bytes=4096, labels=1))
    png = document.labels[0].png(limits=OutputLimits(pixels=2_000_000))
except RenderError as error:
    print(error.offset, error.message)

The default resource budgets exactly match the bounded Rust library defaults. Every field in render::Limits and output::Limits can be overridden through keyword arguments or replace. Output budgets are independent of rendering budgets. Floating-point ceilings must be finite and nonnegative. Unknown fields raise TypeError; integer overflow/negative unsigned values raise OverflowError. The parser has no resource budget; callers control the input buffer size.

zplkit.parse.ParseError has offset and kind; zplkit.rendering.RenderError has offset and message; zplkit.output.OutputError preserves the native diagnostic. All three extend ValueError. zplkit.__version__ is the binding package version; zplkit.library_version identifies the linked renderer. Type hints and py.typed are included. Native parsing, rendering and output encoding release the GIL.

The binding covers command framing, render options and compatibility, resource limits, rendered documents/scenes, and output adapters. It does not yet expose custom font-provider callbacks, TrueType/bitmap decoding utilities, arbitrary scene construction/editing, or custom raster destination callbacks.

The bindings and linked workspace crates are licensed under the Open Software License 3.0.

Metadata

Release files for zplkit 0.3.1

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

Source distribution (sdist)

Source distribution for zplkit 0.3.1
File Size Uploaded
zplkit-0.3.1.tar.gz 4.0 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for zplkit 0.3.1
File
zplkit-0.3.1-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
zplkit-0.3.1-cp310-abi3-manylinux_2_28_x86_64.whl CPython 3.10 abi3 Linux glibc 2.28+ x86-64 Details
zplkit-0.3.1-cp310-abi3-manylinux_2_28_aarch64.whl CPython 3.10 abi3 Linux glibc 2.28+ ARM64 Details
zplkit-0.3.1-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
zplkit-0.3.1-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 11.3 MB

Release files / zplkit-0.3.1.tar.gz

Download URL zplkit-0.3.1.tar.gz
Size 4.0 MB
Tags Source
SHA-256 checksum
How to use checksums
0023ecf94e9f3d865a8ff82f9d72085bfa03ea9fc460516d5f58d5db46f670a1
BLAKE2b-256 checksum
How to use checksums
d89e8f228a9757c5322961e9538cdc0cb440c2bb13a2d7f8dd0025c6f5f44d5e
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 Oct 18, 2026.

Transparency log

Release files / zplkit-0.3.1-cp310-abi3-win_amd64.whl

Download URL zplkit-0.3.1-cp310-abi3-win_amd64.whl
Size 1.4 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
8687e0b546854cad84fad4735df552031d056b01069c4de3c8f5164b6e5c4522
BLAKE2b-256 checksum
How to use checksums
037d135ccdef62a196b4be7b4159ba79a5dc76ae588f08fd870c2a3f515d5898
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 Oct 18, 2026.

Transparency log

Release files / zplkit-0.3.1-cp310-abi3-manylinux_2_28_x86_64.whl

Download URL zplkit-0.3.1-cp310-abi3-manylinux_2_28_x86_64.whl
Size 1.5 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
4b81f8a3c50694cb5ee2a7b2f4234446bc01cce3a836dbf6c791b1b2fe9d3153
BLAKE2b-256 checksum
How to use checksums
4e52ff8d6807bfde3ab3f4e5fa1af3ccd8481f60e5e4075003d9d21b4cae1e42
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 Oct 18, 2026.

Transparency log

Release files / zplkit-0.3.1-cp310-abi3-manylinux_2_28_aarch64.whl

Download URL zplkit-0.3.1-cp310-abi3-manylinux_2_28_aarch64.whl
Size 1.4 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
58816a779e4d521b305d6660d1d08f86c193c5cbf1c3ea2f3ec7e093a5d0d0ad
BLAKE2b-256 checksum
How to use checksums
1798f3a32c87ab8d985f13d7b767a1d43747c1e910f03dc670c93996956ae15f
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 Oct 18, 2026.

Transparency log

Release files / zplkit-0.3.1-cp310-abi3-macosx_11_0_arm64.whl

Download URL zplkit-0.3.1-cp310-abi3-macosx_11_0_arm64.whl
Size 1.5 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f6a7c4a2acd43c0ee7d91ccae1008bfbec3d3c5914cd8dc65081a08da571fae3
BLAKE2b-256 checksum
How to use checksums
2ec8d0dd72747aa022def28b8e2313762f3c6f253285ab10f85faeafe3d22c01
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 Oct 18, 2026.

Transparency log

Release files / zplkit-0.3.1-cp310-abi3-macosx_10_12_x86_64.whl

Download URL zplkit-0.3.1-cp310-abi3-macosx_10_12_x86_64.whl
Size 1.5 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
5c865625802d5945c770162b692af0c6d149ffd878c9a652283d17bf6a4194c2
BLAKE2b-256 checksum
How to use checksums
3bb4b7d0e0f94954f8bc0becc2c5e37a51bab7aa0ac347c5f6232c920ed97731
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 Oct 18, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.2

6 release files

This release

0.3.1 This release

6 release files

0.3.0

6 release files

0.2.1

6 release files

0.2.0

6 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