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

Uploaded PyPyWindows x86-64

jsonschema_rs-0.49.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (4.7 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.49.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

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

Uploaded CPython 3.15tWindows x86-64

jsonschema_rs-0.49.1-cp315-cp315t-musllinux_1_2_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.49.1-cp315-cp315t-musllinux_1_2_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.49.1-cp315-cp315t-manylinux_2_28_aarch64.whl (4.7 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.49.1-cp315-cp315t-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

jsonschema_rs-0.49.1-cp315-cp315t-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

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

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.49.1-cp314-cp314t-musllinux_1_2_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.49.1-cp314-cp314t-musllinux_1_2_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.49.1-cp314-cp314t-manylinux_2_28_aarch64.whl (4.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.49.1-cp314-cp314t-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.49.1-cp314-cp314t-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

jsonschema_rs-0.49.1-cp310-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.10+Windows x86-64

jsonschema_rs-0.49.1-cp310-abi3-win32.whl (4.3 MB view details)

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.49.1-cp310-abi3-musllinux_1_2_x86_64.whl (5.3 MB view details)

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

jsonschema_rs-0.49.1-cp310-abi3-musllinux_1_2_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

jsonschema_rs-0.49.1-cp310-abi3-manylinux_2_28_aarch64.whl (4.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB view details)

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

jsonschema_rs-0.49.1-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (4.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.49.1-cp310-abi3-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

jsonschema_rs-0.49.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (9.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.49.1.tar.gz.

File metadata

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

File hashes

Hashes for jsonschema_rs-0.49.1.tar.gz
Algorithm Hash digest
SHA256 4a2c0622458cf523f0736b5051c0090f9742fae2be4f59e3a146657db489a293
MD5 77932ae4335e20582ed76b52dfca0f67
BLAKE2b-256 c0af1e4b8b84b052ce21df613819aac76e6c7f18050618da34bf02361f627fa4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 283a319c87ba948db89285ff4826e427772778482fa50ae813624110941ffb66
MD5 66b6ba89b12e71eac0a443b9931e5925
BLAKE2b-256 dd1b3b5027b1f74e007cd996e5005b8b5f3e2862c413eca497a90c460ac90eec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3ee847e24a67f580bd6e911b6c72e61e81541fcae7f773856a5319835f9c44d8
MD5 4791a0c1d9b7c561069eed9787760ae5
BLAKE2b-256 a4015793ac490c07e6792d89434ee6b8c0d08c3c674ca8f11f45a8624fc0b8d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0ab5683ec6ce8e13230cc0a843808ddd89b8a8b8e60a799a494ad3eebd4a1f40
MD5 12faf85551297d975538395b71b81071
BLAKE2b-256 e3bbe504daaaa4b85199cae2f87675450cd8d32426d372282ef16ada08fc6d34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d90e1aa2ff575ae740455103b99739dba8391b709a2d97946bfbc61231296339
MD5 dc9bf8e52d10fdce7a4869e967726b19
BLAKE2b-256 7fc1a92325955e4f3abffc5a1a7ef2e517ce090140fdc91a4d64e0f45c623403

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 742d4cd989c6a48c10364fa26cc779f9838c80f3d7df1c7ecc9226c89d24c8c9
MD5 c4ebaf0cdbff9cb3c79c8bed026dd210
BLAKE2b-256 157a19376d209e35ea978cec7d23ed11757752c5a784f6c377a9314830f4a58d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e22616aa54c21146f733a87ee31cec8466d9d4b9d445054890fd102d91068772
MD5 dd6d184cb1fe00ddfb6599ee5d0fa5eb
BLAKE2b-256 0503fd988006d80cc4e979179c42171dfb6d2cb555acf41db196a90803baa040

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 14873b6057799badbda873de8eb472ce041e0a6beef8f99008d93611af05d20b
MD5 dd759d821ec188bcd4091958781ea37a
BLAKE2b-256 457690c8294bb6787951041b27e9f12c0e259b6774452afd134bc91dfedf64fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1dbaba9375b7b4b9fb5a26a6f77800331d93f7fe804c12d480567baf960ccafb
MD5 30be7050000565fb00bc917f22c14d4e
BLAKE2b-256 900763e37755c45fdf6a84d116535857854c1f6a3343ebef20cd3dbe2a6aac8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0905f3f708d8fa7d61f7e2045b56a240ab19ebfa07ef5c909a33157ad0a31108
MD5 c74770242227f7c14a88ea98639b5124
BLAKE2b-256 0d0f1887a46dd27b8e9ac058d95b1fc84e8f56cf090022c17ee8d000a9301bca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e2cf516421e365c388164543b332bb89baeb0f9c9a44b1e06cd7f550c4bc832
MD5 57223a68764b53a5e805aabcbac9a461
BLAKE2b-256 c75f44e6516d966b1bd3bf93c3e93df5fac2b664c62e83c32dc4fb4599aa2008

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d6206ec125e70c61d233250c9b4af49b5f9492ed2ac4c0672e32e771a602f5b3
MD5 8969d5f2b6fecd0a7efbfe89b64a5af0
BLAKE2b-256 63a1e2b3d92ee2b73d250010ad5437becf03b7771e2452de70bf7799867373f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 4237946a71dcd0a5628339af034499c69f8e4d7c6b0948a45a3c140065d9d9fb
MD5 1c4491911d013b085dee20dc451cbd49
BLAKE2b-256 f50d824fd9fc6318f9ff4082d3f74a1b28604c126d915c5c84085ff83b2ef311

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bf3971d247f1cadf85c28b97334947f23df60e097fd3f7feb0828f3b1edbe495
MD5 edef59c026bdaaa2fb2b8da0903e4c4a
BLAKE2b-256 01fc52afdbcb272c41bd8e99100534ae528a39d69615e107f3deb0b86dca576c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 597431c4f2a339eb201b0ac453238a87f1dbef86bd396bdfebbd208f6ecbe785
MD5 d3f0b37160b2168fddfabda2067a8979
BLAKE2b-256 05966721e8885e2eed358f04237546274877fa80d5b297de729564d158c9e4bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b1ab16f1f557a4c792dedde71493dd4717913887eb86c0e74cdb6ba0126903de
MD5 410dba47cbe9c7425a62fe287f2b7ea2
BLAKE2b-256 64f37379d45cb4983b4aed24207339a1f336018e76f2c1a60d3f2a0a2f244790

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a5b70c0e4ef8562fd42bef7d0f03b3a12a0b4729b1d8e7a47e8ea9df4592e1a1
MD5 c228e4bef0dde3fe9ee4b13ce850ad64
BLAKE2b-256 5e3234ccd48347a258df8e999da723e81bfedcc45e145357ba8b2557cc86cfac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b3f90ea10bcb505972d2a2964c2d8c1c31f90d1f42fc8f44f794f2f0f1178fc
MD5 fe408531891ee4c508ec55d1c5656a9d
BLAKE2b-256 530587d6f696d0b09619779b341b82fdf4afcb5ccabe857fe7436cf38ee82042

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a9af7f507d43722bdc7bf8d3aac529edc7bb762f7a680849f5bc0dc4dc0ac4d4
MD5 6080393421dd02dc01769941c9981948
BLAKE2b-256 0e9d0d1deeb4e0ffe7ecc18c600c8314294f698bb65c6a71ac8ffdb3be480851

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3bcf1f5c431381718453dfaa82335baf3a836f64e6879e6093f2342865379127
MD5 d2beab2da3d8d842a50dc6ba76fefba0
BLAKE2b-256 dc5cb7395dc91b9f7dcd8c1f3788ffa3a4e5a222e7652a75c3544bc785ca4e1c

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 430dbcabd278f7cdc111211c54146c810377b094d8ca5c15f8a8331f585709c5
MD5 9b5e494f25733a5f6cbad37c5d6984fa
BLAKE2b-256 9229a2df4bebf60a5dcc196f9ca1a13d5c06ac6fc001e8c5d91408394b16fa84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a94e1fc2d60e4fa6f08a6fef40334c331dd4436bd00f7ad711ede01ba2b61687
MD5 4ce803fbb8272742954d013072720f27
BLAKE2b-256 bef493e77571ba3ce3e7f83f16a3eade0d7efc698be3f03ebac14023912d58a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d64e48c78d8c35d72fa5c165abc07ea75d97b46efdc96063ba1b7d004ea18d1f
MD5 4abaa4f117980fbf4ab281bb2493e75d
BLAKE2b-256 5a5c53ece6aa49535c5de06775bbef03985e75a6ee0b8d0ac0b27411454a17c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b5e57be9b3af711c4c2658d6d46cb04c14e24a86fce43064adc671d594cd03c5
MD5 0a5eb1175f0f03a7233138280cf53728
BLAKE2b-256 c279e7665931a01d367756e3568a747a15fe429aed28a45499bbadd78375c03b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d4041061eac9735f3a0607167e837232999f090a5a959e94913cf43916866c4
MD5 a7e267172f5d48bb42b55c5844b49d2e
BLAKE2b-256 77dbde9fce27c66aeb25615ab0337f1f32895ae24bd08fb03ff609d7b2916045

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7e72bfcbbf7f7e23e88cd3d3ae7c7b8261ba1257aba0da7598e042513ab4476f
MD5 9f706ad08284d35434918806a1144e39
BLAKE2b-256 614f255cbb18fc8ff382cfc9f055ddd2bf665796508739cd5ba50bf512194d13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a40f10a4083219f0677da583428df474c2a1c9e255f36c96ef0f83a0f111941
MD5 2e619f920aaa43a172e58ca2eee76485
BLAKE2b-256 108d1116c5b32f44b455ec3a6097b2c82fe34bb325429b1d042f666ab248610f

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.49.1-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.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 fdcc56e6ba2aa424391c22a1f10c05764063972caa17c92f3ccd6f505a9ade64
MD5 1f086f2e592dcd0929b45eb4e1d277bd
BLAKE2b-256 25304f612785064fc02cf7365306c6d37da329eda66becee4c19d3d8439ac429

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