treekle🌳
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
Tfromdecode(data, T), notAny. - typed contents: every nested field and element is checked against its
annotation, e.g.
list[Layer]. Anisinstancecheck 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:
Netwithlayers: list[Layer], givenlayers[0].width = "x". jsonpickle with a top-levelisinstance(obj, Net)check returnedNet(layers=[{'width': 'x'}]). - untagged input: a valid
Netpayload with nopy/*tags. - class from data: a payload naming a class, read into a base-class field,
a Protocol field, and an
objectfield. cattrs keeps the subclass withinclude_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, in ms, with each
library's time as a percent more than msgspec's:
| library | encode (ms) | encode (%) | decode (ms) | decode (%) |
|---|---|---|---|---|
| msgspec | 0.50 | +0% | 0.15 | +0% |
| msgspec-dataclass | 0.50 | +1% | ❌ | ❌ |
| treekle-rust | 0.63 | +27% | 0.86 | +493% |
| pickle | 2.32 | +369% | 0.95 | +555% |
| treekle-python | 3.68 | +641% | 14.32 | +9787% |
| jsonpickle | 20.61 | +4057% | 10.18 | +6930% |
- 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. - 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 reads it into taggedmsgspec.Structtwins; 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, 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.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| treekle-0.2.0.tar.gz | 196.4 kB | Details |
Built distributions (wheels)
Total release size: 8.0 MB
Release files / treekle-0.2.0.tar.gz
| Download URL | treekle-0.2.0.tar.gz |
|---|---|
| Size | 196.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d9e1be0910bf8ea8033a8addb0f17d7e03586a0d7fdefd265211b383ef086d1d
|
|
BLAKE2b-256 checksum How to use checksums |
7c5c5d010f0888c4b6374f8695c1508370b65f850e62ad2e2867fe6f327223bb
|
| 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 logRelease files / treekle-0.2.0-py3-none-any.whl
| Download URL | treekle-0.2.0-py3-none-any.whl |
|---|---|
| Size | 68.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
61e11e9fd719721644e09d3c9c028e41a27a415bb8d37079b4c7018bd8d63aa9
|
|
BLAKE2b-256 checksum How to use checksums |
6e930acbdf5933314fb25da984a3d8d2ec913c22424b7d9dfe7b2edb851300a0
|
| 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 logRelease files / treekle-0.2.0-cp314-cp314-win_amd64.whl
| Download URL | treekle-0.2.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 468.0 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bb8c67cf34ae216d0e4058698e89a71248b174a3f9542dff30411cf7edd55e9c
|
|
BLAKE2b-256 checksum How to use checksums |
b3e324969505bb9e69d74fe49ee6a88824305b8c2b8b544e65c6af33df4f335b
|
| 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 logRelease files / treekle-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | treekle-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 536.0 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
2b0b4aaf206fcc67b9762b2b992217c6bf9a49e54b5881cc8af81dae320422c2
|
|
BLAKE2b-256 checksum How to use checksums |
edb4d1f7f230e018075fbcb85e50aae5d4e0b34338e72815d0843bb4fadb5547
|
| 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 logRelease files / treekle-0.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | treekle-0.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 516.1 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
c06ff011bb5463c8c19d0d5fa89f5dab115b75a8cb976ac6a32c2a6d80a57286
|
|
BLAKE2b-256 checksum How to use checksums |
351d9b25b21077997386603237a05f2d6f2efdb36a4c48d5f025e0504a336e1f
|
| 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 logRelease files / treekle-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | treekle-0.2.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 505.7 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
317e77c994bc113964ce922ae0d67e93b86c1f9e6a143e8004ccc27551f71f7e
|
|
BLAKE2b-256 checksum How to use checksums |
e3583fd63bbd16c25e74a35fdcc74eaa765f2a34c56ddf0cf8dc4a071905031d
|
| 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 logRelease files / treekle-0.2.0-cp314-cp314-macosx_10_12_x86_64.whl
| Download URL | treekle-0.2.0-cp314-cp314-macosx_10_12_x86_64.whl |
|---|---|
| Size | 540.5 kB |
| Tags | CPython 3.14 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
963d563a60dd841b354656378281128fdaa06153ddaa0da69f6fa1a1f82e628b
|
|
BLAKE2b-256 checksum How to use checksums |
bf40a528240b9403e33780688d1b4e008a021385203b9cf8183e22ec9b306f98
|
| 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 logRelease files / treekle-0.2.0-cp313-cp313-win_amd64.whl
| Download URL | treekle-0.2.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 468.7 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7d92d00a816b96e9f5de1e25cbf43eefe2525631e4b6fae97e973051ce804f9f
|
|
BLAKE2b-256 checksum How to use checksums |
607ce88dce260120f28a0f8baca352b1425b57dd5834303ff80cb6aeee0a5777
|
| 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 logRelease files / treekle-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | treekle-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 537.1 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
60377dd8bf000f7c140a986962b8055a6523a62a4447bb9cd66a6de69ca7830e
|
|
BLAKE2b-256 checksum How to use checksums |
4bdde9e38a545ff0698004c4d930cf522ae4d6fb5e475ac4552d5b59480cb90f
|
| 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 logRelease files / treekle-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | treekle-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 518.8 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
89b00135dd3c6f922e7e20b216710854e6427ad4a6a702a79c0cf2aaee543405
|
|
BLAKE2b-256 checksum How to use checksums |
6a46f0374d0e086c3ab960ca4d9e64ae69b61961680ed50107ef901f080c5c98
|
| 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 logRelease files / treekle-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | treekle-0.2.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 508.1 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
695e0abb9b49534560bb6a5e1f3e6275e01e6366bfe85db4d127b88de035d4b2
|
|
BLAKE2b-256 checksum How to use checksums |
438be397d13d1499922c8f86a686f993daca6eadaf8594a4d9e3579d9a8bbfbc
|
| 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 logRelease files / treekle-0.2.0-cp313-cp313-macosx_10_12_x86_64.whl
| Download URL | treekle-0.2.0-cp313-cp313-macosx_10_12_x86_64.whl |
|---|---|
| Size | 543.4 kB |
| Tags | CPython 3.13 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
328cf79d4ea66df23931ec2809b00c376bb5f3af5bc9158947849f0d9d2f2736
|
|
BLAKE2b-256 checksum How to use checksums |
de33e8cbee7119efe9ec8c8d346dad7e1d299a971624a9f69318bec389442950
|
| 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 logRelease files / treekle-0.2.0-cp312-cp312-win_amd64.whl
| Download URL | treekle-0.2.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 468.0 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9593aae6fc9c002ebd4fa79acc615a70fe4cf7d9e5979bdb8ab60201bedc9660
|
|
BLAKE2b-256 checksum How to use checksums |
b88d9e3abff897ae410d109568bb6f7ebc136d010f7282fdd104a50b7db685e5
|
| 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 logRelease files / treekle-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | treekle-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 536.4 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
db355672b8876d215d1d871a700e5a8fd0652083d99eb939a4aaa7b0209e1fb7
|
|
BLAKE2b-256 checksum How to use checksums |
513995a3e2b860717c63425821fce4a9c0feca25a5031977951471d22d8e5caf
|
| 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 logRelease files / treekle-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | treekle-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 517.7 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
0679cd16422e0dedf4cad454096283896fb592018300f43a2044b9edf9082e07
|
|
BLAKE2b-256 checksum How to use checksums |
c6230088f600d69af2bd487606dce075d849878c380ca1b886411f9e378f9117
|
| 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 logRelease files / treekle-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | treekle-0.2.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 506.4 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ad0c1c980c7f309a4d0518146c24f04ccd2cd6fd55a758cdc366a01729a7adb0
|
|
BLAKE2b-256 checksum How to use checksums |
6086f6ac8ca94b6a174ff0b649f6d9fcefa9fdef8e39e084a833e6d92ee37b9a
|
| 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 logRelease files / treekle-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl
| Download URL | treekle-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl |
|---|---|
| Size | 540.8 kB |
| Tags | CPython 3.12 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2e3e4f4157a8409c907aec823911e7db72bc463c7c41387b79fedcd6d3ebaa29
|
|
BLAKE2b-256 checksum How to use checksums |
b871a02097d1734ed42bd22dbb802cc488325401fab618f75f4fa790f9da5f91
|
| 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