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

Uploaded PyPyWindows x86-64

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

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.0-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.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

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

Uploaded CPython 3.15tWindows x86-64

jsonschema_rs-0.49.0-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.0-cp315-cp315t-musllinux_1_2_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.0-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.0-cp315-cp315t-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.49.0-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.0-cp314-cp314t-musllinux_1_2_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.49.0-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.0-cp314-cp314t-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.49.0-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.0-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.0-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.0-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.0-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.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: jsonschema_rs-0.49.0.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.0.tar.gz
Algorithm Hash digest
SHA256 f2c31c4e60b6cdec91b0002f44be773fad567d5ce43b420efb3d3c9493a7a36c
MD5 cf5f58c4a7ff56e0fcc2dc872a7921e7
BLAKE2b-256 0f8a46132b792372fca6c618f2300c7af82aa4123fe137c1d0076a8dd937aa6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 b514e26a75eee022b516a0be22b95057644bac0c2da3101cad21fab2486e58ce
MD5 81b5f3c44d56c99bf76bedffaa279533
BLAKE2b-256 280529eb905d2543fbd1d9f701ebbc42bc3c4a76240f4ede06540c6cd474dc66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 de8b0c4aabb673a72402462d8094e892c341f24ee11ec311f9e4e3a87681f3ec
MD5 dd3afaefbd0d323b07ef14c192aad384
BLAKE2b-256 e6d811304a4944229249c5c8667cd9d3dcc219a9392fa9b074d749c2be068e24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f4790e8c69ddab4a5debf8cae9775dc305e8f4d97c2c188bdfa2e287cf399f5
MD5 a7590047f28b559d54af6bf4a67e0cfa
BLAKE2b-256 b45131888761f0d94055385aef792f410cc2fc5563ac7300399d192f1472a70b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 92942023c0258c02696092a86359170805b99d996b4f0ecc253325febe634465
MD5 b1b513472103518ea0a09322df9d76c3
BLAKE2b-256 fe245e140d4d945cd69ffc3159777f00cd35b3fac1bb38fb3e14a01d6ce72ed8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 762b44dce7acb4b282985f37eaea5c56cb96fe3db5b37d6042ec613b6476de04
MD5 3a25cb3e20c8f5c6d11d5d353494a0bd
BLAKE2b-256 07847095b32811b8218b1b9233727b71655a25c8dc3d9f3f7f849584bb459bed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 85ed3a9341e15a17eca9304d989200f0f31977a32ce193f280437dd7004775f5
MD5 9261383297fc8566d4a852e75c9d85bb
BLAKE2b-256 6042a6441952eb0fdec3cf55ff2546de37d543e4abb966d1c93e0feabe1da91b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a54323b504e787cfa3b78c4f978f8d17e4829351c033cb636ab1d9a044994a50
MD5 25f61c8890ce70aff3f371b541cd748e
BLAKE2b-256 96d83a5fdbec6c214b9f3566c26f51205c25fc7dda0ab0f20150dd44087331ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3a953d8c5a9f4862c43c4e9472920ac3b9c705415d0442ef7d4effd9adfac5e5
MD5 4c8fc3c3fbd228eb1aed752c74e0268c
BLAKE2b-256 d5e06d1650935efb0e031463f87e1c113391e22a33d762f41f382fe15d8aebaa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1aabf25f06ecc1a081d8c98b93fdcdd7cca35a299e36f3c263f53c98b5a281d9
MD5 229750e96d3c621341ce24816d1d7b2b
BLAKE2b-256 9f6c6073feaa6ce6c49dbdb1cf93a1a87b0df2bb7fd77d6e627f0dd36bef595e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 486823ae8c4477f0c48035513d5fc14ec50107429ff8965f79497be43ccfe741
MD5 2566b4c5b04d6f6f2bd30364e77871ba
BLAKE2b-256 e60ec66abdac09a567ea237463835edcd55529e84a7eac30b4d5a6010f6809b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 eff1782fad6a290661564a9fee75ca1263a0cad138d765bc1b3cd5274d822620
MD5 886dc5b9eafda20a1cdce4b58e6c9d00
BLAKE2b-256 61e53841f9cbc0e2f6fd6023ebfa90830478f2196ae3d520c2bc5915250e3bdd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 553e7c23511a6706e32bcb21e2d100432f1587dd7b680de68358d020f92c2bbf
MD5 013fcf8477c2de2cbb93f15ab8d857da
BLAKE2b-256 c4f4bfad3742bcb30621361a60d492d12c1a5c0be2df478872a81d7ac7751012

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 70dbc0074d594e9a1dfa6b57fcb25ff0a13ade1032d44b9fa0dc6d8ad26c00af
MD5 a8246708366c82d636877447ca76e753
BLAKE2b-256 7d9f8cbc190a58017fd2ed368aecd452f560890e4ebf03b65eedeb0320dc382e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3e6a54d9531d1573986b0692a91de3be6748af919f982693561c595138aaa492
MD5 f44abf2aaa84de833dc4ae7770b52c65
BLAKE2b-256 a813d9eae72a5a8f656b1d3fb6d20b28f6a85928aff4b921f9c45ce1f1693f3c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 09debd0f560dc8dad6b92b50e3a57086cb8224b3313bba398118d99407e35dda
MD5 37e4ca2dfe7d0ddb4a8538649fd3825a
BLAKE2b-256 4665c798c4614b12a70c76d0e3b106fc7c37f8950974277dfb75505b8b28fdd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3d4e3e5c13dc3d4b37b116480711788e50feb5d9bf91b632aa501708e4cdb477
MD5 90db072a1bbaf0e1113ab8ba0754eb3c
BLAKE2b-256 055dc42ccc4856928ffc5d0817957735c8fecfae20f444060c410e5824ee3f13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 521bf498dac37dda5a1e48b6035c853f9f37690d67f97ff5023177afc894e2f2
MD5 69c1973dda7390108a14bd5066e87864
BLAKE2b-256 17e5912a17dc9716c8a24dc922e11e09b24141066dccb70a075ec25157daa5b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 72c79f17ed7f70aab1bcedda56a5d50c136789bd470a9a69339256cb8811536f
MD5 df7a0c331edc85746acd31e38ecb6ce8
BLAKE2b-256 81f9974347262f55f8b1a08593f84a46e2b1afbf67125bc0e1e9ee5ddc070090

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 4437f883ede2af9880605ccfd1553df129d5986d157ee830eac9b8f7cfdaa76e
MD5 45efb34c2c995bcca40ba82612e7c7a7
BLAKE2b-256 5b206dee81d9f15905a1a0dd68bfdff6948505bbaf130d278468dc4b15eb6a86

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jsonschema_rs-0.49.0-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.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 60407c1f937ef6ac5114e155c7ff72b8b9ccd38d09a07634fa371f8da096a8a0
MD5 3f21b2415c606f4fcdf52d6847f22209
BLAKE2b-256 1cb79471d7c7a31acaf3e3ce78877324a453ff1bbb5ef86461a0b411c2886357

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 268fe3ff9e406a46d03281f2e154b523a4daf1e960bc9ff11ea08971ca376f16
MD5 7cc469f7afdd893618b9485a673c2c13
BLAKE2b-256 c3f2554bfbcba98edb7d3d1174d137c061360daf830e99e363226ccd6530d59e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 47819d87d8220a898f858129b8db70526096614f44a1fa9a08a343398c762c9a
MD5 16e12cf64375878b51365524c5daf705
BLAKE2b-256 193b73a7a3e54b208b3563c388d97ab0f869b0502190f9f538e780f1185d5d04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 886a22fe2a1b2ebbdaed534fabc3cdb8921b6cb7d7d03138422f11d4800b5177
MD5 64ee1877d6c8744698c84d92db3353d7
BLAKE2b-256 447eaeb820e2101a0dd56b77c850a4feac2fe4fc8da94d75d1748c25a7e239eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2895ffd3ac256ccd907ee869ce7c057a88a2d9c70b11e1aa79ba8d37b2834f4d
MD5 680f932c28c1348ce22106d7c190a904
BLAKE2b-256 a506f3e30a22ddc5487d50fdbe316beeb101ba350b0d02da60b07e0b3e4a0210

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 db53df948fc5c6d6eb2479120c895587134870b05b51ba2bb3a53ed5536c2fde
MD5 9870dc1693abf0662a866d7470af1d23
BLAKE2b-256 3aea678dc5fd83aa26341c085b83f7200df96259866dc2ba6859c809688c8013

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 be18896baa58b5d15b93bd01732157e69a2d7bd99279542343c1783392f1511c
MD5 e7c8b6d57f05232809d8633a8d4bbe2a
BLAKE2b-256 02a52849386dd5603699996c62dd07e4bd53e7d3c056f799343ed1bf8abc9ffc

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.49.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for jsonschema_rs-0.49.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 f50967627dc6ec44bfe3bc39ea68974dbcc7baf9c8609f0b07109e8cde4f3f2a
MD5 44ad884c6f1ddb184fae41794afd9948
BLAKE2b-256 40c3b4323ed0bc4f2770480e39286cf1536baf80dc886fea270c18130e8130a0

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