Skip to main content

treekle🌳

PyPI version CI Python 3.12+ License: Apache-2.0 Discord

tree + pickle: pickle's semantics, written as a plain tree of dicts, lists, and scalars instead of opaque bytes.

Quick Start

# Mac:
#   # Required for quick install.
#   brew install uv

# Ubuntu/Debian:
#   # Required for quick install.
#   sudo apt-get install -y curl
#   curl -LsSf https://astral.sh/uv/install.sh | sh

uv add treekle

# Alternatively: python -m pip install treekle

to_plain turns a value into plain data any JSON, TOML, or YAML writer can store. from_plain turns it back into the type you ask for. Neither touches text, so the wire format is yours.

Example

from __future__ import annotations

from collections.abc import Callable
from dataclasses import dataclass
from pathlib import Path
from types import MappingProxyType

import json
import math

from treekle import ABSENT, ReadError, from_plain, to_plain


def by_name(user: User) -> str:
    return user.name


@dataclass
class User:
    name: str


@dataclass
class Job:
    owner: User
    reviewer: User
    fallback: object
    sort_key: Callable[[User], str]
    output: type
    root: Path
    timeout: float
    env: MappingProxyType[str, str]


ada = User("ada")
job = Job(
    owner=ada,
    reviewer=ada,  # the same object
    fallback=ABSENT,  # a singleton
    sort_key=by_name,  # a function
    output=dict,  # a class
    root=Path("/srv"),
    timeout=math.inf,  # JSON has no inf
    env=MappingProxyType({"LANG": "C"}),
)

back = from_plain(json.loads(json.dumps(to_plain(job))), Job, allow_imports=True)
assert back.owner is back.reviewer
assert back.fallback is ABSENT
assert back.sort_key is by_name
assert back.output is dict
assert back.root == Path("/srv")
assert back.timeout == math.inf
assert isinstance(back.env, MappingProxyType)

Every other library fails on the same job:

  • pickle

    TypeError: cannot pickle 'mappingproxy' object
    
  • jsonpickle

    AttributeError: 'Absent' object attribute '_instance' is read-only
    
  • pydantic

    PydanticSchemaGenerationError: Unable to generate pydantic-core schema for mappingproxy[str, str]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it.
    
  • msgspec

    TypeError: Encoding objects of type Absent is unsupported
    
  • cattrs

    TypeError: Object of type Absent is not JSON serializable
    
  • mashumaro

    UnserializableField: Field "fallback" of type object in Job is not serializable
    

Additionally, treekle reads bad inputs all the way through:

@dataclass
class Team:
    a: User
    b: User
    c: User


bad = '{"a": {"name": "ada"}, "b": {"name": 7}, "c": {"name": 8}}'
try:
    from_plain(json.loads(bad), Team)
except ReadError as error:
    error.partial
    # Team(a=User(name='ada'),
    #      b=User(name=Invalid(raw=7, reason='cannot read 7 as str')),
    #      c=User(name=Invalid(raw=8, reason='cannot read 8 as str')))

Every other library on the same bad:

  • jsonpickle

    {'a': {'name': 'ada'}, 'b': {'name': 7}, 'c': {'name': 8}}
    
  • pydantic

    ValidationError: 2 validation errors for Team
    b.name
      Input should be a valid string [type=string_type, input_value=7, input_type=int]
    c.name
      Input should be a valid string [type=string_type, input_value=8, input_type=int]
    
  • msgspec

    ValidationError: Expected `str`, got `int` - at `$.b.name`
    
  • cattrs

    Team(a=User(name='ada'), b=User(name='7'), c=User(name='8'))
    
  • mashumaro

    Team(a=User(name='ada'), b=User(name='7'), c=User(name='8'))
    

Captured with jsonpickle 4.1.3, pydantic 2.13.5, msgspec 0.22.0, cattrs 26.2.1, and mashumaro 3.23.

A lambda has no import path, so it is refused when written, not when read:

to_plain(lambda x: x)
# TypeError: Cannot serialize <function <lambda> ...>: import path
# '__main__.<lambda>' does not resolve to the same object.

Features

Tags for what JSON lacks

Anything a wire format cannot carry natively becomes a py/* tag, spelled as jsonpickle spells it where one exists:

Value Tag
class instance, class, function py/object, py/type, py/function
tuple, set, frozenset, mappingproxy py/tuple, py/set, py/frozenset, py/mappingproxy
non-finite float, complex, bytes py/float, py/complex, py/b64
Path, UUID, datetime py/path, py/uuid, py/datetime
anything else picklable py/reduce
a type you register with hooks= py/hook
a repeat of an earlier object py/ref
a non-string or tag-like dict key json://...

Shared objects and cycles

A repeat is written as py/ref, the path to its first occurrence, so model.encoder is model.decoder survives the round trip. Cycles terminate the same way. Older py/id back-references still read.

The type decides, unless a tag does

from_plain(data, T) reads data as T: a JSON array as a tuple[int, int], "red" as Color.RED, a dict as a dataclass. Where the data carries a tag, the tag decides, so a field typed object or a Protocol reads back as whatever class the payload names, if that class fits the annotation. Importing a class by name is gated behind allow_imports=True.

Best-effort decoding

A bad part does not stop the read. ReadError.partial is the value with an Invalid in place of each bad part; ReadError.bad maps each bad part's path to its Invalid.

Wire-invariant

The core never parses or prints text. treekle.json_loads is the one reader: json_loads(text, T) parses and reads as T in one call. This is its whole body, minus overloads and docstring:

import json


def json_loads(
    text: str | bytes,
    target: object = ABSENT,
    *,
    hooks: Hooks = MappingProxyType({}),
    allow_imports: bool = False,
    strict: bool = True,
) -> object:
    tree = cast("MutablePlainTree", json.loads(text))
    if target is ABSENT:
        return tree
    return from_plain(
        tree,
        target,
        hooks=hooks,
        allow_imports=allow_imports,
        strict=strict,
    )

Why not another serializer

tl;dr: The pickle-style libraries have a nearly orthogonal feature set to the JSON-style libraries. The group either is forgiving about types (like callables) and forgoes type-strictness or cannot tolerate types to achieve safety. jsonpickle is arguably the most similar to treekle (and was our default choice until making treekle).

treekle pickle jsonpickle pydantic msgspec cattrs mashumaro
C/Rust ✅ ✅ ❌ ✅ ✅ ❌ ❌
stdlib ✅ ✅ ✅ ❌ ❌ ❌ ❌
plain ✅ ❌ ✅ ✅ ✅ ✅ ✅
typed result ✅ ❌ ❌ ✅ ✅ ✅ ✅
typed contents ✅ ❌ ❌ ✅ ✅ ✅ ✅
untagged input ✅ ❌ ❌ ✅ ✅ ✅ ✅
class from data ✅ ❌ ❌ ❌ ❌ ❌ ❌
callables ✅ ✅ ✅ ❌ ❌ ❌ ❌
shared refs ✅ ✅ ✅ ❌ ❌ ❌ ❌
best-effort ✅ ❌ ❌ ❌ ❌ ❌ ❌
GitHub stars -- stdlib 1.3k 29.0k 4.2k 1.1k 940

✅ = yes, ❌ = no. Star counts checked 2026-10-11. Corrections welcome -- open a PR.

  • C/Rust: the core is a compiled extension, not pure Python.
  • stdlib: part of the standard library, or importing nothing outside it.
  • plain: encodes to plain dicts, lists, and scalars, so any writer stores it: JSON, YAML, TOML.
  • typed result: a type checker infers T from decode(data, T), not Any.
  • typed contents: every nested field and element is checked against its annotation, e.g. list[Layer]. An isinstance check on jsonpickle's result would fix typed result, not this.
  • untagged input: data with no py/* tags reads as the declared type, so hand-written config works.
  • class from data: decode builds the class the payload names by import path (a subclass, a Protocol implementation, or any class) and rejects one that does not fit the field's annotation.
  • callables: a function round-trips by import path, with no special field type.
  • shared refs: an object referenced twice decodes as one object; cycles too.
  • best-effort: bad input yields the partial value and every bad part's location.

Details: each cell is what a probe of jsonpickle 4.1, pydantic 2.13, msgspec 0.22, cattrs 26.2, and mashumaro 3.23 returned:

treekle pickle jsonpickle pydantic msgspec cattrs mashumaro
plain to_plain bytes only Pickler().flatten dump_python to_builtins unstructure encode
typed result Layer Any dict | list | ... Layer Layer Layer Layer
typed contents raises at layers[0].width no target type dict holding 'x' raises at layers[0].width raises at layers[0].width raises at layers[0].width raises at layers
untagged input Net raises: bytes only dict Net Net Net Net
class from data: subclass subclass subclass subclass base class, subclass fields dropped base class, subclass fields dropped base class, subclass fields dropped base class, subclass fields dropped
class from data: Protocol implementing class implementing class implementing class raises: no Protocol schema raises: no Protocol schema raises: no Protocol schema raises: no Protocol schema
class from data: object named class named class named class dict dict raises raises
class from data: misfit raises misfit accepted misfit accepted raises raises raises raises
callables same function same function same function raises raises raises raises
shared refs one object one object one object two copies two copies two copies two copies
best-effort partial value, all errors first error no error, returns dict all errors, no value first error all errors, no value first error
  • plain: the call that encodes to plain data.
  • typed result: what basedpyright infers for decoding a dataclass Layer.
  • typed contents: Net with layers: list[Layer], given layers[0].width = "x". jsonpickle with a top-level isinstance(obj, Net) check returned Net(layers=[{'width': 'x'}]).
  • untagged input: a valid Net payload with no py/* tags.
  • class from data: a payload naming a class, read into a base-class field, a Protocol field, and an object field. cattrs keeps the subclass with include_subclasses; pydantic and msgspec need a closed tagged union. "misfit": a payload naming a class that is neither a subclass of the base-class field nor an implementation of the Protocol field.
  • callables: a field holding a module-level function.
  • shared refs: one object in two fields.
  • best-effort: two bad fields.

One cycle shape fails to read: one through a dataclass decoded as its declared type.

Speed

Times are totals over the exp000 config of each of 43 priml baselines, with each library's time as a multiple of msgspec-struct's under ×.

  • warm: repeat calls on classes each library has already seen.
  • cold: the first call on classes no library has seen.
library warm encode (ms) × warm decode (ms) × cold encode (ms) × cold decode (ms) ×
msgspec-struct (reference) 0.54 1.0 0.16 1.0 0.84 1.0 10.31 1.0
msgspec-dataclass 0.54 1.0 ❌ 0.82 1.0 ❌
treekle-rust 0.50 0.9 0.16 1.0 1.03 1.2 10.36 1.0
pickle 2.60 4.8 1.04 6.4 3.67 4.4 2.04 0.2
treekle-python 4.03 7.5 15.76 97.0 9.32 11.1 30.55 3.0
jsonpickle 22.55 41.8 11.33 69.7 16.50 19.7 14.46 1.4
  • encode: each library on the config itself. msgspec is given enc_hook=repr, its only way past the callables a config holds, and writes no class names or shared references, so it writes less than treekle. Both msgspec rows encode alike.
  • decode: msgspec cannot decode the configs: its unions may not mix a class with anything but None. So decode times the closest thing every library reads: each config rebuilt as dataclasses holding only plain values. msgspec-struct reads it into tagged msgspec.Struct twins; msgspec-dataclass into the dataclasses themselves, which fails (❌) on 14 configs whose unions hold two dataclasses it cannot tell apart.
  • treekle-rust, treekle-python: the compiled core, built profile-guided as the release wheels are, and the Python fallback a platform without a wheel gets.

Python 3.14, one core of an Intel Core Ultra 7 255H. Reproduce with scripts/bench_configs.py.

Metadata

Release files for treekle 0.3.0

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

Source distribution (sdist)

Source distribution for treekle 0.3.0
File Size Uploaded Provenance
treekle-0.3.0.tar.gz 331.6 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for treekle 0.3.0
File
treekle-0.3.0-py3-none-any.whl Python 3 none any Details
treekle-0.3.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
treekle-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
treekle-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
treekle-0.3.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
treekle-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
treekle-0.3.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
treekle-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
treekle-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
treekle-0.3.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
treekle-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
treekle-0.3.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
treekle-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
treekle-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
treekle-0.3.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
treekle-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details

Total release size: 13.3 MB

Release files / treekle-0.3.0.tar.gz

Download URL treekle-0.3.0.tar.gz
Size 331.6 kB
Tags Source
SHA-256 checksum
How to use checksums
777ed121346abe43633aa78da9de5fcfdc4da039e611747891c539136d2c2bde
BLAKE2b-256 checksum
How to use checksums
3d8922fe4d1fe9743717b9fb7a7c43bfa24c5c2043b0549b4e9f8a0c2b7aa096
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-py3-none-any.whl

Download URL treekle-0.3.0-py3-none-any.whl
Size 62.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f3c2befc5651bab819df1ba0955f6fae780849aab9c9195a47ea2e8ba46156c5
BLAKE2b-256 checksum
How to use checksums
bab579fa5e9a614632dfd632f38259dca4cc6e9a3cedcad67ea23b5656ae568c
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp314-cp314-win_amd64.whl

Download URL treekle-0.3.0-cp314-cp314-win_amd64.whl
Size 849.3 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
65734809ddb5f2e2195680e6f4b4d221340055eac0fa1c0a4109e3bb9a8e40f0
BLAKE2b-256 checksum
How to use checksums
9757935ed364cb3bced2843a8513f803809d34e0bfb6f465a13178ca770f3dcd
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL treekle-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 885.3 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3148c442baea054369edc6cea850be1a4c8f9bbe98c6e17f56e92ec4e13d26f1
BLAKE2b-256 checksum
How to use checksums
55d6cb6a04952bb329319cb0bfb209da074c31c79592e480f30b510f2fc79e71
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL treekle-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 847.5 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
38b302ce1c4e7bb740419bc2971b6bdc3bf290b43be22fdb63a066a36b90d99c
BLAKE2b-256 checksum
How to use checksums
519671765ea49a4784d1460fbecfa2d0656ec784043048891ebecedb72767121
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL treekle-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Size 838.4 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
42836fb8a1c97d92e9a92163372e8e8937df02a17a3514155959e65b459206bc
BLAKE2b-256 checksum
How to use checksums
5b6c366846372c0aff8d905f3609a798856082eef4dd00b9c7292de46c85aedd
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl

Download URL treekle-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 885.5 kB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
373cf8733ef0a97ce5e7fea071a8de6a96086dc79dfac31f9b829ac0176d1b23
BLAKE2b-256 checksum
How to use checksums
021ea7ffa299689f3670dc1412192c6b660b0c5792db23785b32ccb9da4149eb
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp313-cp313-win_amd64.whl

Download URL treekle-0.3.0-cp313-cp313-win_amd64.whl
Size 835.1 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
ac150c84a8f3cf70f59c2f4eb02d579ca37c444985164bf693cf0615271d80ee
BLAKE2b-256 checksum
How to use checksums
c8d434ffca1222bde1be76569ba395d515d4ad68840ff114fb04a68f7d22c206
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL treekle-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 886.7 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e127ed0f8c868973bdeb86d92f326a5ff72185b31f7d71fa572009a08789e3b3
BLAKE2b-256 checksum
How to use checksums
6c7ad7a547e80b2a328e00a3f184a58bf680e32147888895316177013a4101b2
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL treekle-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 849.4 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
b7c66b8d3fa74048bb2532fea0e163271ca1480f6839e69245676780eff1545f
BLAKE2b-256 checksum
How to use checksums
54cc0d3468773a92a6ee43414bba9c498b693810ac990b2e32fed95b6fa5d553
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL treekle-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Size 864.7 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
eda0a96827222b18b1a13a519ec710293507a15df5294d0d82d08b89435840fd
BLAKE2b-256 checksum
How to use checksums
f3cec8b079aa6b4cf761855430b8c3253c78e2c4404b86cffbf3aff58c527f6c
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL treekle-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 892.8 kB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b54beae2171d3a3054eecfb70645a5593a68566c17b35ba6efda670c5e8ff851
BLAKE2b-256 checksum
How to use checksums
bbea48072083232aba6140c5c5ab430240b1c238edd3788146ecd9c1438265ea
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp312-cp312-win_amd64.whl

Download URL treekle-0.3.0-cp312-cp312-win_amd64.whl
Size 817.6 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
fbd00989ff8afd45ef2dffaedd5db2269c27369330a27610263b3529c43414ca
BLAKE2b-256 checksum
How to use checksums
b62b046a49d0282cd33a5e49816f8a392a7cdfc5671c9a15421da34af641da14
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL treekle-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 876.2 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3383411e9a0ae0311006274535a1312344faacd6b92e785e98e31bc9c47da364
BLAKE2b-256 checksum
How to use checksums
704b6b84afed71470513281f6b8ac2800964630704d8b87d4b915db78b2d2810
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL treekle-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 834.3 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
bbad3599c4fb68b672e769ce9ae71523ba080faa32c234e5f4b01276daefe060
BLAKE2b-256 checksum
How to use checksums
50f988c1ab133189f7bc343608c8766d0546201ffd9a1767b0907416cafb43e8
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL treekle-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Size 839.6 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d3e27084a8fef101a8bddbc010af6bc24bae2b1bf7ab5b5d199ba1804dee47a9
BLAKE2b-256 checksum
How to use checksums
cf294fb7c00453c2fae8e4eaef5e7e88debbbabae47bd1b53e82d068d8315ed6
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 21, 2026.

Transparency log

Release files / treekle-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL treekle-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 874.8 kB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2d7cf5cc4c23f5b3b59c55b7feb1caa1ad214cdce789f3e544dd31641481f630
BLAKE2b-256 checksum
How to use checksums
efd5afa019bc08b4ec464c8d9178abb62965b7cfa1600cf3791f032acb46a7c0
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 21, 2026.

Transparency log

Security for treekle 0.3.0

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.

Full provenance

All 17 files in this release have been uploaded with provenance metadata.

Select from 17 files

Attestation for treekle-0.3.0.tar.gz

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 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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