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.

Playground

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

Installation

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

pip install jsonschema-rs

Usage

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

import jsonschema_rs

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

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

import jsonschema_rs

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

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

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

To implement a custom format validator:

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

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


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

Custom Keywords

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

import jsonschema_rs

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

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


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

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

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

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

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

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] is shorter than 8 characters

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

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

Performance

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

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

For detailed benchmarks, see our full performance comparison.

Python support

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

Pre-built wheels are available for:

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

Troubleshooting

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

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

Acknowledgements

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

Support

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

Sponsorship

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

Contributing

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

See CONTRIBUTING.md for more details.

License

Licensed under MIT License.

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.49.4.tar.gz (2.4 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.49.4-pp311-pypy311_pp73-win_amd64.whl (5.2 MB view details)

Uploaded PyPyWindows x86-64

jsonschema_rs-0.49.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.49.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

jsonschema_rs-0.49.4-cp315-cp315t-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.15tWindows x86-64

jsonschema_rs-0.49.4-cp315-cp315t-musllinux_1_2_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.49.4-cp315-cp315t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.49.4-cp315-cp315t-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.4-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.49.4-cp315-cp315t-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

jsonschema_rs-0.49.4-cp315-cp315t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

jsonschema_rs-0.49.4-cp314-cp314t-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.49.4-cp314-cp314t-musllinux_1_2_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.49.4-cp314-cp314t-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.49.4-cp314-cp314t-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.49.4-cp314-cp314t-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.49.4-cp314-cp314t-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

jsonschema_rs-0.49.4-cp310-abi3-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

jsonschema_rs-0.49.4-cp310-abi3-win32.whl (4.4 MB view details)

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.49.4-cp310-abi3-musllinux_1_2_x86_64.whl (5.5 MB view details)

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

jsonschema_rs-0.49.4-cp310-abi3-musllinux_1_2_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

jsonschema_rs-0.49.4-cp310-abi3-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

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

jsonschema_rs-0.49.4-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (5.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.49.4-cp310-abi3-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

jsonschema_rs-0.49.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (9.8 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.49.4.tar.gz.

File metadata

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

File hashes

Hashes for jsonschema_rs-0.49.4.tar.gz
Algorithm Hash digest
SHA256 f44ad46724cfdee3afe482bc1a234a557a54cbfd8433b9b93dec97a6f0471d73
MD5 32f0153057fc93b9c0148b0a8f06c241
BLAKE2b-256 91997207408cabcae7c9451616345e35509e670a31c93dfa8d3fda27c571ff32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 153933692230533c78c8bd5cc4e2849b3b8f6dcdb2aeacdd5e94b9eb620126f9
MD5 8c3e29faeecd72f8a45def4e70e78ac4
BLAKE2b-256 73dad655280a30f22dc2d32e9dc13fe55c1e2f7b3be2694cd962ef6263dd14a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a3ed64a8e022bf20b958b0b02f8feb03bef0f312322e4d93b5a5f9c2ed888dc6
MD5 4ce07e92056726c0bde38a90850f51a3
BLAKE2b-256 50470059ed0d88f903a49dba0c822b0f8e59bb3b87440341cc5f064901a4785b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c778c2757928155b11d5ff23cb308437df10d0652a784f35ba0e2ad59bb33f90
MD5 6bc9d4440357b977c463176151fa0a33
BLAKE2b-256 8342e0c3cca786e7aeb77ae905508f5347ec72c199c370a40bf452429fa9dcbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a611002b4c3585323e376f5539d743323d6523788caf0517462ec781fc43bcb0
MD5 658bf87e540c9bd253b8dea943f82e5b
BLAKE2b-256 68f5a4400a87d2803c8feac5c18e8ea6398869b886d96c11c78a36f25a69f510

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 2166eb0cde228f53bf3be32a79e854cd9a90b7f847b1eaad84d9f6488592f630
MD5 2323fa89e45a579e45ac02019339d9e7
BLAKE2b-256 b416e2b57a4d05ef96d09e062dcc352c14469f2b65530432d28354a7f2bbc9e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7c0822e6e4be99fd95d6dc053da9c2205a96983c9fd3cb3315e0f5a917574482
MD5 0e41b9c22267bd87703d22251c3e1e8e
BLAKE2b-256 bf1b85ba4111f160f29cba52104fd26e2386ca07d1c226c8679cc72814679cbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 df11dee3c00463893dfffdf173fdf32e4086ef0546992876b73d71e819d7b4c4
MD5 8c51ef1646a4ff5eba13790918f4ce33
BLAKE2b-256 dfb820cd6120ceec6b520fb593f8204f5b5f9a5549b9ddde69a8fb82e81684ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 701bda864bc7af55000b79509cd025fea1f35ea4cbbee4118cb1d058db54dd70
MD5 40c64531ede978c842bfbc05f57231ae
BLAKE2b-256 0739c3d4ad5d9d0b2a8e25ac2a3ca0755ee7e5127edcdbf85f70f50ca78537a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 444c4b91eddc965132f138c95815ccdb125b27c412dac2b60f585f83bd34caf0
MD5 b16a50a54486cbcfe2cdd1e926d6b376
BLAKE2b-256 d20fc267b376d48e86626e6757a607ff86ef8fc99c784d1e10f8bd3118557f91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9155a073140bd01cb784eaa5584f0490770ef10efebeddd8d1818a43a324c0b
MD5 fd18c52a238ed7f8ae94063f6e11834a
BLAKE2b-256 d6feb03882d078f277049d4c33ae9f14e82cd609c819387d520c52acbd0784fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f9b9c6409c12bfabd3315ff50634f8abd625f83b9d43a81aba2dac7753a71408
MD5 bf7f3b18b943a692f79487ca9189e666
BLAKE2b-256 814e7331ea068481772914fdd711103998ca118b465183f9f4611a21d8503069

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 ba6ca13c460ae1fc8346be271eb1cf46ccae6fc6c8b7005c7db7dead967c60fc
MD5 f88c742119a540d716597c5719e87082
BLAKE2b-256 0f9a084e28b81ab86a55f702eec5d70b06cae5d4d81b8d3a40364d59ad3626a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ad8a38bdb58c9499d7593e71b2b7d8cf9abcfe1bd8fb08128fc9845835f12c20
MD5 4958a3724c870fc6196787450f622e09
BLAKE2b-256 4f9b1fac67cec9dd60f0ea64a08ad815eec4bbae40def6ae6284abfc3c30f653

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 834f303a585537a650b028611f1c5439d7b77e415a5d2b679e3a8f3dea2ed2c1
MD5 ff3f3bc3dffefb193aa3d93d28a553c8
BLAKE2b-256 d14c15b10536ce153d49d53628c8405a5a0c5078e7fe8cc69e7dc11adbce69c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6686e224190e5bf676071752fd2798d2f17fe2bcc63872e186c71b31a20c22a5
MD5 1f391f7b83b61addc2d019b8fafb4052
BLAKE2b-256 7ca541ec87cd7508368f6cbc244f0dd286214a3464ab95f90c7fd49fef33516c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 760d5c53bda5b22d35dcdee6fa1cfbde88d9b29d1987d84f4d8a061b26fbafa5
MD5 4ca8b960e5c2ce4f01acaeef92c5334c
BLAKE2b-256 e22a5d79d5f575052fe934a4b8b8a907d7eb62d4858eed462d0152f3acf9b1c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 038b3c0bee8c8499df18bfb15026d48f4518be3f5e9953058d8018d405608cd8
MD5 ed3c1e0b125b8c2469e0d9d638c8821a
BLAKE2b-256 281a72ce7f63d19b620457fc30a2ff4e24edbbfe31b50a1ff7d972b0f329f7f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3e87c51fc29901b39a67e28e7309fecd51913c28b0efb38fea5a0a5762182e5c
MD5 8ca725e3f19e5c1a9ec19c6537af6807
BLAKE2b-256 baf0b0bd117e0a9f4c29ded710d0c6991b0d93806677696d0320e240dad2376c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ed42111e192dedde65655f59f590d8ce126bc0d246bb9ce2e0487652aaeab28c
MD5 0f81ff8d659503eae0f266bcfccb8504
BLAKE2b-256 282fa2a9602ce133551e88a3ceb282b347d180a32d01742cd1a880a3fa9c49b1

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 8a8d279bf9890ea0939eeafae0ef1200af70bb3ced70c1988aeebc9ea2ca8645
MD5 0fa5327957f68c312721fa8ef59111ff
BLAKE2b-256 4e5383cb45281681effa22c607053a2577535a2de3d88b939e8f5dc6bec230df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cc58bcc561976a2c7c5f735468848008a5280dd1347823faf121d18879b4bfa5
MD5 134d8c691cce9380f893f29201ff88dd
BLAKE2b-256 a6677ac4092c89e9fb90e5a4bd7249e0c2b79edc84fe83764b144a11893829fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a4a4063aad4f180f3eedb05d42692a1d0b970eedd7b68e7042b20811971c141f
MD5 07916b13b7149bbf72819b2d80e6dc9b
BLAKE2b-256 b3990ee58b3739cd1f581cc3db1b8a81303c028e606ffc25d5579b5287d2080b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b8d5f587f1f543b8b49c0a63c39eb3cd5bbc31bf94ec66963d222d7631614f41
MD5 3761485244df02254d7468b5a1a33c0f
BLAKE2b-256 1d1841dab93d7995281f0405b956a83380b2be312eba8eecd909667b366ce9dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dccb3ec16a8a9e14867b4f97e379a1689b6edde118b8a9f0639cf4076ed094c1
MD5 03c5e2659e42dd59e9999a8c487fe5bd
BLAKE2b-256 3f922773e4718f2a16d722a911bf90bcfe81cdb722b3d753b9898ea78a3a966e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5bb71ce9b1bfab08ea19eaf675d19134073113d76f12be11b187cd8b443fca37
MD5 0ef722bac966c0aeab5bad42ae34037a
BLAKE2b-256 94238e8b10ba97c476d1561ae1798a8a83f61d7f65a2c51bfdc3e62f141a1221

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.4-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 60b46f25bef61f5e97dedae64c8167324575dd76efc79becc8645c2c502dd7a3
MD5 a70d0b5d84fc3a5b14095760e728bbb7
BLAKE2b-256 1dc317be273dbfbc576481fa5f71f530444f25d1f59fec435a3bd05b5258bc20

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.49.4-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.49.4-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 a5501ad2e30a9543bd84b00fd9e45f8971432551340eb9567e6b3af9d2639cfd
MD5 f02068057adb99da26107457f062a89b
BLAKE2b-256 c0adea54ead3f7b78be65cb5bb512f11495326f1748de8d5c3be22c07da218ba

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