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

Uploaded PyPyWindows x86-64

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

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.3-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.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

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

Uploaded CPython 3.15tWindows x86-64

jsonschema_rs-0.49.3-cp315-cp315t-musllinux_1_2_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.3-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.3-cp315-cp315t-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

jsonschema_rs-0.49.3-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.3-cp314-cp314t-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.49.3-cp314-cp314t-musllinux_1_2_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.3-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.3-cp314-cp314t-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.49.3-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.3-cp310-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.49.3-cp310-abi3-musllinux_1_2_x86_64.whl (5.4 MB view details)

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

jsonschema_rs-0.49.3-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.3-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.3-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.3-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.49.3-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.3-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (9.7 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.3.tar.gz.

File metadata

  • Download URL: jsonschema_rs-0.49.3.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.3.tar.gz
Algorithm Hash digest
SHA256 49ca4c481ad5734b387c512be31f9747b017794aa8cecad7f6b97217d8147f3a
MD5 ffe1ff9ce7e11ff64f0e783d123e4271
BLAKE2b-256 a912b5bfd46af48f0ac4d3ba886a34583763a0d24c6fb0a6fb98742ba26f0c3c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 94b6003896de2829cc21a0a49bdd16daf898a94693b9036ff0cbd0fa2e6cf4e5
MD5 5dc2e40f399ba7e325079b6c6b39a8c7
BLAKE2b-256 675702d2c6f3d0a66dfd75b8f02ba5f585c39cce05ccfbc7b7faec0ace10e533

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a3995010980bdc0365520d3bea2f99d3b4a5d62caa31eeb2565af2b0b4c7f281
MD5 d9100a85a579b32bb949dd0d4e37615a
BLAKE2b-256 c1a199070145060bcd9deb713bace9660a50b0fa6a7fd49199d506754fb74730

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c7dcc3efd1b017d691eb80f009e184d46560cfbceb397f7665a27bc93e073c83
MD5 faf6b323835c337eb617aaf531135318
BLAKE2b-256 d9240d83a47c822175674536884e86560e24e1ccd296e6c85870abdbd307095f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e78ca43d91d04a5f32bfc36d57285761fc1edbe6ac06eb50ab2b1a5a06956e6
MD5 6cd64da9db0a24918097cde7e6a81db4
BLAKE2b-256 e178825af576edd7077a28657a76b2f6e132971dd41b4c3c2e615aaf0556f879

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 416c03a6e7b5a0d76caf43dd357ec7c1f8986b179f237807c6c996367d40e9a3
MD5 1d88536e86e1ac657971bc5befd3b31a
BLAKE2b-256 c200082b7f06a3eecd7780ad05898d00434b30fd6f467bd73cb887b9717ccf5f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 53fb4ae4ef8ba02f8a20a322e6003daf9b3272a0bac2d6266eedf5c3e240175a
MD5 7e10077d5920b8bb865ed2061e310557
BLAKE2b-256 d61295dfd6a32fd7d137968a80939466e44b7d5e850714343ee107a342a58b29

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0523399cb675147f3555cfa283b772a6f40fd8a10d00ba2cb41fff8601d2bf05
MD5 2db19e0264da5fb95a282c671ff70579
BLAKE2b-256 42a25f9b607c8732d63def2d80fb08e0513b6cf7a0b574823a58fe95711b7597

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7ddfc422297789e58c81f15f403b0c48ecf211f78f94c9d9f21771f711c8b820
MD5 f1757320dd9ab63e65e3f079808877af
BLAKE2b-256 bd010737fb7727e2eb1fee1131d60f9f3e0756008a775ea1d53489c2a458c949

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b4cf0c39aefe5d38189b6a0bd46a6e49a299733878b5e9be846ec61b95fe8fc9
MD5 8fe3ea7a3bc686b33ace177278ab64a9
BLAKE2b-256 27903fab8fb3821a8f7114fa18afc28f86f3022152afe46fb6ef0c55771fced6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 626d65d39c768afdb71ffe58325d8ce7ed9b546d93bd666ac961ea45d79b761a
MD5 0ba1680c7d77261ea7a4256b44e7933e
BLAKE2b-256 15ec0b20b47a044bb95dd42c51ead31b10058011bd686dffee6566ea524a89c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a43fa4e465ae04b1a222150d51337f29056cfb364fd64ac93fa3840a426d0db1
MD5 12f7cb4c3121379f0bef58886e43d78d
BLAKE2b-256 b737c266108b6cb7716c07d73ac261cc4d2612330e8feb5d0412cc6feb3bf3ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 e0da2116aa32fb3d4745a0d6fcff0e76a950660dbfaa16330dfe00060f62e064
MD5 82e25d147375af53b25b1ead7bea9e02
BLAKE2b-256 52f95a149f0a9ee81e9f74c86e7ce35d63ef1a591b37846d61c72906e3a131e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 983de60fd84bdcf58616bb2266919c7c657af7c38fb40aa032046a2faf4b77d3
MD5 18657f73c3641178243828e4dc83b21d
BLAKE2b-256 bcd6a29aec601caefecf46dc7eb12e9f4e5cbea97acf1b174a98e513ce03bdc7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4a0d14747265ba464fedd7e7bb7e1739eb914410369c3e70362b9ab752042623
MD5 966c062d5180f8ae19f296e4fbbdfc15
BLAKE2b-256 5b53cc171540950e0a2f405d67457579be0dfaff8808ae77008717e5b2e6ce3f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c08a62ca0f27ae83e03695618c5660d733959d59077a5380e5cdf495d8b5eaef
MD5 b4437863f6fdba21d72e7ad348cf5f18
BLAKE2b-256 db50c7eba0823bdf59465c4aaa29de34831d825a585aabaf6faba34517559aa8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2ecc0eaab8913ef7fd3b0a8549f3f88a8f4af68eb33726ff3bc6ec079e0250d
MD5 d69c4f0faa05d10972e3f9a273ea494d
BLAKE2b-256 063b589db43fe68827959b243b0c00a6d88b629825e285763741cf478fab0cca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cfab71c554c137d125a2c5ad5b50f2d7c172b9825c4de227917cea2db51d4b39
MD5 a0c0e36a8a575d8e31f57a79d5aa5b6a
BLAKE2b-256 18d97cf6a2112ab7b2f4151087bb6ef0f3bb901ee3029047c9ce1c43cbdde002

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7714bf0460070bcb7869eb0daaf3cd2cacdac13102b592fd90199fc42105815e
MD5 7e6236e35421cab3b524f2d5a859ca05
BLAKE2b-256 c4a0b893ef401fbc148e3cf0ef0e767b6887edd6bdbb65084eaa39996cbce466

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e30585c7b6a6d10b85b910adc2b23831225ee2db460f5b273d5f6c3d07f58599
MD5 5c0dc856c6c62b2be26b1a2ec4e877db
BLAKE2b-256 e359fc94fc5361c557d3aa163921c47c6dd29f4ca0b7bfbe90b7a5f34d73a2fb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jsonschema_rs-0.49.3-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.3-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 a65d46f1b9e08a913ae4afaa95d238a83ddf3d08ea93cf42f1a78c5f9912c39b
MD5 e75a5c08b7e44fb038b5132c96f6ea50
BLAKE2b-256 a5b1de59f5758a3f9ab1c4f034bdb7008a3ce5f70369d973357c5407ed9ef61f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 090e4d2d264b0049d26dc2c144be1c3030eaf0f85db91c722860ec686560db1c
MD5 24e8d9992c98b037774438a8023aca41
BLAKE2b-256 de00d9ff4b40f2ed85af50d11e964e31b78254bf4ddee471e8cd3fa8a04bae83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 171350ed5c9643e3cd2bad26cf9fb71080cf90287ade6993add9b8e555f2f8fd
MD5 7d1efe0d48fe636c1f8539e6047501d7
BLAKE2b-256 24d1b1b648d89d579e000c8f10225f531f52c3cecc728249100092585862a49b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fb0ceefe6fab5fcc6b31ab6ae21a9af01c5c5544dd72f333639f644a767c8431
MD5 37b12feb0545068b1612e5532e45cccc
BLAKE2b-256 da2c31c8180cb448b7e5bd036b239c4c27596a5ab61f04486a7dbabcb5239436

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2afddf09feba1c575163ea32694d1a92e0d8a8846b0933b3e66593486da7b856
MD5 c07279dec665f84ba8daacd38e568ffd
BLAKE2b-256 ac521cea377ad58c4f929aa1d1c4b506c4858ca73b5ffacc6b4142002dd59cfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8bcde0327be348b0cdef9652f781af2431d5d164aa960c11252cb4bf2bc510ad
MD5 2fbdad5cac95e30df2da319a71afe80c
BLAKE2b-256 92b2439a3f6265e6bff938a87e0a4f56a6a125802f1bf7f848c1d0bed2f5f435

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.3-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ba9315ce37c7b9bbf287515f2470faf26ef25c410a56893ce6ff43c1e910f736
MD5 fa1ea6d7a52a5f0ec1940a5aad1d84a9
BLAKE2b-256 53c97de9f433949bffb6b9b4cf326e8d45cf8bb3816ed17e2b8209c82613cbca

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.49.3-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.3-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 e11b0405f2ba28ac210246a1b870699a9d0066cff8433dee15970a406dca42e1
MD5 149612473c567317d86e25ced1f08f6f
BLAKE2b-256 7b254b57aee4c251ed0e00b9559aaa31c411732a42c9894c45f5185a0fb4788d

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