v0.1.0: Exhibit A ⚖️
⚖️ Exhibit A
Probatio is a modern, maintained, MIT-licensed reimplementation of voluptuous (https://github.com/alecthomas/voluptuous), written clean-room: the same public API, no copied code, so it can be kept alive and moved forward. Change the import, keep your schemas.
This is the first public release, and the point of a validation library is whether you would hand it untrusted input, so here is the evidence rather than the adjectives. voluptuous's own 0.16.0 test suite runs against Probatio at 140 passing and 27 deliberate, documented deviations. Home Assistant's config_validation passes 142 of 142 with voluptuous swapped out. Line and branch coverage sit at 100%, type-checked under both mypy and ty, and every untrusted-input surface is fuzzed: a built-in validator only ever raises Invalid, never a raw exception, and that is enforced, not hoped for. It also runs about 2.2 to 2.6 times faster than voluptuous on typical schemas.
It does not stop at parity. Probatio clears voluptuous's own backlog and keeps going: cross-field rules (RequiredWith, RequiredIf, and friends), dataclass and TypedDict schemas, network and format validators, JSON/YAML/TOML loading and dumping, JSON Schema and OpenAPI in both directions, and errors that carry a path and suggest the key you meant.
from probatio import Schema, Required, Optional
schema = Schema({Required("name"): str, Optional("port", default=8080): int})
schema({"name": "app"})
# {'name': 'app', 'port': 8080}A drop-in swap is usually one import line:
# from voluptuous import Schema, Required, All, Coerce
from probatio import Schema, Required, All, CoerceThis is a 0.x release: the goal is a faithful drop-in, validated against voluptuous's behavior, and some internals may still move before 1.0 as it gathers production feedback.
pip install probatio📚 Docs: https://probatio.frenck.dev
Put your data to the proof. ⚖️
../Frenck
Blogging my personal ramblings at frenck.dev