Skip to main content

corvus-json-schema-rs

A JSON Schema evaluator for Python (draft 4, 6, 7, 2019-09 and 2020-12) backed by the corvus-json-schema Rust crate, the Rust port of the Corvus.Text.Json V5 standalone evaluator. It has the same API as the pure-Python corvus-json-schema package, so either can be imported in place of the other.

  • Conformant: passes the JSON-Schema-Test-Suite (required, optional and optional/format, every draft) except draft4/optional/zeroTerminatedFloats.json, which the C# and Rust evaluators exclude (they read 1.0 as an integer), and all of the suite's annotation tests.
  • Fast: instances are read in place through CPython's C API (dicts, lists and strings are not copied), so validating a Python object costs the evaluation alone. Over the jsonschema-benchmark corpora it takes 0.35 of the pure package's time and 0.72 of jsonschema-rs's (geometric means); see the pure package's Performance section for the figures.
  • Every platform from one wheel per platform: the extension uses the stable ABI (abi3), so one wheel serves CPython 3.10 and every later version. Wheels are built for Linux (x86_64 and aarch64, glibc and musl), macOS (universal2: Intel and Apple silicon) and Windows (x64, and arm64 from Python 3.11, CPython's oldest arm64 Windows release), and CI tests each on its own platform.

Install

pip install corvus-json-schema-rs

Usage

import corvus_json_schema_rs as cjs

validate = cjs.compile({"type": "object", "required": ["id"], "properties": {"id": {"type": "integer"}}})
validate({"id": 3})                    # True: a value as json.loads produces it, read in place
validate.is_valid_json('{"id": "3"}')  # False: JSON text, parsed in Rust

compile takes the same options as the pure package (default_dialect, assert_format, formats, resolve_document, base_uri, entry_point, max_depth and the rest, as keywords or a CompileOptions), and one more, pattern_match_limit (below), and evaluate, JsonSchemaResultsCollector, ResultsLevel and collect_annotations work as they do there. Custom formats and document resolvers are Python callables, called from Rust.

What differs from the pure package:

  • The limits on regular expressions. Both packages have pattern_match_limit (the seconds one match of a pattern or patternProperties regular expression against one string may take, 1.0 unless given, and None or 0 turns it off), PatternMatchLimitError (the instance is then neither valid nor not valid) and PatternTooLargeError (a SchemaCompilationError). What is left between them:
    • The limit error has its message and no attributes here. In the pure package it has pattern, limit and most_characters.
    • The memory of a match: here a match of any pattern is abandoned when its backtracking stack reaches 1,048,576 entries (24 MB). The pure package bounds the length of the text for a pattern that the regex package runs (1,048,576 characters, and fewer for a pattern with groups that its engine keeps for every repetition). Both raise PatternMatchLimitError.
    • compile matches each pattern of patternProperties against the property names the schema declares, so it can raise PatternMatchLimitError here. The pure package's compile runs no match.
    • The limits of size are 1,048,576 bytes of pattern, 1,000 levels of groups and about 16,000 terms here. In the pure package they are 32,768 characters of pattern, 100 levels, 32,768 characters of the pattern as it is written for Python's engines, and 4,096 copies of what a count repeats.
    • The time of a match is counted by the clock in both. Here the package's own engine runs every pattern and looks at the clock every 4,096 steps. In the pure package a pattern that is proved to match in time proportional to the text has no limit, and for any other the error comes between nine tenths of the limit and about twice the limit.
    • format: regex has one rule in both: a text over a limit of reading is not valid, and any other is valid or not by the grammar, whatever it would cost to compile. The limits of reading are each package's own.
  • There is no generated source: no Validator.source and no generate_module.
  • is_valid_json(text) validates JSON text (str or bytes) without creating Python objects for it.
  • Subclasses of dict, list, str, int and float (an OrderedDict, a string enum) are read as their bases, and tuples as arrays.
  • Integers beyond 64 bits are compared as the nearest double, as by a JSON parser without arbitrary precision.
  • A string with a lone surrogate (which json.loads can produce) is read with U+FFFD in its place.

How it works

The crate compiles the schema once into its node graph and fail-fast plans (see src-rs/corvus-json-schema). The evaluator is generic over an Instance trait (a value shown as one of the six JSON kinds, with arrays and objects read in place). This package implements it over Python objects through the stable C API: a dict is walked with PyDict_Next and searched by scanning its keys (or, when large, by lookup), a string is read as the UTF-8 that CPython keeps with it (no copy for ASCII strings), and a list is read by index. Anything the reader cannot take exactly (a tuple, a key that is not a string, a lone surrogate, a number beyond a double, very deep nesting) makes the call convert the instance to a serde_json::Value and evaluate that instead, so results never depend on which path ran.

Building

pip install maturin
maturin develop --release   # into the active virtual environment
maturin build --release     # a wheel for this platform

The Rust toolchain is pinned in ../rust-toolchain.toml. The tests are tests/test_binding.py and, through --impl corvus_json_schema_rs, the pure package's suite and results tests.

License

Apache 2.0.

The package is built on the corvus-json-schema Rust crate, whose Unicode tables are derived from the Unicode Character Database, which is under the Unicode License V3. THIRD-PARTY-NOTICES.txt has that notice, and the one of the regress crate that the tables were first read from. The file is in the source distribution and in every wheel, beside LICENSE.

Metadata

Release files for corvus-json-schema-rs 0.1.4

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

Source distribution (sdist)

Source distribution for corvus-json-schema-rs 0.1.4
File Size Uploaded
corvus_json_schema_rs-0.1.4.tar.gz 320.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for corvus-json-schema-rs 0.1.4
File
corvus_json_schema_rs-0.1.4-cp310-abi3-win_arm64.whl CPython 3.10 abi3 Windows ARM64 Details
corvus_json_schema_rs-0.1.4-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
corvus_json_schema_rs-0.1.4-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
corvus_json_schema_rs-0.1.4-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
corvus_json_schema_rs-0.1.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
corvus_json_schema_rs-0.1.4-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
corvus_json_schema_rs-0.1.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.10 abi3 macOS 11.0+ ARM64, macOS 10.12+ x86-64, macOS 10.12+ universal2 (ARM64, x86-64) Details

Total release size: 12.5 MB

Release files / corvus_json_schema_rs-0.1.4.tar.gz

Download URL corvus_json_schema_rs-0.1.4.tar.gz
Size 320.3 kB
Tags Source
SHA-256 checksum
How to use checksums
48386620cf5d39b6686098733e9931a854b9321caf45622b8cc2d2c1b5389f16
BLAKE2b-256 checksum
How to use checksums
4a17446506c2bf6695330342d4e6b51e6bc06f3c214ce7f277d9e0013d183650
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 17, 2026.

Transparency log

Release files / corvus_json_schema_rs-0.1.4-cp310-abi3-win_arm64.whl

Download URL corvus_json_schema_rs-0.1.4-cp310-abi3-win_arm64.whl
Size 1.3 MB
Tags CPython 3.10 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
bf58ee1badd99b79cc49afd69fa459ea5075c73da1a03602f60f0e14005cd545
BLAKE2b-256 checksum
How to use checksums
f38fcf4e46b5452900f36e97d1736ed80eb3e7b65f894205097763dc041aa19a
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 17, 2026.

Transparency log

Release files / corvus_json_schema_rs-0.1.4-cp310-abi3-win_amd64.whl

Download URL corvus_json_schema_rs-0.1.4-cp310-abi3-win_amd64.whl
Size 1.4 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
feaf15d7e852eb37d42ae4cada82c772cdcda5cdc698c918fd715445a9a372d4
BLAKE2b-256 checksum
How to use checksums
1933a175ddc17dfaea01aa04606efb15d1bbc505a5ccba3af33c8807b4374475
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 17, 2026.

Transparency log

Release files / corvus_json_schema_rs-0.1.4-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL corvus_json_schema_rs-0.1.4-cp310-abi3-musllinux_1_2_x86_64.whl
Size 1.8 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
69b56a438f7fcb03196c63d0364c5b2ce056cf13d828c96d4cb0d9084c048642
BLAKE2b-256 checksum
How to use checksums
9625d12b2116b6b1525d5caa1a35400b2494d96136811d985173d8a50c7f51b6
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 17, 2026.

Transparency log

Release files / corvus_json_schema_rs-0.1.4-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL corvus_json_schema_rs-0.1.4-cp310-abi3-musllinux_1_2_aarch64.whl
Size 1.7 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
273f29f5581dceaf88d52c543388d7a453d31735c509ff350ce3cb87afaaffef
BLAKE2b-256 checksum
How to use checksums
7d9ddf332e6baf4e73ec7f401c30eff84405d8df32e31db6baa1fe3aa3d2471e
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 17, 2026.

Transparency log

Release files / corvus_json_schema_rs-0.1.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL corvus_json_schema_rs-0.1.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.6 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
3d70eb9d694f63a5225db8347dde569ea47975aec08d98ac697839b7c28838b8
BLAKE2b-256 checksum
How to use checksums
3e583124eecd656f7ee09715e3532db5fe550afdb9c13fb2f752465290097674
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 17, 2026.

Transparency log

Release files / corvus_json_schema_rs-0.1.4-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL corvus_json_schema_rs-0.1.4-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 1.5 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
b32d4ed0eaf50ed4821721e34a9bb37be4f634cfb56dff8116696ae2e882bd01
BLAKE2b-256 checksum
How to use checksums
0ef3cbf4428ebeb9a3bf4275260e0f50293f8e18009e93bb14b5f379c719fae7
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 17, 2026.

Transparency log

Release files / corvus_json_schema_rs-0.1.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL corvus_json_schema_rs-0.1.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.9 MB
Tags CPython 3.10 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
098492bb0002012d18a8f786cbb0a94b17ea023374f7b7c2accae3eb138bed37
BLAKE2b-256 checksum
How to use checksums
36e8baa7c0f7110418488d5007366c2dc55cdc4c4766c5fd92c3973f1a565cef
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 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.4 This release

8 release files

0.1.3

8 release files

0.1.2

8 release files

0.1.1

8 release files

0.1.0

8 release files

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