Skip to main content

jsonschema-rs

Build Version Python versions License Supported Dialects

A high-performance JSON Schema validator for Python.

import jsonschema_rs

schema = {"maxLength": 5}
instance = "foo"

# One-off validation
try:
    jsonschema_rs.validate(schema, "incorrect")
except jsonschema_rs.ValidationError as exc:
    assert str(exc) == '''"incorrect" is longer than 5 characters

Failed validating "maxLength" in schema

On instance:
    "incorrect"'''

# Build & reuse (faster)
validator = jsonschema_rs.validator_for(schema)

# Iterate over errors
for error in validator.iter_errors(instance):
    print(f"Error: {error}")
    print(f"Location: {error.instance_path}")

# Boolean result
assert validator.is_valid(instance)

# Structured output (JSON Schema Output v1)
evaluation = validator.evaluate(instance)
for error in evaluation.errors():
    print(f"Error at {error['instanceLocation']}: {error['error']}")

⚠️ Upgrading from older versions? Check our Migration Guide for key changes.

Migrating from jsonschema? See the jsonschema migration guide.

Highlights

  • 📚 Full support for popular JSON Schema drafts
  • 🌐 Remote reference fetching (network/file)
  • 🔧 Custom keywords and format validators
  • ✨ Meta-schema validation for schema documents
  • 📦 Schema bundling into Compound Schema Documents
  • 🧮 Experimental schema canonicalization

Supported drafts

The following drafts are supported:

  • Draft 2020-12
  • Draft 2019-09
  • Draft 7
  • Draft 6
  • Draft 4

You can check the current status on the Bowtie Report.

Playground

If you'd like to try jsonschema, you can check the WebAssembly-powered playground to see the results instantly.

Installation

To install jsonschema-rs via pip run the following command:

pip install jsonschema-rs

Usage

If you have a schema as a JSON string, then you could pass it to validator_for to avoid parsing on the Python side:

import jsonschema_rs

validator = jsonschema_rs.validator_for('{"minimum": 42}')
...

You can use draft-specific validators for different JSON Schema versions:

import jsonschema_rs

# Automatic draft detection
validator = jsonschema_rs.validator_for({"minimum": 42})

# Draft-specific validators
validator = jsonschema_rs.Draft7Validator({"minimum": 42})
validator = jsonschema_rs.Draft201909Validator({"minimum": 42})
validator = jsonschema_rs.Draft202012Validator({"minimum": 42})

JSON Schema allows for format validation through the format keyword. While jsonschema-rs provides built-in validators for standard formats, you can also define custom format validators for domain-specific string formats.

To implement a custom format validator:

  1. Define a function that takes a str and returns a bool.
  2. Pass it with the formats argument.
  3. Ensure validate_formats is set appropriately (especially for Draft 2019-09 and 2020-12).
import jsonschema_rs

def is_currency(value):
    # The input value is always a string
    return len(value) == 3 and value.isascii()


validator = jsonschema_rs.validator_for(
    {"type": "string", "format": "currency"}, 
    formats={"currency": is_currency},
    validate_formats=True  # Important for Draft 2019-09 and 2020-12
)
validator.is_valid("USD")  # True
validator.is_valid("invalid")  # False

Custom Keywords

You can extend JSON Schema with custom keywords for domain-specific validation rules. Custom keywords are classes that receive the keyword value during schema compilation and validate instances at runtime:

import jsonschema_rs

class DivisibleBy:
    def __init__(self, parent_schema, value, schema_path):
        self.divisor = value

    def validate(self, instance):
        if isinstance(instance, int) and instance % self.divisor != 0:
            raise ValueError(f"{instance} is not divisible by {self.divisor}")


validator = jsonschema_rs.validator_for(
    {"type": "integer", "divisibleBy": 3},
    keywords={"divisibleBy": DivisibleBy},
)
validator.is_valid(9)   # True
validator.is_valid(10)  # False

When validate raises, the original exception is preserved as the __cause__ of the ValidationError, so callers can inspect it:

try:
    validator.validate(instance)
except jsonschema_rs.ValidationError as e:
    print(type(e.__cause__))   # <class 'ValueError'>
    print(e.__cause__)         # original message

Additional configuration options are available for fine-tuning the validation process:

  • validate_formats: Override the draft-specific default behavior for format validation.
  • ignore_unknown_formats: Control whether unrecognized formats should be reported as errors.
  • base_uri - a base URI for all relative $ref in the schema.
  • vocabularies: Declare support for vocabularies implemented by custom keywords.

Example usage of these options:

import jsonschema_rs

validator = jsonschema_rs.Draft202012Validator(
    {"type": "string", "format": "date"},
    validate_formats=True,
    ignore_unknown_formats=False
)

# This will validate the "date" format
validator.is_valid("2023-05-17")  # True
validator.is_valid("not a date")  # False

# With ignore_unknown_formats=False, using an unknown format will raise an error
invalid_schema = {"type": "string", "format": "unknown"}
try:
    jsonschema_rs.Draft202012Validator(
        invalid_schema, validate_formats=True, ignore_unknown_formats=False
    )
except jsonschema_rs.ValidationError as exc:
    assert str(exc) == '''Unknown format: 'unknown'. Adjust configuration to ignore unrecognized formats

Failed validating "format" in schema

On instance:
    "unknown"'''

Structured Output with evaluate

When you need more than a boolean result, use the evaluate API to access the JSON Schema Output v1 formats:

import jsonschema_rs

schema = {
    "type": "array",
    "prefixItems": [{"type": "string"}],
    "items": {"type": "integer"},
}
evaluation = jsonschema_rs.evaluate(schema, ["hello", "oops"])

assert evaluation.flag() == {"valid": False}
assert evaluation.list() == {
    "valid": False,
    "details": [
        {
            "evaluationPath": "",
            "instanceLocation": "",
            "schemaLocation": "",
            "valid": False,
        },
        {
            "valid": True,
            "evaluationPath": "/type",
            "instanceLocation": "",
            "schemaLocation": "/type",
        },
        {
            "valid": False,
            "evaluationPath": "/items",
            "instanceLocation": "",
            "schemaLocation": "/items",
            "droppedAnnotations": True,
        },
        {
            "valid": False,
            "evaluationPath": "/items",
            "instanceLocation": "/1",
            "schemaLocation": "/items",
        },
        {
            "valid": False,
            "evaluationPath": "/items/type",
            "instanceLocation": "/1",
            "schemaLocation": "/items/type",
            "errors": {"type": '"oops" is not of type "integer"'},
        },
        {
            "valid": True,
            "evaluationPath": "/prefixItems",
            "instanceLocation": "",
            "schemaLocation": "/prefixItems",
            "annotations": 0,
        },
        {
            "valid": True,
            "evaluationPath": "/prefixItems/0",
            "instanceLocation": "/0",
            "schemaLocation": "/prefixItems/0",
        },
        {
            "valid": True,
            "evaluationPath": "/prefixItems/0/type",
            "instanceLocation": "/0",
            "schemaLocation": "/prefixItems/0/type",
        },
    ],
}

hierarchical = evaluation.hierarchical()
assert hierarchical == {
    "valid": False,
    "evaluationPath": "",
    "instanceLocation": "",
    "schemaLocation": "",
    "details": [
        {
            "valid": True,
            "evaluationPath": "/type",
            "instanceLocation": "",
            "schemaLocation": "/type",
        },
        {
            "valid": False,
            "evaluationPath": "/items",
            "instanceLocation": "",
            "schemaLocation": "/items",
            "droppedAnnotations": True,
            "details": [
                {
                    "valid": False,
                    "evaluationPath": "/items",
                    "instanceLocation": "/1",
                    "schemaLocation": "/items",
                    "details": [
                        {
                            "valid": False,
                            "evaluationPath": "/items/type",
                            "instanceLocation": "/1",
                            "schemaLocation": "/items/type",
                            "errors": {"type": '"oops" is not of type "integer"'},
                        }
                    ],
                }
            ],
        },
        {
            "valid": True,
            "evaluationPath": "/prefixItems",
            "instanceLocation": "",
            "schemaLocation": "/prefixItems",
            "annotations": 0,
            "details": [
                {
                    "valid": True,
                    "evaluationPath": "/prefixItems/0",
                    "instanceLocation": "/0",
                    "schemaLocation": "/prefixItems/0",
                    "details": [
                        {
                            "valid": True,
                            "evaluationPath": "/prefixItems/0/type",
                            "instanceLocation": "/0",
                            "schemaLocation": "/prefixItems/0/type",
                        }
                    ],
                }
            ],
        },
    ],
}

assert evaluation.errors() == [
    {
        "schemaLocation": "/items/type",
        "absoluteKeywordLocation": None,
        "instanceLocation": "/1",
        "error": '"oops" is not of type "integer"',
    }
]

assert evaluation.annotations() == [
    {
        "schemaLocation": "/prefixItems",
        "absoluteKeywordLocation": None,
        "instanceLocation": "",
        "annotations": 0,
    }
]

Arbitrary-Precision Numbers

The Python bindings always include the arbitrary-precision support from the Rust validator, so numeric values are exposed to Python using the most accurate type available:

  • Integers, regardless of size, are returned as regular int objects.
  • Floating-point literals that fit into IEEE-754 become Python floats.
  • Floating-point literals that don't fit in float (for example 1e10000 or extremely precise decimals) fall back to decimal.Decimal using their original JSON string representation.

This means ValidationError.kind attributes may contain Decimal instances for very large numbers. Import Decimal from the standard library if you need to compare against or serialize those values exactly:

from decimal import Decimal
from jsonschema_rs import ValidationError, validator_for

validator = validator_for('{"const": 1e10000}')
try:
    validator.validate(0)
except ValidationError as exc:
    assert exc.kind.expected_value == Decimal("1e10000")

# Extremely large exponents (beyond ~10^1_000_000) are clamped internally to keep parsing
# predictable, matching the Rust implementation's guardrails.

Schema Bundling

Produce a Compound Schema Document (Appendix B) by embedding all external $ref targets into a draft-appropriate container. The result validates identically to the original.

import jsonschema_rs

address_schema = {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://example.com/address.json",
    "type": "object",
    "properties": {"street": {"type": "string"}, "city": {"type": "string"}},
    "required": ["street", "city"]
}

schema = {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {"home": {"$ref": "https://example.com/address.json"}},
    "required": ["home"]
}

registry = jsonschema_rs.Registry([("https://example.com/address.json", address_schema)])
bundled = jsonschema_rs.bundle(schema, registry=registry)

Schema Canonicalization

Experimental: the canonicalization API may change in minor releases.

canonicalize reduces a schema to a normal form without changing the values it accepts. Schemas that accept the same values reduce to equal CanonicalSchema objects, and contradictions reduce to false:

import jsonschema_rs

canonical = jsonschema_rs.canonicalize({
    "allOf": [{"type": "integer", "minimum": 0}, {"minimum": 10, "maximum": 100}]
})
assert canonical.to_json_schema() == {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "integer", "minimum": 10, "maximum": 100,
}

# However they were written, equivalent schemas compare equal
assert canonical == jsonschema_rs.canonicalize({"type": "integer", "maximum": 100, "minimum": 10})

# A schema no value can satisfy collapses
from jsonschema_rs.canonical import Satisfiability

assert jsonschema_rs.canonicalize({"type": "integer", "minimum": 10, "maximum": 5}).satisfiability() == Satisfiability.NO

A canonical schema is the set of values it accepts, so canonical schemas combine as sets. Every emitted schema carries $schema, left out of the comments below:

positive = jsonschema_rs.canonicalize({"type": "integer", "minimum": 0})
bounded = jsonschema_rs.canonicalize({"type": "integer", "maximum": 100})

# Every value both admit
positive.intersect(bounded).to_json_schema()
# {"type": "integer", "minimum": 0, "maximum": 100}

# Every value either admits
positive.union(bounded).to_json_schema()
# {"type": "integer"}

# Every value `positive` admits and `bounded` rejects
positive.subtract(bounded).to_json_schema()
# {"type": "integer", "minimum": 101}

# Every value `positive` rejects, across the types it never admitted
positive.negate().to_json_schema()
# {"anyOf": [{"type": ["null", "boolean", "string", "array", "object"]},
#            {"type": "integer", "maximum": -1},
#            {"type": "number", "not": {"multipleOf": 1}}]}

positive.covers(bounded)        # Containment.NO - `bounded` takes negative integers, `positive` does not
positive.satisfiability()       # Satisfiability.YES

Comparing two versions of a schema

The difference answers what editing a schema did to the values it takes: it accepts exactly what the old schema took and the new one turns away, and is unsatisfiable exactly when nothing was lost.

old = jsonschema_rs.canonicalize({"type": "string"})
new = jsonschema_rs.canonicalize({"type": "string", "maxLength": 50})

# What `new` stopped accepting, as a schema
assert old.subtract(new).to_json_schema() == {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "string", "minLength": 51,
}
# Nothing is accepted that was not accepted before, so the change only narrows
assert new.subtract(old).satisfiability() == Satisfiability.NO

Compare a request schema new-against-old and a response schema old-against-new: narrowing a request turns away payloads a caller used to send, widening a response returns values a caller never agreed to read.

Satisfiability.NO on the difference proves nothing was lost. UNKNOWN proves nothing either way.

UNKNOWN is undecided, not negative, so the two questions have opposite safe tests: only satisfiability() == Satisfiability.NO proves a schema admits nothing, and only covers() == Containment.YES proves containment.

Containment, Satisfiability, Distinctness and CanonicalKind live in jsonschema_rs.canonical.

Both operands must share one setup - the same draft, format policy, regular-expression engine and definitions - or IncompatibleOperands is raised. UnsupportedOperand means an operand is a Raw pass-through, and UnsupportedResult that the canonical form does not support the result.

Meta-Schema Validation

JSON Schema documents can be validated against their meta-schemas to ensure they are valid schemas. jsonschema-rs provides this functionality through the meta module:

import jsonschema_rs

# Valid schema
schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer", "minimum": 0}
    },
    "required": ["name"]
}

# Validate schema (draft is auto-detected)
assert jsonschema_rs.meta.is_valid(schema)
jsonschema_rs.meta.validate(schema)  # No error raised

# Invalid schema
invalid_schema = {
    "minimum": "not_a_number"  # "minimum" must be a number
}

try:
    jsonschema_rs.meta.validate(invalid_schema)
except jsonschema_rs.ValidationError as exc:
    assert 'is not of type "number"' in str(exc)

Regular Expression Configuration

When validating schemas with regex patterns (in pattern or patternProperties), you can configure the underlying regex engine:

import jsonschema_rs
from jsonschema_rs import FancyRegexOptions, RegexOptions

# Default fancy-regex engine with backtracking limits
# (supports advanced features but needs protection against DoS)
validator = jsonschema_rs.validator_for(
    {"type": "string", "pattern": "^(a+)+$"},
    pattern_options=FancyRegexOptions(backtrack_limit=10_000)
)

# Standard regex engine for guaranteed linear-time matching
# (prevents regex DoS attacks but supports fewer features)
validator = jsonschema_rs.validator_for(
    {"type": "string", "pattern": "^a+$"},
    pattern_options=RegexOptions()
)

# Both engines support memory usage configuration
validator = jsonschema_rs.validator_for(
    {"type": "string", "pattern": "^a+$"},
    pattern_options=RegexOptions(
        size_limit=1024 * 1024,   # Maximum compiled pattern size
        dfa_size_limit=10240      # Maximum DFA cache size
    )
)

The available options:

  • FancyRegexOptions: Default engine with lookaround and backreferences support

    • backtrack_limit: Maximum backtracking steps
    • size_limit: Maximum compiled regex size in bytes
    • dfa_size_limit: Maximum DFA cache size in bytes
  • RegexOptions: Safer engine with linear-time guarantee

    • size_limit: Maximum compiled regex size in bytes
    • dfa_size_limit: Maximum DFA cache size in bytes

This configuration is crucial when working with untrusted schemas where attackers might craft malicious regex patterns.

Email Format Configuration

When validating email addresses using {"format": "email"}, you can customize the validation behavior beyond the default JSON Schema spec requirements:

import jsonschema_rs
from jsonschema_rs import EmailOptions

# Require a top-level domain (reject "user@localhost")
validator = jsonschema_rs.validator_for(
    {"format": "email", "type": "string"},
    validate_formats=True,
    email_options=EmailOptions(require_tld=True)
)
validator.is_valid("user@localhost")     # False
validator.is_valid("user@example.com")   # True

# Disallow IP address literals and display names
validator = jsonschema_rs.validator_for(
    {"format": "email", "type": "string"},
    validate_formats=True,
    email_options=EmailOptions(
        allow_domain_literal=False,  # Reject "user@[127.0.0.1]"
        allow_display_text=False     # Reject "Name <user@example.com>"
    )
)

# Require minimum domain segments
validator = jsonschema_rs.validator_for(
    {"format": "email", "type": "string"},
    validate_formats=True,
    email_options=EmailOptions(minimum_sub_domains=3)  # e.g., user@sub.example.com
)

Available options:

  • require_tld: Require a top-level domain (e.g., reject "user@localhost")
  • allow_domain_literal: Allow IP address literals like "user@[127.0.0.1]" (default: True)
  • allow_display_text: Allow display names like "Name user@example.com" (default: True)
  • minimum_sub_domains: Minimum number of domain segments required

External References

By default, jsonschema-rs resolves HTTP references and file references from the local file system. You can implement a custom retriever to handle external references. Here's an example that uses a static map of schemas:

import jsonschema_rs

def retrieve(uri: str):
    schemas = {
        "https://example.com/person.json": {
            "type": "object",
            "properties": {
                "name": {"type": "string"},
                "age": {"type": "integer"}
            },
            "required": ["name", "age"]
        }
    }
    if uri not in schemas:
        raise KeyError(f"Schema not found: {uri}")
    return schemas[uri]

schema = {
    "$ref": "https://example.com/person.json"
}

validator = jsonschema_rs.validator_for(schema, retriever=retrieve)

# This is valid
validator.is_valid({
    "name": "Alice",
    "age": 30
})

# This is invalid (missing "age")
validator.is_valid({
    "name": "Bob"
})  # False

Schema Registry

For applications that frequently use the same schemas, you can create a registry to store and reference them efficiently:

import jsonschema_rs

# Create a registry with schemas
registry = jsonschema_rs.Registry([
    ("https://example.com/address.json", {
        "type": "object",
        "properties": {
            "street": {"type": "string"},
            "city": {"type": "string"}
        }
    }),
    ("https://example.com/person.json", {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "address": {"$ref": "https://example.com/address.json"}
        }
    })
])

# Use the registry with any validator
validator = jsonschema_rs.validator_for(
    {"$ref": "https://example.com/person.json"},
    registry=registry
)

# Validate instances
assert validator.is_valid({
    "name": "John",
    "address": {"street": "Main St", "city": "Boston"}
})

The registry can be configured with a draft version and a retriever for external references:

import jsonschema_rs

registry = jsonschema_rs.Registry(
    resources=[
        (
            "https://example.com/address.json",
            {}
        )
    ],  # Your schemas
    draft=jsonschema_rs.Draft202012,  # Optional
    retriever=lambda uri: {}  # Optional
)

Error Handling

jsonschema-rs provides detailed validation errors through the ValidationError class, which includes both basic error information and specific details about what caused the validation to fail:

import jsonschema_rs

schema = {"type": "string", "maxLength": 5}

try:
    jsonschema_rs.validate(schema, "too long")
except jsonschema_rs.ValidationError as error:
    # Basic error information
    print(error.message)       # '"too long" is longer than 5 characters'
    print(error.instance_path) # Location in the instance that failed
    print(error.schema_path)   # Location in the schema that failed

    # Detailed error information via `kind`
    if isinstance(error.kind, jsonschema_rs.ValidationErrorKind.MaxLength):
        assert error.kind.limit == 5
        print(f"Exceeded maximum length of {error.kind.limit}")

For a complete list of all error kinds and their attributes, see the type definitions file

Error Kind Properties

Each error has a kind property with convenient accessors:

for error in jsonschema_rs.iter_errors({"minimum": 5}, 3):
    print(error.kind.name)      # "minimum"
    print(error.kind.value)     # 5
    print(error.kind.as_dict()) # {"limit": 5}

Pattern matching (Python 3.10+):

for error in jsonschema_rs.iter_errors({"minimum": 5}, 3):
    match error.kind:
        case jsonschema_rs.ValidationErrorKind.Minimum(limit=limit):
            print(f"Value below {limit}")
        case jsonschema_rs.ValidationErrorKind.Type(types=types):
            print(f"Expected one of {types}")

Error Message Masking

When working with sensitive data, you might want to hide actual values from error messages. You can mask instance values in error messages by providing a placeholder:

import jsonschema_rs

schema = {
    "type": "object",
    "properties": {
        "password": {"type": "string", "minLength": 8},
        "api_key": {"type": "string", "pattern": "^[A-Z0-9]{32}$"}
    }
}

# Use default masking (replaces values with "[REDACTED]")
validator = jsonschema_rs.validator_for(schema, mask="[REDACTED]")

try:
    validator.validate({
        "password": "123",
        "api_key": "secret_key_123"
    })
except jsonschema_rs.ValidationError as exc:
    assert str(exc) == '''[REDACTED] is shorter than 8 characters

Failed validating "minLength" in schema["properties"]["password"]

On instance["password"]:
    [REDACTED]'''

Performance

jsonschema-rs is designed for high performance, outperforming other Python JSON Schema validators in most scenarios:

  • 84-2,270x faster than jsonschema for complex schemas and large instances
  • 5-480x faster than fastjsonschema on CPython

For detailed benchmarks, see our full performance comparison.

Python support

jsonschema-rs supports CPython 3.10 through 3.14 and PyPy 3.10+.

Pre-built wheels are available for:

  • Linux: x86_64, i686, aarch64 (glibc and musl)
  • macOS: x86_64, aarch64, universal2
  • Windows: x64, x86

Troubleshooting

If you encounter linking errors when building from source on Linux (e.g., undefined symbol errors related to ring or crypto), try using the mold linker:

RUSTFLAGS="-C link-arg=-fuse-ld=mold" pip install jsonschema-rs --no-binary :all:

Acknowledgements

This library draws API design inspiration from the Python jsonschema package. We're grateful to the Python jsonschema maintainers and contributors for their pioneering work in JSON Schema validation.

Support

If you have questions, need help, or want to suggest improvements, please use GitHub Discussions.

Sponsorship

If you find jsonschema-rs useful, please consider sponsoring its development.

Contributing

We welcome contributions! Here's how you can help:

See CONTRIBUTING.md for more details.

License

Licensed under MIT License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jsonschema_rs-0.51.0.tar.gz (2.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

jsonschema_rs-0.51.0-pp311-pypy311_pp73-win_amd64.whl (5.4 MB view details)

Uploaded PyPyWindows x86-64

jsonschema_rs-0.51.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.51.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.51.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

jsonschema_rs-0.51.0-cp315-cp315t-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.15tWindows x86-64

jsonschema_rs-0.51.0-cp315-cp315t-musllinux_1_2_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.51.0-cp315-cp315t-musllinux_1_2_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.51.0-cp315-cp315t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.51.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.51.0-cp315-cp315t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

jsonschema_rs-0.51.0-cp315-cp315t-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

jsonschema_rs-0.51.0-cp314-cp314t-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.51.0-cp314-cp314t-musllinux_1_2_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.51.0-cp314-cp314t-musllinux_1_2_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.51.0-cp314-cp314t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.51.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.51.0-cp314-cp314t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.51.0-cp314-cp314t-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

jsonschema_rs-0.51.0-cp310-abi3-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.10+Windows x86-64

jsonschema_rs-0.51.0-cp310-abi3-win32.whl (4.6 MB view details)

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.51.0-cp310-abi3-musllinux_1_2_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

jsonschema_rs-0.51.0-cp310-abi3-musllinux_1_2_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (5.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.51.0-cp310-abi3-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

jsonschema_rs-0.51.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (10.2 MB view details)

Uploaded CPython 3.10+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file jsonschema_rs-0.51.0.tar.gz.

File metadata

  • Download URL: jsonschema_rs-0.51.0.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jsonschema_rs-0.51.0.tar.gz
Algorithm Hash digest
SHA256 151d00c74768a94010fabbc1156071838ec8dcdfa48b9efed34a542b1346ef0e
MD5 0c16c6c658277310664c372b39452aca
BLAKE2b-256 cf0db5c9780b84cd28ec49aed45aaf93be3b703cb2ece4752cfe1b298e045458

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-pp311-pypy311_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 d10d1e50b3690d87f5b83077a1552ffb4976cf959a769f8d6a74951e447228c4
MD5 1ceb7524c2a3bf33330f36e6b348978c
BLAKE2b-256 6047a513e7bb6ba937f48c594cb1df4d9161ea0256554f8315c83ca18f300c5f

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4c5b6be5f10fa76b25ccd2e1b2a4aeb094b807740d0d20e9ddb1898ed0b7092f
MD5 54eefebb02d4f9cde846a8928dac436b
BLAKE2b-256 833e0c11d962b448cce83bc7e9160e79dcce71ce61d89720f75696eb904b002b

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 db88647b58dedecdbf870e63aa5911648f7ef0fc0fd296e775c5c700882fc9c5
MD5 55bb347f32cfe0127463163f9351d644
BLAKE2b-256 f37180de1465bfc11f336ee06a44cc9eb7bd6fd9fdc08d0ca79e691e5277ea7e

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b096df256fbd9026d88b663f7bbceee873704eeb66117a9cd0adf31a10495010
MD5 b589fa8cc700b2eff0af116e9a24a821
BLAKE2b-256 87433de0d3f26bf5b65b30afe9c9992c646665e64388f31e67649a34c89f517e

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp315-cp315t-win_amd64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 153b36dd5d8f8ec44bddf02588b7d7e43a823d59b9ec8447af66c37767249bfc
MD5 9825e207e89e83fbab68d41c8d63af9b
BLAKE2b-256 867a1cc3fd546667bca29d94d9075c8a125e63c5d2d82efb7a82ce4499012187

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp315-cp315t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 36490c1330ef5363623f2883a0c092a48a1af32ce8c46985f2723ba0b3dc2c83
MD5 af2a56860c1085b8aa15e1b518b28cda
BLAKE2b-256 18500a299a8bd968d1c52fca2c60e7991596019af78cfa3d0e7485b39d8750c2

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp315-cp315t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8af7365bda5a714ad0c3bf8be14040090edd17a77080f699cab16ac5e285f4ba
MD5 5840720b698a62f8b5604387a42762fe
BLAKE2b-256 3f6debb7742d68d25ed88e1b1e75b62b7fbd16ee75eab32779b80c3a6a061391

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp315-cp315t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4b9eca0b24c2f763a53544b6f1aa40e14c27fd375e8a8c7192719a502693449d
MD5 0313a2027f434a956da44132985f8eae
BLAKE2b-256 390f73da0ffc7d058e34e1445888fcdb7841c61a8109086fa16ace5e63c57ec4

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 176ce5344440c4105647d54a61efe699e619bfcc532a3e82ceb6e12d3ab4cba7
MD5 ac5dc7f148a39c461d7c079aa85b31f8
BLAKE2b-256 a420dfb8d883681e804ae6ee30842299d1edcbb205f64387e436a25810d348aa

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp315-cp315t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 434d547bb19394d3e37ead5ae6e7dc040e09832dce2cf265dbb56bb6b7cbe8a1
MD5 a7a81283c1ac25b32983d13eb9efb8b2
BLAKE2b-256 7e3429ab803e7d75b269f11cb5ec2a4a5e0cb9ac83f1c1acd9fc808b32f6feb9

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp315-cp315t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1ab14537686726ce9eb4e14cee86013d624d7eeade79050a4af0c1ef343a4fc6
MD5 6c49b9d62fe7f574e6e4586342211a41
BLAKE2b-256 24c7e871aacc34e18f06397507eb821698f90621f0fda8e4153e372799f03f1b

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 88bcb1465d4c7c0f0284580d79a46b67a0347e8adcc1a5585be4d290a2a03e8d
MD5 72576ffd12d66162c35ad4de6e6fdfde
BLAKE2b-256 3ad924b3aeccbf9430ee0136291785d34cf5adf45205a99827a95c3370266725

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b6311f26446dd7c0e26390551fded4ac2f2490c84e364300d2b7c35551776059
MD5 a82e0083a0be0da9eab3a205701cae6a
BLAKE2b-256 17c43d787374ade520c2f4888438e860e61bd12af87d321c2b33c8b7092398c6

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3eed972efdf9c884332847a159430184a834615a2408f2e955807aef8b273a6e
MD5 8fe852b240231bb4226a323c5b8b8d5e
BLAKE2b-256 1b44de530aa7f59effe8dfad2186b7cd68d846200acd5cbd00ab8413d6d0cb34

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 09a596918bd48028558f6a3c52d0af9bb6ab23bd5c79570f1b486d1ae0509880
MD5 a165fda5c32fe6b4cdb8e4acb501bf1e
BLAKE2b-256 6c0210d8dae5f3be4f4fda403c12f516860ffc8fb1a04edc99d00a617dbec141

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f8061344daf5d06469c2da4031ea5fde34f971f665a45a263d607b72c2e69d48
MD5 03c65eeb496db3809f55e6c16cedcb1a
BLAKE2b-256 486b1436b7d01f962359e15a3c1c3d3bccf260ab065ab6109f22b890f3d349e5

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ec4f7fd47cd8e1b22dab93135993815ea4011c46412c019a181fdeb7aa22a1f2
MD5 01856318a4e1a8771966612e196e5639
BLAKE2b-256 6eb198f1152c12b85354008f946cb333cc5f2d68e6c706db170ad8867b27b53b

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2e96abe93fbbf03542539663ec8b7e7832f8c889720599590029627f800fac75
MD5 95b041ff50f2c12a3cda1e1af2281aa2
BLAKE2b-256 bfb1fdc2e546a094573f47cb19c305c90257faf0164b51a1b5bc01db54a43d55

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 751e479c2de486bebbe5aacef33f39e9e7fd511329601b349b128776cfca77bd
MD5 6de367531f34b5d64bbdcf3eca40d987
BLAKE2b-256 1e8f9d96269730ca618d86cce70ecadb87a08495828b67c77306e059acb73589

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-win32.whl.

File metadata

  • Download URL: jsonschema_rs-0.51.0-cp310-abi3-win32.whl
  • Upload date:
  • Size: 4.6 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 14254509e22a80f3a901161c59525576580eeb29f0cf7a5cabadb860c8f80973
MD5 370da4128108c9a4fd3f129ae021b97e
BLAKE2b-256 6260b152eca5ee0202467297e83bb294d980a332c3c1eb12b844400141c30419

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5e265cf68d4bde98b8c3598a38e48d1f5e33bc45cbe451c122e14b2a6aec7eb4
MD5 401926118acd6a51bae52bd0c99f250f
BLAKE2b-256 ea929a7ac31dab2ff66461ffcfb68a5252fd3d179ce885a4c4d4603ab4715959

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0ca4c597bca9d17a9916ae2a21a7774645ce250c2912110421a38d64e3ebd2e8
MD5 2f1d1837a65f88ca048aec337f964705
BLAKE2b-256 58b410bc8e74cfe1a076af2dda328966d1df57526d0c65189c2aca6a286133ef

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5232fc031470c897ac0bb781c26203b47fa6779901e14b438fe31f4aaa824bdc
MD5 f567cfc73f9352d34d206bd699f3af0f
BLAKE2b-256 54a392db1e0c648fa63300045a415c086125bbadc3489a90006aa4d00612e839

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2635c05c6fe5be19b15f78eb2668873c373ca351e11442570796fe0490b520e7
MD5 cdc090cb15a9c3a534029d36111ebb1d
BLAKE2b-256 084aae635dd4ba79bacc1efeefd26b080e4cbf89c35d192b3cd33c69a3c6c009

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2527074cacb9026703bd288695979cabff5412e4e5783f8530d4b93abf07ef60
MD5 66fa6772a2f4c29baadba39f4bd0274e
BLAKE2b-256 f240a49896372df7aebdc24753d9043ca0df89e126ed15c5c05eafaf5b530b8b

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1d8b76d5f3797b15d505a23e6917c3b0dfa70d9a9de8e733d4c5dd0494ef09a1
MD5 fd3b6e27b4f82d29abff7eddfbb65652
BLAKE2b-256 c623abd70a8683cf01a5dc76b2ca46257ef025b013888bc1907c5b73e02b1c12

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.51.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.51.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 238e8ca79b919da76dea43c9937a1a137a4d697de29d9578731057ab7a645b07
MD5 6da9312801c9056bcfc50669b2c4895c
BLAKE2b-256 ac53bfb5e2b4a399d24a598d345b40fe8ea9ac1e0133f5cfa3d45c03e166f205

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.51.0 This release

28 files

0.50.1

28 files

0.50.0

28 files

0.49.9

28 files

0.49.8

28 files

0.49.7

28 files

0.49.6

28 files

0.49.5

28 files

0.49.4

28 files

0.49.3

28 files

0.49.2

28 files

0.49.1

28 files

0.49.0

28 files

0.48.5

28 files

0.48.2

28 files

0.48.1

28 files

0.48.0

28 files

0.47.0

28 files

0.46.10

28 files

0.46.9

28 files

0.46.8

28 files

0.46.7

28 files

0.46.6

28 files

0.46.5

28 files

0.46.4

28 files

0.46.3

28 files

0.46.2

28 files

0.46.1

28 files

0.46.0

28 files

0.45.1

28 files

0.45.0

28 files

0.44.1

28 files

0.44.0

28 files

0.43.0

28 files

0.42.2

28 files

0.42.1

28 files

0.42.0

28 files

0.41.0

28 files

0.40.4

28 files

0.40.3

14 files

0.40.2

12 files

0.40.1

12 files

0.40.0

12 files

0.39.0

12 files

0.38.1

12 files

0.38.0

12 files

0.37.4

12 files

0.37.3

12 files

0.37.2

12 files

0.37.1

12 files

0.37.0

12 files

0.36.0

12 files

0.35.0

12 files

0.34.0

50 files

0.33.0

43 files

0.32.1

43 files

0.32.0

43 files

0.31.0

43 files

0.30.0

43 files

0.29.1

43 files

0.29.0

42 files

0.28.3

43 files

0.28.2

43 files

0.28.1

43 files

0.28.0

43 files

0.27.1

43 files

0.27.0

43 files

0.26.1

43 files

0.26.0

43 files

0.25.1

43 files

0.25.0

43 files

0.24.3

43 files

0.24.2

43 files

0.24.1

43 files

0.24.0

43 files

0.23.0

43 files

0.22.3

36 files

0.22.2

36 files

0.22.1

36 files

0.22.0

36 files

0.21.0

36 files

0.20.0

36 files

0.19.1

36 files

0.19.0

36 files

0.18.3

43 files

0.18.2

43 files

0.18.1

43 files

0.18.0

43 files

0.17.3

43 files

0.17.2

43 files

0.17.1

31 files

0.16.3

31 files

0.16.2

16 files

0.16.1

13 files

0.16.0

13 files

0.14.0

13 files

0.13.1

13 files

0.13.0

13 files

0.12.3

13 files

0.12.2

13 files

0.12.1

13 files

0.12.0

13 files

0.11.1

13 files

0.11.0

13 files

0.10.0

13 files

0.9.1

13 files

0.9.0

13 files

0.8.0

13 files

0.6.2

13 files

0.6.1

13 files

0.6.0

13 files

0.5.1

13 files

0.5.0

13 files

0.4.3

13 files

0.4.2

13 files

0.4.1

13 files

0.4.0

13 files

0.3.3

13 files

0.3.2

13 files

0.3.1

12 files

0.3.0

5 files

0.2.0

5 files

0.1.0

5 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page