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.48.0.tar.gz (2.2 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.48.0-pp311-pypy311_pp73-win_amd64.whl (4.2 MB view details)

Uploaded PyPyWindows x86-64

jsonschema_rs-0.48.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (3.9 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.48.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.48.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (4.2 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

jsonschema_rs-0.48.0-cp315-cp315t-win_amd64.whl (4.2 MB view details)

Uploaded CPython 3.15tWindows x86-64

jsonschema_rs-0.48.0-cp315-cp315t-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.48.0-cp315-cp315t-musllinux_1_2_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.48.0-cp315-cp315t-manylinux_2_28_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.48.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.48.0-cp315-cp315t-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

jsonschema_rs-0.48.0-cp315-cp315t-macosx_10_12_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

jsonschema_rs-0.48.0-cp314-cp314t-win_amd64.whl (4.2 MB view details)

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.48.0-cp314-cp314t-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.48.0-cp314-cp314t-musllinux_1_2_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.48.0-cp314-cp314t-manylinux_2_28_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.48.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.48.0-cp314-cp314t-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.48.0-cp314-cp314t-macosx_10_12_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

jsonschema_rs-0.48.0-cp310-abi3-win_amd64.whl (4.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

jsonschema_rs-0.48.0-cp310-abi3-win32.whl (3.5 MB view details)

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.48.0-cp310-abi3-musllinux_1_2_x86_64.whl (4.5 MB view details)

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

jsonschema_rs-0.48.0-cp310-abi3-musllinux_1_2_aarch64.whl (4.1 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

jsonschema_rs-0.48.0-cp310-abi3-manylinux_2_28_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

jsonschema_rs-0.48.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB view details)

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

jsonschema_rs-0.48.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (4.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.48.0-cp310-abi3-macosx_10_12_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

jsonschema_rs-0.48.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (8.0 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.48.0.tar.gz.

File metadata

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

File hashes

Hashes for jsonschema_rs-0.48.0.tar.gz
Algorithm Hash digest
SHA256 a2de900054e0d46a2ee32a1172261af4c27d6f9c1b6d09480dc1fc409af2a056
MD5 f47ee8c98fc54431d6f32b525531c0d9
BLAKE2b-256 9cac1b20033fb39c1fa90fd89f44d61cb5c5836840b198a479c2b56e60b56918

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 aa70afab1d4c12555af9ba713086e22499f865ff54e3c42f8407130f3fab40da
MD5 3aba1d2b4a12c1321b972edea895ed16
BLAKE2b-256 64ead3f6ec4b6c7f6c1637d8f323a2179380516d196e4276e285b8d7d029ad41

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 392e59c0279895d354d46d6cba74b558940a49933400775053988f20aab16f1b
MD5 a85610cb5516442bbf2deebea70b2e30
BLAKE2b-256 e02e1a93d56d9ff4e85033495d20b313d428ff1a9dea5267f2fc553d816657a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7945a39551afbfa14ff02246ecaac2db9c91fcde965b62c8ae080fcd56e43204
MD5 44b8693bc01692b7272bf15b1f2e000a
BLAKE2b-256 618bb4d979782f275804fc5f0d734f7527af11792308f3a1b30b3dd6e84a26ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9129da606e1c77ba64bfb3d6ae46c9690d66831c3e9948a405daf5e399729584
MD5 24786e7073891eaff619cdc4b6f042aa
BLAKE2b-256 6845cb0bc6687d60ae4e5be089b0fae15c22aeeefaeafc14f47d56df43872178

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 92e47af5f3403214ee1721283d25c12acc10dd24c5be5bbe71836810d5177d85
MD5 2f44afe4d74a40fcc78582eacfda0082
BLAKE2b-256 d95823c2b93f7b7b8cee4d5d3109113dd2ecd43d9b733b2ea10294beb33c6d2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0cce79306dec10d63b91dc2a6e4627e9a6f8ef340ba83fb39c18a3a6bc607c0c
MD5 6b2693b645e43886d4372b35ede18f2b
BLAKE2b-256 9028ac7861e076eb361363cd7575bc843a504c3d5b29c47ab616940a493dca1e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ee2c048cff8f6729f12b3bb78c590e78ad560f30e02f02953f0f7437814ecdfc
MD5 1c4f914d0132eb39386caad24b861749
BLAKE2b-256 e2bc8fa9c530a32ceb9826da21290893f5dea789d84225a7c9f464b43d3f9f18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 477725f24b6871391e487ab3b43102e4aba252bc1bbfac10e683eec8b3f1a5e9
MD5 8744a36eb16dfa4351b7babf65184a7e
BLAKE2b-256 f8e10c467b546509042f06321e2c1ec92905de252192c1d1abb5622e060a536e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d783784b022118a8a6b37905b9da823d5ef2a04aed7665ee5d5c40dbd1ac4fc0
MD5 20053e25b6bcfa177cb5bb2ffa84dc43
BLAKE2b-256 30b256d382ad11938ca0287ded87e392b809b61c40f53442fd1b996076c295c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 220972390fd572c430773efd3195ac108cf75c423e9f95aaf1d1ed097712eee8
MD5 985a43c9d07ae23b26b5222799338c01
BLAKE2b-256 7007a9bf7966287e534274887550bc34705b53bb8734f83a81d0ee0c5d7d7d0a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 03ae5f9676e48e0210c3b3842838ead6fa9fb2140520b916d797790570eb6236
MD5 18b64568218719945a502e409a084c99
BLAKE2b-256 e28ac6a7934e8a629da447ba016afc2587da786ba3253a60b4759f5c52ec3b6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 db09934c27ec456870cf3bc9077d92eb7a913b2632355dae6cfd9e2f731cda7d
MD5 2c4b0341c726dcbb3dfa3360388ff183
BLAKE2b-256 d33cdb7792999498fc1dc04326c6ac336eab4ae473eb3c19c0da61b9eed22e33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bb9f0cda8f5949e8c2f76de3499014ef36e234976c19da2daeee978eee54a29e
MD5 d79f1cba52af05912a82634245a81e24
BLAKE2b-256 b08836644db62de447b59f16e6e1447fddf00326418dabf2ed85a584baca22cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a924c3eac5a4a72415800b0a32803c864fd4aab6b26ebe8aa5e903ce20a8b798
MD5 52bb9f9ba2d8bf7e1f062ba43118fa43
BLAKE2b-256 70df84ae15fe215096d9a0c7787ea4ffbf4b668fb9519edbe7c7e635fb2eadf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f6cb53c514c6b6e260464761a14418a0fb0bb79805c711ae856688d2f6f5319d
MD5 f997a399018895b4fe88730b8dc0339f
BLAKE2b-256 354ad760b8de64d8c9e03e748c4cb025488573870a652c9337ba20ecb65df782

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 02de754736be1b19f579581f9a549464ee9817d678d2dfb8d0a70f246842aa60
MD5 43ff608872bc2df7a7cf96cb3fa2ea26
BLAKE2b-256 e6d71410c1650ec47045e6ea44e75efad90bfb36a5fc31a1a1b7eaeff06096a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 addca19f26c4e4d270c421f5ebc0c13997b4c6310cdde4846afb17df9421aba7
MD5 d50236c5fa209d8e019950c827e7d17b
BLAKE2b-256 91759a52ec6f608b0bda8d1979b855cf6809e7d4ff058b3844368430afc9dad8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6728b949edc03b570a11a2fef680c81fe3991498743e5fc0cee9399f3626ee1a
MD5 f3e4c672df4b4def6a15a96f71206db8
BLAKE2b-256 5f3be71bd062973d2bf9f4bbb7f2f7b68d429a241bc7eaa5a47136dd1425a5a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e26ad8151671150688b89d906f6eb30816b4b576b626044cb6077a1cb7167f1d
MD5 6c0e510390b19967a434facf4baaaadb
BLAKE2b-256 c98a2021a2378519714f18f2d688b4114f481c0f70e1faae3d32b5f1b326538b

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 95eea9e1c1bb96c854626c623019ec5f3fd3cf93cf641c090ab76787a4a2eb51
MD5 ced71cd590c6743725a4841821c9b14d
BLAKE2b-256 5818cd4b1b2bc4a507bf2e8047273fc27fb1e13d04bb2d05c2dcf6a5239b075e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6f03407c7ea79a8d776233f4e844a89b9307c595c7d30e482e615e0ac4ad18ce
MD5 e7c265ded303a1dd9b4368c393b90bca
BLAKE2b-256 76c7d6e3cef9076fdea668246ff3a1ad20eaa0cafb8ee2a370aba406d12d6f8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f44bb6b84328120f7414c93a2ddc2e4e9d9e6099f072b853fc96ca4d21e1c926
MD5 d09ea14415c704a5d07cafa52191e62e
BLAKE2b-256 db28ff090eacdb5ad8e339789b7f473c71c1bb707603f6b1d265ddd56d4b18ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d5b7c32dedeb21d0881fd51c85a4c7325a0ace61ca1dc71e484d953ef12529c
MD5 455525e83e36baf6be356f37f657c934
BLAKE2b-256 3fe7463d128439b964f797292f56e18aa634dcc01e1141f38ba4e1eafed12beb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7272b4406fcba2546f0dda11e249b957b8dcc3109b763c00f4c1c8b7cdfa77e4
MD5 afff810a0cf34e91766b16234b58f85e
BLAKE2b-256 f0869376d59793c7b2a633dd22160169d6c9dc73eead706a43200327a9a46ed6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e814ba0c5635ce8f3294d0a5e325630d30e5996428c0f521fc80e02d66ec2c3d
MD5 0ece34d6e01e7c3eb8705059dcabf469
BLAKE2b-256 72e4aedd000d0ba637da74e747fd99932a2b17b9809fbd1c454faba81811a01f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.48.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7a6ed977903045dd4e5f0c9c1d611f6cc6242a18845259d2a0cf6805784994da
MD5 0667d2dd1d03fd4aed4f397db3bd78ed
BLAKE2b-256 2431ab9f2e0c531f77a607fa8af63bccae06cfbcbc5512bf884edef3fe221270

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.48.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.48.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 da3162e5e08c8b58896bccc8edc0c0acb03771b434342b34ab3738fa656d7d6b
MD5 4e17ad139cb107f5ed3da9964b9dd87b
BLAKE2b-256 9606a7f96ba116ee0a147b27e96a87712ecaa227adbbf6c525d05eefbc7443b4

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