Skip to main content

A high-performance JSON Schema validator for Python

Project description

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

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.

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.

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)

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] does not match "^[A-Z0-9]{32}$"

Failed validating "pattern" in schema["properties"]["api_key"]

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

Performance

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

  • 43-240x faster than jsonschema for complex schemas and large instances
  • 1.8-440x 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.

Project details


Release history Release notifications | RSS feed

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.46.0.tar.gz (2.0 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.46.0-pp311-pypy311_pp73-win_amd64.whl (3.8 MB view details)

Uploaded PyPyWindows x86-64

jsonschema_rs-0.46.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (3.6 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.46.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

jsonschema_rs-0.46.0-cp314-cp314t-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.46.0-cp314-cp314t-musllinux_1_2_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.46.0-cp314-cp314t-musllinux_1_2_aarch64.whl (3.8 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.46.0-cp314-cp314t-manylinux_2_28_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.46.0-cp314-cp314t-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.46.0-cp314-cp314t-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

jsonschema_rs-0.46.0-cp313-cp313t-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.13tWindows x86-64

jsonschema_rs-0.46.0-cp313-cp313t-musllinux_1_2_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.46.0-cp313-cp313t-musllinux_1_2_aarch64.whl (3.8 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.46.0-cp313-cp313t-manylinux_2_28_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.46.0-cp313-cp313t-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

jsonschema_rs-0.46.0-cp313-cp313t-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.13tmacOS 10.12+ x86-64

jsonschema_rs-0.46.0-cp310-abi3-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.10+Windows x86-64

jsonschema_rs-0.46.0-cp310-abi3-win32.whl (3.2 MB view details)

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.46.0-cp310-abi3-musllinux_1_2_x86_64.whl (4.2 MB view details)

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

jsonschema_rs-0.46.0-cp310-abi3-musllinux_1_2_aarch64.whl (3.8 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

jsonschema_rs-0.46.0-cp310-abi3-manylinux_2_28_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

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

jsonschema_rs-0.46.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (3.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.46.0-cp310-abi3-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

jsonschema_rs-0.46.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (7.5 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.46.0.tar.gz.

File metadata

  • Download URL: jsonschema_rs-0.46.0.tar.gz
  • Upload date:
  • Size: 2.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for jsonschema_rs-0.46.0.tar.gz
Algorithm Hash digest
SHA256 4ad96a7fa583fa63abd78d0fd95ffc662cc8e22b8feb06c629c8c314c5e825a1
MD5 9f8a43c381611e7a854b0cdbd810367d
BLAKE2b-256 7b897dc67b91860924360c12628ca5986902a44e7b42108747ce0b6d3f0ad750

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 927a45ebb1cd18da393650ac36ea9b63d9f8b4a2d0e8fd0abf8fae9a448a8fcb
MD5 d9c8b9c6ac2aaea68b6e8f6805c3e0c7
BLAKE2b-256 ee04749755bf48fc8c8a70bc350804d902bb79a7339a0578a5300e79c5df59fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a898451693edbeeb9b52de11a755ff5c65830e6c2ccc5186b8feb815c9676d1a
MD5 4536762d405ff4f56e2fb2f7227ad81c
BLAKE2b-256 8ca3d590bf1d06fd0d46ed3c82177fd5879e7b39dade7197733924f6a974e3f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bbda33573bdc3654fd7504eb18bcde979e683629f337160a965918a5f49c7e94
MD5 48a5da017865595cfcddc57d0d9fee87
BLAKE2b-256 816f542cfa1b0d39aa19b9acc886e46a8b3abd9299ed68db2003810fd31c8d88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6e2733e6b66f3ddcf81f3baaafbace1f09e5eb0ee66ce357c6a57e50fbc140ad
MD5 ac1dcdfbc7737b53c65759d0d66b6e08
BLAKE2b-256 053e837048ecd63755a77ee66b815bd11f96453850085db8c35f14685dc7d802

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 272ce1e5446e9ce79e1f44a51fa5362dd46efa76bee9b63bc849180f68f2b285
MD5 dc08aee496257d923b97c37af41618f5
BLAKE2b-256 a561f8fdf3bff50430aa458790b183a0db792aecd239fe1f6a238fe150b814d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8495f0a8bb0a99729819e9de5457f2f8ea1d2f578abb98303c14ddd2470ad062
MD5 a6cc321bf0a6f4fcf999bb75569fef08
BLAKE2b-256 923f63bc51ccd3f7c012bfbbce88696873367cc36b5648db4fdf9ff511d5e1c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1d5c98f583e627d4152a72a525a0fd7219f9fd6e71ab3080fe5e2f83e1694d85
MD5 e53980381fb0700cbaa1a475563897f0
BLAKE2b-256 13a58b5fccc8af24de67c83a86c924c8efad1df62dcb49c213a2b480d8067735

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c55be01f703f540896abff0a1fa0d7f22e8b2fc431395279f69babc5461b385d
MD5 876eacabf3dc578bffc140985fc49a6f
BLAKE2b-256 384d976429625a113097434ce976992eb82dbff78855660efe2afa6d6afc5243

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74f4b8cd35a43257d3770db7e3e9ed2150f27aa2f651aced195ea2c2264deffb
MD5 c98f3c768ad39bbc6ecc46295e082a3f
BLAKE2b-256 f8cd5839401a82369c5931c3bec44c5bd1d726ca6fbb836f5c2e59cc1a93045a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4fb447fb1a48d967486d648f4d06564d7bf58f4f2b09d16ff7efe59e6bc43eb6
MD5 c1c1ddae08b6a42ebe763eead7438a75
BLAKE2b-256 b545e2981bbb2bc4b014571ac81e37ff280d38628e122cb35b70a1d27918d1a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 964e8cb27e543442b6564eea306e235a12ebb706521801c7b86ec0ce056f8774
MD5 01c2bb8a7dd755d973088992e96baf5a
BLAKE2b-256 e6b0fd579a453be4c79f932d1dfe1ed2aafbd26c2ac257d0de4d3325bd8a2cbf

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.0-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 f0ffe1e6528a30c69e5f60db16b0326ec13791769dbf362884729f885bebdc62
MD5 8e0b87608ba0e0de5a3a0f50eac05fb4
BLAKE2b-256 9734bb91d8a8cda32821bb7c6a1dcb1ea38108077e397917442fed64c0e7507d

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8290da11c5561d01e930b532f5b587c8fa375c778cdf1fbabc4758ab12062a69
MD5 8430854921c92de9dfebdd29df9cf065
BLAKE2b-256 871fa685b1007e8cb87bdaf04df52fc4565ae77093bacb65ca94d7ff3c2cc377

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.0-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 09150b461ea2aad4f549d6398f10d6204fe17a66217bfe5f3d85350b04318919
MD5 94c1d429af7b3f827cea9151141474dd
BLAKE2b-256 47b9a60d5b21d7713f84dc0cdf9076b283a17e8d4af5d06838032aba27be0cac

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.0-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 46afe413888061e02bc86f4b61288f0c3cf46ba98b86789880712c2c071a4101
MD5 61daa0c4a794c3053e8dd5aa199bbaf2
BLAKE2b-256 b8341d0cfcc2c1213a3acadbdef1150730c1d4294bbbb873a5eaa8ac11e84ed7

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0e0df0eaf84bbbef95f2e9beca6df6fb683f142e13fee591d81c91d2f59194d6
MD5 ff6e324a3417278b929ef98e6a3059d5
BLAKE2b-256 655eef66dd437fe70f4fac4ffb610e879ca82b557350e595e1eec7833f5d7515

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.0-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 13afbbe8734b91f274806d7d4fee8df684fb491dc17383fa7d6c1d83118ed8f7
MD5 f15398eb63ecaf1ff33d31b8489ceb87
BLAKE2b-256 e7db66d1d45df5eb154c20183325ff42b5768c633506be53ce2db58c60802f54

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.0-cp313-cp313t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp313-cp313t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8b75cf1a1fea708bf07a5402e5631dcca072d4ab6e4bb98eaa2a479430ba9d91
MD5 41a21106e8705c12a7a3bb8e576cabed
BLAKE2b-256 857467e19a26265e9853469fa9395940d1f57cf1c54619e2f89479115683bb4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 55c8055cbb68b5e62f6a12e7c50b68128e5efd0969849825d9427bb6b4748db8
MD5 530df2193c9b19e2e526292fdc4f9bdf
BLAKE2b-256 0438395ae12c861093deb279b9be0ec25a32c0c783b29605c8ade07bee2f1c7a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jsonschema_rs-0.46.0-cp310-abi3-win32.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 751e3c46250683db1b574fac33010a420fc5ef383dd9ce2989c3a40677fa45eb
MD5 40eb317f5a9b670309ad5021a76e6534
BLAKE2b-256 596c09109cd9e3589e63781a789503122cd8e6d9d29a272b5ab678cbf9f6d53a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e74b681bdfc0a016276fd87ddfcd7894805e67e386185872c901b831f2ffedcb
MD5 cd456a9f2b104ba8caea04d1facb1c71
BLAKE2b-256 067c8678813320be634bb8bbcb833417d9603479a0bf072656cc5e2f545239fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 81b9196c3b1fe1bec9508b129e67ac909143d9a039a4113440ee21cfe8d4f484
MD5 981f6d0736ab3b22de2d8a96503d3771
BLAKE2b-256 e2430b22897d2b0c6560d58b837c1d91715f8157c58c89a8017122ad543f7450

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3ced60acdf2240a7c687d139b46e36af1420879d16f822166f40126a483f2dda
MD5 a39805d8e6c95a40d7ad9c17b6229491
BLAKE2b-256 8adcd3b4104f75902d6a2816d44ac4302b07711c8594bfe2a02ec5bd6372f2a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 41805e744efb07f7bb085780445e73032c73086ad72fb32366dd2e2e13f377bd
MD5 e32ff4d79a844b3652114145e23ea5dc
BLAKE2b-256 d57557f2f1ec1f22b77bab3c5f8d16d737c18971101e994dfe5c4655f6608101

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ceeb40ca3298fd7b076421f2dafbae77e93d3ebb7512f40cbe911f9be7782aeb
MD5 636edd71074a935790112f5eeb797045
BLAKE2b-256 d1d21e87e96ae56c953406bb0edefc208b585673023d596ae2793a23a9da1457

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 125c13236870eaeab80bd31e12731b6ecf23d8d1c870677750f9fec6642c3ab1
MD5 4ff9fbc766a378a034a098bec585cdc7
BLAKE2b-256 89ce2d20360d6eb9e5f23741003be1aca984a41cc380b27f3f7b256c7aa02642

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.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.46.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 63f9ac1f812045d279db8ecc5865a570140a074885150f5271f68825ed70abb9
MD5 5158a824515d9887f277f9719052c41f
BLAKE2b-256 cabd0b533dc69a67c2ec8f7b06f8032471adcd718211ed25557ee9e17e171bba

See more details on using hashes here.

Supported by

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