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.10.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.10-pp311-pypy311_pp73-win_amd64.whl (3.8 MB view details)

Uploaded PyPyWindows x86-64

jsonschema_rs-0.46.10-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.10-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.10-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

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

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.46.10-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.10-cp314-cp314t-musllinux_1_2_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.46.10-cp314-cp314t-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.10-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.10-cp314-cp314t-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.46.10-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.10-cp313-cp313t-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.13tWindows x86-64

jsonschema_rs-0.46.10-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.10-cp313-cp313t-musllinux_1_2_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.46.10-cp313-cp313t-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.10-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.10-cp313-cp313t-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

jsonschema_rs-0.46.10-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.10-cp310-abi3-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.10+Windows x86-64

jsonschema_rs-0.46.10-cp310-abi3-win32.whl (3.3 MB view details)

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.46.10-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.10-cp310-abi3-musllinux_1_2_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

jsonschema_rs-0.46.10-cp310-abi3-manylinux_2_28_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

jsonschema_rs-0.46.10-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.10-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (3.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.46.10-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.10-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.10.tar.gz.

File metadata

  • Download URL: jsonschema_rs-0.46.10.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.10.tar.gz
Algorithm Hash digest
SHA256 1a38763e38614d9cf50e0ea70addff0aacc1c01ddb8f266670cb46f0f4090810
MD5 7f29533948ed353840d21293ab6dbf77
BLAKE2b-256 0f7cee82ad9250dc57de708e38439643dd16333072e36438bc71c1984fd7e2a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 f6188f64d7f4daf54b279af408fa1918e7b7055d1932d14e4c020ec5318bfc3a
MD5 9551309a3a811d775ba7eec30c399644
BLAKE2b-256 82d0ab319359e27983f3cf4ecee18cda259ec1cd8f3f5cd806e4baa94329f7a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fd56b1f21ac606c0f9518d9b5b5e64b76a791b94f5b23a6450f614512d607f4d
MD5 5001fdf4098984f9f8715fb878ce7718
BLAKE2b-256 5182e06cbfca4001551f6b4824409836d54361732d1c4b2d4f6fea024a39157b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d5f98dc0160940497537621146daaa99ed29fb759e4dcf04e3bf135281ebeed
MD5 37d175220888a74a83df819cd0974f08
BLAKE2b-256 57da33103da53c8edbb013419be5b5303e4e70b825086377d6074abf5dbe4683

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ccae2f91258b654a45b35010b617f5d6f32eb715d89ba2e5d26d411e0f62d39d
MD5 bde09f6e7ed41aa9b26521233f922373
BLAKE2b-256 8d176577d3e923be02b59341035840ea770525c9ff26b68028a331a3ce0fe4d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 ef6e86c69d395ec9a3379f042525ab6f590a8cadbeaf4a32c3ff10e98a586e46
MD5 9e9aa6c88d0d33231afba85173bf1935
BLAKE2b-256 3f3c0d0bd2bf78e96b0a6cf4ec74ba5fd13c0d31da1835b0c49f1a31cc1b9a0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 03cdb1b66486d021cdfff67666b70b3de877753ade9453197fa2328db4389708
MD5 b3b994b6d8f0c2aba26cdc1faae7768d
BLAKE2b-256 ca27d42d9ef3fc40b5bb460c9025cc25b12f8e25c61bdccfa93d59dcb105fa50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e6f660bf9cbfdb3af67fd208484c07b69042d8269f1a094f07603d431249e44c
MD5 5ec66fb6d061b8190e243f4b0bf6204d
BLAKE2b-256 47f15bf2df9487d5921a6d7f5236db26823cf86715a6e08600418d3edd890c9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bb15d1abfb87ad35ab11504165d2795dc2c33f3bbcb2c8b2ec97af1eeb2e4f1e
MD5 d81a20c9504fa3cef1850c93a7fe94af
BLAKE2b-256 0cb171810a9e9c6b3e8173614f15538b7d338782442f8fba626a9c2151917203

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d04283616a7bfeb66745f21fffc0359f064e98c002f21c5d4c5868efed35f59d
MD5 0ca9339adb87f5146a48c3deac55a502
BLAKE2b-256 9a9b6af3f6ae2b299233eae8dd13b7a4b2e1f1da7916db30810abe2afb89c754

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02af909667ed40b679db2b90cbe7c73c74a09f8fd806775fd5aec8446be70a48
MD5 fedfa1b3d9a07a63e9479a99da84d47f
BLAKE2b-256 834904bb9e41e8d552be4c15ee316961830461adb14e9a0dafbb764293542352

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 84160322fa90a1c8f264cccfc88b2dedbb37100164c6976aae6a5feba769167d
MD5 878c406933b5f7a803f36f5143139dfb
BLAKE2b-256 187bbdc2ac869581ab465741811beed41d4f45ddfe7bd5f268a0618efc5fcf5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 2d6a571d25e5337eb815112650a8f3b36de9944316f9ba8aa58e4f91e427a41f
MD5 6e0aecb4e5e2502283046ca5f9b30ed3
BLAKE2b-256 e3d7b482404febbf1331057dc30c9058705561a86f71d31e78aaf17a856a31ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dee8df9990d78d27ed94cc5ed26d0d95bf631a49e88bfc045e6c2e507d5e3735
MD5 49ca48e8b85d3bdeb49a6fa383d39ba5
BLAKE2b-256 7584ab795ec013c8fcac63cd88ee8cd4c84255e9e7e6911c1b13e878ce30cf9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9268cbca9177dc9d69bf365b7d8195db32f3c12e0f6c22db2072703e019700d9
MD5 9aa0bc564454d30ad532c0de8fe2d012
BLAKE2b-256 fb8e64bea1a9be3c95c7902da5bd651eef037f92508f52e52d38a10133707269

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0b219d5af5877a2ea30c18832a152e8bc42e104aaedda22f30daefc169e3c3c5
MD5 a285a8b7a702b723579012a2a4c37dfa
BLAKE2b-256 5ed550ad66c53348298e14e5a43d0b0a98adfa2ce0ef9589cc654c5004f23fc5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6068a3efa80cd05e2fba6fa1554a25119de5c759db0eaffda26ff5880a8c81b1
MD5 eda8b3030bfbf2bdd9355e784611d738
BLAKE2b-256 70e48227a196592295483ea99e3b157f252f3c6f98eca4ff483f9c04cb54b370

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9538511a97bf13ed7e92fb53cf5d8474c278d836e4477a7fee4c1e110c4e4c71
MD5 698cfb711ec67bcc7e400b84254a43f1
BLAKE2b-256 295efdd3f72330be7a4573fdaa7f535dcb80f16e6d408f2d6d90aa86457d6050

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp313-cp313t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c73593739344f235f0deb13d07e983c46d0674aaade0ece756af7f2abedd0cfa
MD5 ff13a890e824041de68917439e96f825
BLAKE2b-256 ebec304052fde2826085322fa18db9b33dd75693f96eb5863ae9805531ffb039

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 9dc27f9fed9b71daacae9f07dd598c9125a26629e2340168160c05a8fdcce921
MD5 8aee3e3949a110711148388ff7066e04
BLAKE2b-256 382a3747292d5519a88b258520d2402bb9974ea9a8adfca63cc5dc8b3354bce9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 e3d58c692a8e1a721a9be10156af1884088d3baa41e32f6e07075df8064cef32
MD5 0741b36767998475a8dac7a27e89bc57
BLAKE2b-256 d5779e6297b8e88107b142f5e49c9e25c9622367912139f6bbe9831d0b633ab3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c6beca393b1a618edcd9a52e2a3b85c07e6e5e0fdd9edd6e185b86d81cc53d82
MD5 bd92a3a62c5db806b1c83ad2e3748cbf
BLAKE2b-256 1101175241d383d1254963037275f5a0d57bc7a055c85318f958e55ac0767cc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 35cf45b680ef8d443b6f284a8d6fe64478fba9775d19d120937a242213c95610
MD5 7fc449276d1288b3add3c35ccae81f58
BLAKE2b-256 d4bef8d52b14bd8bd54c99f97ac18c501ced3108848bdb068500e68f24ca7b3a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2d22ad0d5055dce6a2a886352623f79399495bb35eef4da67f21d178d8f2494f
MD5 e772b874a78aed331e5bad6cf30035f5
BLAKE2b-256 dbc2315447fa2effc82a0b35478d2182146d0a42f6078de163d9780b9feec4e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f1d2b42af21afbfd13ea6c075bd53dba58474a761715a4f695c9187351d50bc3
MD5 a239532574692ef28b5f2fbaf1ae4543
BLAKE2b-256 d6d5dcbf1ab682770f28caab30aca13da04cb4c131a5822c9fe0f1f6f0a35808

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f2b0c2794cfc29656d3b46704490bb303af8673efa9f1ba0302eb779db74208f
MD5 27358d8256591634042027243ad3e10e
BLAKE2b-256 bacb34eb07443c1aa41b766eecb7bd90b1749cd56a12e49ecd5695ec9de40328

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.46.10-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a5b193c74659d8c3a4395dd31143dac7e78f39348d71c28288058e243e4dc255
MD5 cdcd30d75c054c8866028dacfefad4b1
BLAKE2b-256 646c653e4ac266f679f8b35557bb5ef021f32debf865fc3dff3bb25b84ca1c84

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.46.10-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.10-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 8940488ba535add4e5bf31dcb8193f4374aef87087178684fd03a7387ddb7cc3
MD5 6fcf4fd4494eb9f280a82709cafab3ab
BLAKE2b-256 15f73027e25bb449c12ff9dbde4a66b3e85663ca55d82609a0caa5e40da3a4d5

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