Skip to main content

yeptris — YAML for Python at libleptris speed

An FFI-based (no C extension) YAML library over libyeptris — the YAML counterpart of libleptris. PyYAML-compatible semantics, one shared library, zero compilation at install.

Part of the yeptris program: the best (multiple dimensions) YAML/JSON parser/builder ever — conformance, performance, safety/hardening, API surfaces, transport correctness, and trust, held simultaneously, in C, Ruby, Rust, and JS. This binding carries the PyYAML-compatible surface plus CBOR, tracking every libyeptris release in lockstep. The achievement program lives in the engine's PLAN.md ("The best-ever program").

Install (development)

# the sibling C checkout: ~/src/leptris/yeptris
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DYEPTRIS_BUILD_SHARED=ON
cmake --build build

cd ~/src/leptris/yeptris-py
YEPTRIS_LIB_PATH=../yeptris/build/src/libyeptris.dylib python3 -m pytest

Without YEPTRIS_LIB_PATH the loader falls back to a vendored yeptris/_platform/<tag>/ copy, then to the sibling checkout's build directory. Any libyeptris.{so,dylib,dll} path works.

Usage

import yeptris
from yeptris import yaml  # PyYAML-compatible surface

yaml.safe_load("name: yeptris\nrating: 10\n")
# {'name': 'yeptris', 'rating': 10}

yaml.safe_load_all("--- 1\n--- two\n")   # lazy generator: [1, 'two']
yaml.safe_dump({"b": 2, "a": [1, "x"]})  # 'a:\n  - 1\n  - x\nb: 2\n'
yaml.safe_dump_all([{"a": 1}, {"b": 2}]) # 'a: 1\n---\nb: 2\n'

yeptris.load("k: v")        # the neutral surface
yeptris.dump({"k": [1, 2]})
yeptris.load_all("--- 1\n--- 2\n")  # every document, as a list
yeptris.dump_all([{"k": 1}, [2]])   # the '---'-separated stream

Typing follows PyYAML's SafeLoader (YAML 1.1 implicit typing): yes/no/on/off booleans, 0x/leading-0/0b/sexagesimal integers, dot-required floats, timestamps with offsets, merge keys, anchor identity. Every deliberate divergence is pinned by a test.

Validation

The validate face (libyeptris >= 0.6.59): JSON Schema draft 2020-12 and the YAML schema-family walk over one engine pass — the WHOLE report every time (diagnostics enumerate every miss, never first-fail), each a Diagnostic dataclass (path segments, keyword, message, 1-based line/col):

# needs libyeptris >= 0.6.59
from yeptris import yaml

schema = '{"type": "object", "required": ["name"]}'
yaml.validate(b"name: yeptris\n", json_schema=schema)  # []
yaml.is_valid(b"age: 1\n", json_schema=schema)         # False

for d in yaml.validate(b"age: 1\n", json_schema=schema):
    print(d.keyword, d.pointer, d.message, d.line, d.col)
    # required /name missing required property "name" 1 1

s = yaml.compile_schema(schema)  # parse ONCE, validate many
s.is_valid(b"name: x\n")         # True

yaml.safe_load(b"name: x\n", json_schema=schema)  # {'name': 'x'}
try:
    yaml.safe_load(b"age: 1\n", json_schema=schema)  # raises
except yaml.ValidationError as e:
    print(e.diagnostics[0].keyword)  # required
yaml.safe_load(b"a: 1\na: 2\n", validate=True, collect=True)
# ({'a': 2}, [Diagnostic(... duplicate-key ...)]) — the family walk

Without json_schema=, validate(data) runs the schema-family walk: explicit-tag consistency (spec 10.3) and mapping-key uniqueness by canonical form (0o13 and 0xB are the same key, spec 3.2.1.3); schema= selects SCHEMA_12_JSON for the spec 10.2 JSON productions. A $ref that resolves nowhere is a diagnostic, not an exception; a stream that does not parse raises the usual load-stage error. Older engines raise YeptrisError (yeptris.yaml ships the feature detection).

The multi-document stream face is PyYAML's law: load_all/ safe_load_all are lazy generators (nothing parses until iteration; a bad document raises there), empty documents yield None, a zero-document stream yields nothing, and safe_load answers the first document only — silently, the binding's documented divergence (PyYAML raises on multi-document input). One pinned divergence remains: the engine parses a stream in one bulk drain, so an invalid stream raises at the first iteration with no documents yielded (PyYAML's per-document parser yields the good prefix first).

Design

One parse, one bulk drain: the record array and string arena are read in two FFI calls, then a pure-Python walk over the unpacked records — the FFI tax is O(1) per document, never per event (the same seam yeptris-ruby rides). The 36-byte record layout is ABI-pinned in the C header and mirrored in _ffi.py.

Performance

python3 bench.py — same-process comparison against PyYAML (pure) and CSafeLoader/CDumper (libyaml C extensions):

  • load: 28-39x PyYAML pure, 3.8-6.1x CSafeLoader
  • dump: ~1.7x PyYAML pure, ~2x behind CDumper (which walks the tree entirely in C — a no-C-extension design's ceiling is the Python walk itself; the tree raises through ONE yeptris_document_build call)

Both directions are O(chunks) in FFI calls: loads drain records in two calls, dumps build through one flat entry array.

JSON (strict RFC 8259) — yeptris.json

yeptris.json.loads is json.loads-compatible (values, rejects, types, json.JSONDecodeError — including stdlib's default NaN/ Infinity constant quirk) with two engines behind one contract:

  • native — the opt-in extension ext/yeptris_native.c: a fused scan-kernel descent over libyeptris (the same shape as the Ruby binding's materializer), with a 1024-slot interned-free key cache. Build it with YEPTRIS_LIB_PATH + YEPTRIS_SRC set (python3 setup.py build_ext --inplace); CI builds and gates it.
  • strict-ffi — the default pure path: yeptris_parse_json is the validator gate, then the columnar value walk converts under JSON rules. No C extension, correct everywhere.

benchmark/json_profile.py is the referee (order-alternating interleave vs the C scanner): the native engine runs 0.67-0.87x json.loads mean (83-85% head-to-head) on the 144 KB reference corpus; shape decomposition: int arrays 0.63x, float arrays 0.77x, long strings 0.85x, unique-key maps 0.95x. The previous pure walk was ~15x BEHIND — the fused materializer is the entire gap.

Installing the native JSON engine (platform wheels)

pip install yeptris on macOS (arm64) and manylinux (x86_64) installs platform wheels that vendor libyeptris and the native JSON materializer (abi3 — one wheel per platform serves CPython 3.9+): zero compiler, zero env vars, yeptris.json.engine() is native out of the box. Every wheel is release-smoked in a clean venv before publish. Other platforms install the pure package (the strict-ffi JSON engine + YAML via libyeptris through the YEPTRIS_LIB_PATH ladder); building the extension from source is YEPTRIS_LIB_PATH=... YEPTRIS_SRC=... python3 setup.py build_ext --inplace.

Metadata

Release files for yeptris 0.6.59.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 yeptris 0.6.59.0
File Size Uploaded Provenance Actions
yeptris-0.6.59.0.tar.gz 443.6 kB With provenance Details for yeptris-0.6.59.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for yeptris 0.6.59.0
File Actions
yeptris-0.6.59.0-py3-none-any.whl Python 3 none any Details for yeptris-0.6.59.0-py3-none-any.whl
yeptris-0.6.59.0-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details for yeptris-0.6.59.0-cp39-abi3-win_arm64.whl
yeptris-0.6.59.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for yeptris-0.6.59.0-cp39-abi3-win_amd64.whl
yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_x86_64.whl
yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details for yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_aarch64.whl
yeptris-0.6.59.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for yeptris-0.6.59.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
yeptris-0.6.59.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details for yeptris-0.6.59.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
yeptris-0.6.59.0-cp39-abi3-macosx_11_0_x86_64.whl CPython 3.9 abi3 macOS 11.0+ x86-64 Details for yeptris-0.6.59.0-cp39-abi3-macosx_11_0_x86_64.whl
yeptris-0.6.59.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for yeptris-0.6.59.0-cp39-abi3-macosx_11_0_arm64.whl

Total release size: 11.8 MB

Release files / yeptris-0.6.59.0.tar.gz

Download URL yeptris-0.6.59.0.tar.gz
Size 443.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6f02d2f2f6490376e87f279cfcf020afae9b3efcc64f8172160a12c83e22cb73
BLAKE2b-256 checksum
How to use checksums
56fd6dcbb677a978ff4d89dac9fe1a9495af8d2dfede724dfe394c9fa385325e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-py3-none-any.whl

Download URL yeptris-0.6.59.0-py3-none-any.whl
Size 39.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91bce6bbbaef2f4df1277858b38f79e08af22ab68d69dd77ec5388efa38cbb5c
BLAKE2b-256 checksum
How to use checksums
94e6bd61de7cbeb9153bfafe4bc09fb7c1282e3208f859202241a6d191fffe57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-win_arm64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-win_arm64.whl
Size 1.2 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
0661aaeb403fb5946a371f4bad316d2a492f2c1f091aae7261b13f9ff21e7618
BLAKE2b-256 checksum
How to use checksums
95271ba1cd0635ec40506b0199f904ffccb9daaa357a4cd1bc21f1564ae37328
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-win_amd64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-win_amd64.whl
Size 1.2 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
7b16547e4d126dda6ed6c82b9a064a3079270111010e08eb489501a54f324e46
BLAKE2b-256 checksum
How to use checksums
7278ccba22517a8790032792f8a6287d2cfd1545f6f1f7c7a45a7351a9ad720e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_x86_64.whl
Size 1.7 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
4e868b76e4d15248b5d5a0d55b6410f8d49888045ce738f361038d43ac77f0d5
BLAKE2b-256 checksum
How to use checksums
8b8dae3214a2139af899e54ce316662ad5c523382dab928d52af5b1fba7a6402
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-musllinux_1_2_aarch64.whl
Size 1.8 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
896a84a71859b1fe64ca53e1cbe24803fe6e648114016cf027289c37d1c11d5b
BLAKE2b-256 checksum
How to use checksums
6cdd6e4e2b226ba600ad7f8568ef8a50f3d05b6b03d94ad8ed696c90878aefcc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 1.4 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
71d7401e8ad60d58911d1d9aff3b54a8b7125a4a0f11d083f35736d79dcc6b3b
BLAKE2b-256 checksum
How to use checksums
b299e3a9e8a0d2e057f5c0340c6bc82bde117f9367427b2f4820d4a9e5c02be5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 1.4 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
0a91d4674987ed8ebe9d74e9e8eb61446a213bf86db9f10e10338048e90b645f
BLAKE2b-256 checksum
How to use checksums
c08911d02f75943b51094d25fbc75ea854da2bb9886130978a9f4c00182012fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-macosx_11_0_x86_64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-macosx_11_0_x86_64.whl
Size 1.3 MB
Tags CPython 3.9 abi3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
f4154cfb4fc842db43be7aa30682bb43fd5cd5d5eac2466e61591b3af6a16a71
BLAKE2b-256 checksum
How to use checksums
741c55a16cc1726bc08fc816c821e09662bda3b0e18710915b2d72a587f6a0f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Release files / yeptris-0.6.59.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL yeptris-0.6.59.0-cp39-abi3-macosx_11_0_arm64.whl
Size 1.3 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
33c1024962deb9d244f7165e714d2bd245af1b5c28a821d4089e589f6852b7a6
BLAKE2b-256 checksum
How to use checksums
3003a5abe2351d7572ee6db5d592b0dd4440c00e97fed6d51e0c847ed50f6929
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 3, 2026.

Transparency log

Security for yeptris 0.6.59.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 10 files in this release have been uploaded with provenance metadata.

Select from 10 files

Attestation for yeptris-0.6.59.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 Nov 3, 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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release
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