Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

msgspec-toon

TOON (Token-Oriented Object Notation) is a line-oriented text format that reduces repeated keys in uniform JSON-shaped data.

msgspec is a high-performance serialization and validation library whose typed Struct objects are a faster, lighter alternative to Pydantic models.

msgspec-toon is a native TOON 4.1 codec for Python. It decodes TOON text directly into msgspec.Struct objects. It does not build an intermediate dict and list tree.

Use it when tabular data must fit in a language model context window, but the application still needs typed Python objects and fast in-process conversion.

This is a beta release. The project passes the pinned TOON 4.1.1 corpus, but it does not yet support every type that msgspec.json supports.

Install

Install the public beta from PyPI:

uv add msgspec-toon

The package requires Python 3.13 or newer. Its only runtime dependency is the exact pin msgspec==0.21.1. Benchmark codecs and tokenizers are optional development dependencies. They are not installed with the library.

Decode TOON into a Struct

import msgspec
import msgspec_toon as toon


class Metadata(msgspec.Struct, frozen=True):
    alias: str
    region: str


class Worker(msgspec.Struct, frozen=True):
    pid: int
    provider: str
    metadata: Metadata


class Document(msgspec.Struct, frozen=True):
    workers: list[Worker]


wire = b"""workers[2]{pid,provider,metadata{alias,region}}:
  9007199254740993,claude,worker-a,west
  80916,claude,worker-b,east"""

decoder = toon.Decoder(Document)
document = decoder.decode(wire)

assert isinstance(document, Document)
assert document.workers[0].pid == 9007199254740993
assert toon.encode(document) == wire

The parser uses the target type while it reads the input. It constructs the final Struct objects directly. The G2 allocation proof records zero temporary built-in dictionaries and lists for this path.

Read and write TOON files

The codec accepts bytes, bytearray, memoryview, or str. Encoding returns bytes, so normal Python file APIs work without an adapter.

from pathlib import Path

import msgspec_toon as toon


source = Path("workers.toon")
target = Path("workers-copy.toon")

decoder = toon.Decoder(Document)
encoder = toon.Encoder()

value = decoder.decode(source.read_bytes())
target.write_bytes(encoder.encode(value))

The conversion itself does not open files, sockets, or subprocesses. Your application controls all I/O.

Use untyped values

Omit type when you need normal Python dictionaries and lists:

value = toon.decode(b"name: ada\nactive: true")
wire = toon.encode(value)

The public surface follows msgspec.json where support exists:

  • encode and decode
  • reusable Encoder and Decoder
  • enc_hook and dec_hook
  • strict decoding by default
  • msgspec-compatible encode, decode, and validation errors

The encoder can use one through 16 spaces per indentation level. The decoder default is two spaces. If you select another width, the producer and consumer must use the same setting:

wire = toon.encode(value, delimiter="\t", indent=1)
toon.decode(wire, indent_size=1)

If they do not match, the decode error reports the observed leading-space count and tells the caller to pass the matching indent_size. Using indent=1 can reduce tokens in nested documents, but it makes the width an out-of-band pipeline setting. Payload shape still decides whether TOON uses fewer tokens than compact JSON.

Decode accepts a leading UTF-8 byte order mark, Windows CRLF line endings, and a final newline. These inputs normalize only while reading; encoding does not emit a byte order mark.

The functional and reusable decoders both accept float_hook:

from decimal import Decimal

value = toon.decode(b"1.25", float_hook=Decimal)
decoder = toon.Decoder(float_hook=Decimal)

assert value == decoder.decode(b"1.25") == Decimal("1.25")

Typed encode and decode support these msgspec-native values:

  • datetime, date, time, and timedelta
  • UUID
  • Decimal
  • string Enum and integer Enum

The encoder normalizes these values before it calls enc_hook. Decimal values keep all their digits and trailing zeroes. Typed decode constructs each value without a built-in container tree.

from decimal import Decimal
from uuid import UUID

toon.encode(Decimal("1.2300"))
# b'"1.2300"'

toon.encode(Decimal("1.2300"), decimal_format="number")
# b'1.2300'

toon.encode(UUID("12345678-1234-5678-1234-567812345678"), uuid_format="hex")
# b'"12345678123456781234567812345678"'

TOON 4.1 uses one canonical spelling for whole numbers. Thus, the encoder writes 1.0 as 1. It writes -0.0 as 0, as required by the official fixtures.

An untyped decode returns an int for these values. A typed float decode returns a float, but it cannot recover the sign of -0.0 because the sign is not on the wire.

The codec does not implement sorted or deterministic output. Both encoder entry points raise NotImplementedError for these order values. They never ignore an accepted option.

Typed decode supports recursive Structs, array-like Structs, tagged Struct unions in both object and positional forms, native scalar values, and permissive scalar conversion. For a tagged array_like Struct, position zero is the discriminator and the declared fields follow it. A union must use one shape throughout: mixing object-form and array-like Struct variants fails during plan construction. Set strict=False to accept the same bool, integer, and float string conversions as msgspec 0.21.1. Strict mode stays the default.

Non-string mapping keys are intentionally rejected in 0.2.0b1. See the mapping-key policy.

Why not wrap another TOON codec?

A wrapper must first convert a Struct into built-in containers. Typed decode must parse a built-in tree and then call msgspec.convert. Those extra trees can cost more than the codec work.

Project Format target Typed msgspec path Integration model
msgspec-toon TOON 4.1.1 corpus Direct Struct encode and decode Native, in process
toon-rust TOON 3.0 No Python msgspec path Rust library and CLI
toons 0.7.0 Earlier TOON grammar Built-in tree Python Rust extension
python-toon 0.1.3 Earlier TOON grammar to_builtins / convert Pure Python and CLI

TOON 4 nested field groups are important. They let a uniform nested record use one tabular header:

workers[2]{pid,provider,metadata{alias,region}}:
  20324,claude,worker-a,west
  80916,claude,worker-b,east

Older encoders can fall back to a larger entry form for the same data.

Tokens and speed

Empirical speed-token Pareto set

The figure shows absolute end-to-end time against absolute o200k_base token count. Pareto status is calculated separately for each payload shape and record count. Lines connect the same implementation across record counts. They show workload scaling, not an unmeasured continuous Pareto curve.

The generated benchmark report also publishes the detailed axes:

  • Direct encode, decode, and total time for each measured codec.
  • Absolute token counts, including compact JSON, under tiktoken o200k_base.

The report crosses four payload shapes with four record counts. Canonical TOON uses more tokens than compact JSON for the measured irregular shapes.

All timing rows come from one session and one release build. The estimator is the mean across ten independent worker processes. It never reports the minimum. The raw evidence is in the conformance/report.json file.

Conformance and safety

  • All 538 pinned TOON 4.1.1 fixtures pass in both directions.
  • Typed decode creates no intermediate built-in container tree.
  • Integers keep Python precision and do not route through float.
  • Errors contain coordinates and static messages, never input payload text.
  • Malformed input must return an error. It must not panic or terminate Python.
  • Canonical output is byte-locked by tests.

The generated support matrix in the conformance/report.json file lists supported, rejected, and not-yet-supported msgspec features. Unsupported behavior fails clearly. It does not silently return a different value.

Optional msgspec Struct fast path

The stock package reads Struct fields through msgspec's public Python attributes. This is the compatible path for msgspec==0.21.1.

The repository also contains a versioned Struct-access capsule proposal for msgspec. You can build the same codec against that patch in an isolated environment:

make fastpath-build
make fastpath-check
make fastpath-bench
.venv-fastpath/bin/python

This workflow fetches a hash-pinned msgspec commit, applies the preserved patch, and builds both release wheels. It does not modify the normal .venv. The build fails unless the capsule path is active. Published wheels do not depend on the unreleased API.

Develop and reproduce

Use uv for all Python environment work:

uv sync --locked                         # library and developer tools
make build                              # release extension in .venv
make check                              # Rust and Python checks
make qualify                            # canonical release gate and evidence
uv run python conformance/run.py        # pinned 538-fixture corpus
make g2                                 # allocation proof in a separate build

uv sync --group bench --locked           # opt in to benchmark packages
make bench                              # same-run codec and typed ladders
make public-report                      # raw JSON, R charts, and BENCHMARKS.md

make public-report uses the host Rscript, ggplot2, jsonlite, and scales. It does not install R or add R packages to the Python environment. The release guide documents installed-artifact verification and Trusted Publishing.

License

MIT

Metadata

Release files for msgspec-toon 0.2.0b5

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

Source distribution (sdist)

Source distribution for msgspec-toon 0.2.0b5
File Size Uploaded
msgspec_toon-0.2.0b5.tar.gz 69.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for msgspec-toon 0.2.0b5
File
msgspec_toon-0.2.0b5-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
msgspec_toon-0.2.0b5-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
msgspec_toon-0.2.0b5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
msgspec_toon-0.2.0b5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details
msgspec_toon-0.2.0b5-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
msgspec_toon-0.2.0b5-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
msgspec_toon-0.2.0b5-cp313-abi3-win_arm64.whl CPython 3.13 abi3 Windows ARM64 Details
msgspec_toon-0.2.0b5-cp313-abi3-win_amd64.whl CPython 3.13 abi3 Windows x86-64 Details
msgspec_toon-0.2.0b5-cp313-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 abi3 Linux glibc 2.17+ x86-64 Details
msgspec_toon-0.2.0b5-cp313-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 abi3 Linux glibc 2.17+ ARM64 Details
msgspec_toon-0.2.0b5-cp313-abi3-macosx_11_0_arm64.whl CPython 3.13 abi3 macOS 11.0+ ARM64 Details
msgspec_toon-0.2.0b5-cp313-abi3-macosx_10_12_x86_64.whl CPython 3.13 abi3 macOS 10.12+ x86-64 Details

Total release size: 4.2 MB

Release files / msgspec_toon-0.2.0b5.tar.gz

Download URL msgspec_toon-0.2.0b5.tar.gz
Size 69.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2e3b4aef2a6eee0e6ebcfa4aa760b934bbe4afac4acb5397ef49529c65ee84cd
BLAKE2b-256 checksum
How to use checksums
23b1816d28f4be010860e9a1cf57d4266b7a7c2a606ceafa40283d0f5d1ea620
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp314-cp314t-win_arm64.whl

Download URL msgspec_toon-0.2.0b5-cp314-cp314t-win_arm64.whl
Size 282.4 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
b61c446e193291204f7539be6c003e4a9efaa2d11fe566a663cc183d026f84e6
BLAKE2b-256 checksum
How to use checksums
ac38f4bc52265d591b51162d52891fc1a175a54cf42470ff008483b9f784bf13
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp314-cp314t-win_amd64.whl

Download URL msgspec_toon-0.2.0b5-cp314-cp314t-win_amd64.whl
Size 294.8 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
0a94ae52b912bfb77c11d62fc5d04311b340e34e5395dcd6a346566f73bfb8ad
BLAKE2b-256 checksum
How to use checksums
2316b696a77dd063f0936b4d94c6077d8683fe06eab39fa29160a47816a555ab
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL msgspec_toon-0.2.0b5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 387.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3562df82d87516d086406536b44074b2157ab38852cdd8b28a6e7f1d2fd0b691
BLAKE2b-256 checksum
How to use checksums
084a12a7ec484ede73fe84da30ad64414d0a5f5e37cc7583891cd6ef8869ee54
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL msgspec_toon-0.2.0b5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 366.9 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
9a08d79b80d5fce96e45f9ee9365ebde96f842f4573330c1c808557120947eba
BLAKE2b-256 checksum
How to use checksums
946f1d59536c03493e5437d692dd7757c6505dfa017d426bac7b3a3a1846e25f
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp314-cp314t-macosx_11_0_arm64.whl

Download URL msgspec_toon-0.2.0b5-cp314-cp314t-macosx_11_0_arm64.whl
Size 349.3 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e4aadbb9706b91ad4e354c8cc626389e647e6f8892a8afb7cb408a428655f172
BLAKE2b-256 checksum
How to use checksums
1e820149ee72e8be11a43ccdd8d0492c7e5fafade17290dd8e82931c7a002d54
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL msgspec_toon-0.2.0b5-cp314-cp314t-macosx_10_12_x86_64.whl
Size 367.0 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
e054bb5c184b325a89a7414fe329525c7a21c174f785b0cbd17171b3b7af03ab
BLAKE2b-256 checksum
How to use checksums
61f5856859aca811ac42ddb7fce05c16ba797340c538253dc0f6c49b9e9a4c0d
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp313-abi3-win_arm64.whl

Download URL msgspec_toon-0.2.0b5-cp313-abi3-win_arm64.whl
Size 282.2 kB
Tags CPython 3.13 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
acd3790e4b3f35dfd41bb0e22215eec77c57ba4b0e15eeaecf9cd7c9d2cbaaa5
BLAKE2b-256 checksum
How to use checksums
d25c11f2d4c7e96e95d669bc97c11a3867ae4bd93c7effb47d19906e7d1968f2
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp313-abi3-win_amd64.whl

Download URL msgspec_toon-0.2.0b5-cp313-abi3-win_amd64.whl
Size 294.7 kB
Tags CPython 3.13 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
209f24d6a3ee7981db60b98004649104447450f35fe21f19cd2dd67446fd5425
BLAKE2b-256 checksum
How to use checksums
2c5ed06510d8bc91e380d6771530fac0f2a8ebc0395a92f788dbd6748f9da761
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp313-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL msgspec_toon-0.2.0b5-cp313-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 386.7 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
ffa737028c41f57564733570ce65d0479a6d6cd830efac2c3a35493eb94d9459
BLAKE2b-256 checksum
How to use checksums
d05fd87c35ea8e7a60b1a0fa3f2348ec42e46c1ab9d11297a33eb591f40baebf
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp313-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL msgspec_toon-0.2.0b5-cp313-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 367.2 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
ea1c33b145db386c1403f3dd2d6bbb16ac1d31438542e6d9712f7e56afa1a565
BLAKE2b-256 checksum
How to use checksums
bd9370344ba8d49519e2cd7298fe729f75b06fac2da0476f7e2d88709f5fc3ba
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp313-abi3-macosx_11_0_arm64.whl

Download URL msgspec_toon-0.2.0b5-cp313-abi3-macosx_11_0_arm64.whl
Size 349.8 kB
Tags CPython 3.13 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
12bc29f6604085af464fe1af39d88ec8402ebc4b728ddfb1d71d9aab3361409f
BLAKE2b-256 checksum
How to use checksums
48e94ff5b60038635a925aae1398f95a73df7e3573a12207d4bda49d0e25692d
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 Aug 11, 2026.

Transparency log

Release files / msgspec_toon-0.2.0b5-cp313-abi3-macosx_10_12_x86_64.whl

Download URL msgspec_toon-0.2.0b5-cp313-abi3-macosx_10_12_x86_64.whl
Size 367.3 kB
Tags CPython 3.13 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
41622aa77475c49a9b7b2208ec870a21c38dcca93c834cf665adcd98a7639d6a
BLAKE2b-256 checksum
How to use checksums
ed01759ec401f2b378bb18439e0dfca93be0ea72e0c147253cbc026faaeb0a58
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 Aug 11, 2026.

Transparency log
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