Skip to main content

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
  • 🧮 Experimental schema canonicalization

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)

Schema Canonicalization

Experimental: the canonicalization API may change in minor releases.

canonicalize reduces a schema to a normal form without changing the values it accepts. Schemas that accept the same values reduce to equal CanonicalSchema objects, and contradictions reduce to false:

import jsonschema_rs

canonical = jsonschema_rs.canonicalize({
    "allOf": [{"type": "integer", "minimum": 0}, {"minimum": 10, "maximum": 100}]
})
assert canonical.to_json_schema() == {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "integer", "minimum": 10, "maximum": 100,
}

# However they were written, equivalent schemas compare equal
assert canonical == jsonschema_rs.canonicalize({"type": "integer", "maximum": 100, "minimum": 10})

# A schema no value can satisfy collapses
from jsonschema_rs.canonical import Satisfiability

assert jsonschema_rs.canonicalize({"type": "integer", "minimum": 10, "maximum": 5}).satisfiability() == Satisfiability.NO

A canonical schema is the set of values it accepts, so canonical schemas combine as sets. Every emitted schema carries $schema, left out of the comments below:

positive = jsonschema_rs.canonicalize({"type": "integer", "minimum": 0})
bounded = jsonschema_rs.canonicalize({"type": "integer", "maximum": 100})

# Every value both admit
positive.intersect(bounded).to_json_schema()
# {"type": "integer", "minimum": 0, "maximum": 100}

# Every value either admits
positive.union(bounded).to_json_schema()
# {"type": "integer"}

# Every value `positive` admits and `bounded` rejects
positive.subtract(bounded).to_json_schema()
# {"type": "integer", "minimum": 101}

# Every value `positive` rejects, across the types it never admitted
positive.negate().to_json_schema()
# {"anyOf": [{"type": ["null", "boolean", "string", "array", "object"]},
#            {"type": "integer", "maximum": -1},
#            {"type": "number", "not": {"multipleOf": 1}}]}

positive.covers(bounded)        # Containment.NO - `bounded` takes negative integers, `positive` does not
positive.satisfiability()       # Satisfiability.YES

Comparing two versions of a schema

The difference answers what editing a schema did to the values it takes: it accepts exactly what the old schema took and the new one turns away, and is unsatisfiable exactly when nothing was lost.

old = jsonschema_rs.canonicalize({"type": "string"})
new = jsonschema_rs.canonicalize({"type": "string", "maxLength": 50})

# What `new` stopped accepting, as a schema
assert old.subtract(new).to_json_schema() == {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "string", "minLength": 51,
}
# Nothing is accepted that was not accepted before, so the change only narrows
assert new.subtract(old).satisfiability() == Satisfiability.NO

Compare a request schema new-against-old and a response schema old-against-new: narrowing a request turns away payloads a caller used to send, widening a response returns values a caller never agreed to read.

Satisfiability.NO on the difference proves nothing was lost. UNKNOWN proves nothing either way.

Containment, Satisfiability, Distinctness and CanonicalKind live in jsonschema_rs.canonical.

Both operands must share one setup - the same draft, format policy, regular-expression engine and definitions - or IncompatibleOperands is raised. UnsupportedOperand means an operand is a Raw pass-through, and UnsupportedResult that the canonical form does not support the result.

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.

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.50.0.tar.gz (2.6 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.50.0-pp311-pypy311_pp73-win_amd64.whl (5.4 MB view details)

Uploaded PyPyWindows x86-64

jsonschema_rs-0.50.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.50.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.50.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

jsonschema_rs-0.50.0-cp315-cp315t-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.15tWindows x86-64

jsonschema_rs-0.50.0-cp315-cp315t-musllinux_1_2_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.50.0-cp315-cp315t-musllinux_1_2_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.15tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.50.0-cp315-cp315t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.50.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.50.0-cp315-cp315t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

jsonschema_rs-0.50.0-cp315-cp315t-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.15tmacOS 10.12+ x86-64

jsonschema_rs-0.50.0-cp314-cp314t-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.14tWindows x86-64

jsonschema_rs-0.50.0-cp314-cp314t-musllinux_1_2_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

jsonschema_rs-0.50.0-cp314-cp314t-musllinux_1_2_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

jsonschema_rs-0.50.0-cp314-cp314t-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

jsonschema_rs-0.50.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

jsonschema_rs-0.50.0-cp314-cp314t-macosx_11_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jsonschema_rs-0.50.0-cp314-cp314t-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

jsonschema_rs-0.50.0-cp310-abi3-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.10+Windows x86-64

jsonschema_rs-0.50.0-cp310-abi3-win32.whl (4.6 MB view details)

Uploaded CPython 3.10+Windows x86

jsonschema_rs-0.50.0-cp310-abi3-musllinux_1_2_x86_64.whl (5.7 MB view details)

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

jsonschema_rs-0.50.0-cp310-abi3-musllinux_1_2_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

jsonschema_rs-0.50.0-cp310-abi3-manylinux_2_28_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

jsonschema_rs-0.50.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

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

jsonschema_rs-0.50.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (5.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ i686

jsonschema_rs-0.50.0-cp310-abi3-macosx_10_12_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

jsonschema_rs-0.50.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (10.2 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.50.0.tar.gz.

File metadata

  • Download URL: jsonschema_rs-0.50.0.tar.gz
  • Upload date:
  • Size: 2.6 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.50.0.tar.gz
Algorithm Hash digest
SHA256 35e332764f46f5250fc752ea7ac7c975117f1727c324dbff09eb3d162a42b734
MD5 a529d86a23a734b6c2dc44da3ee9c826
BLAKE2b-256 dc4c884abc9056018c2867da5769cf233813cad8273a2c882dd06aacec156d7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 a0f3353cceabd9b5a6ff6188883174b83cbd661364bc4cb4b24bddceb3dc773e
MD5 f16d6c80912e3187cb3f0a539ccd7d31
BLAKE2b-256 eb20fa5f9999d3c8da64e37f9a5873c5de73e4ff4ebb0aa7f772d6e5aa395129

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e68c6fe577e20399587592d7fb9ccfd29de11d05c236f84deff03c1ebb1c72f0
MD5 fbb36e918d0edff173ecea4f020792a9
BLAKE2b-256 ce5c3cc94c3aaf6c15c9663d335862c7e2ca057cc4cca8b4765f8da04c08e3cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8fbb75637ec3d7cb51d902243d2745258d674fbbca0a9f356d955ed12e84792
MD5 dfc8289655f0fb8db4846a1c2de96d9e
BLAKE2b-256 4293ec569b4884f486f09a278e9713f4c83e086cb5f40f5941c74b90d7d9c514

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d4f517c2d0a4b6d642549b9ceab94ff56ef8167963b607c451daad382239df5e
MD5 d9fec9a0bb220b1fae937972d1d20a90
BLAKE2b-256 1d8b31b9b155e3230d3cf545c090e8b4b58bd0e1d2cadb195787faeb966a2e1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 9e1360267ba41e5bc4c753ba731b431265e14ae47d2bdf6859774a38cddc0a6b
MD5 1611e80f419953a90b0a10de8a01527a
BLAKE2b-256 62eeebbb655af4109b0c215140b9fa30c171cf23ae6a743ee88ea37f07cfa1d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp315-cp315t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ae065ba6def64229406a57af211d0ab5fb90ce5fd96def6169da3a7a7124dbc4
MD5 0b3cf9711c59519a4f76f019b732716b
BLAKE2b-256 2c87941f1b8ddb205f90f01aa483277d8435241b37f6d1ab68f9079c24596037

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp315-cp315t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ba2e7b8c6d45d95cc86e71820a81ac01140b449faeb5276782181a1e5264e37c
MD5 5d707b7df562ff558edca448d7352d9b
BLAKE2b-256 9a86be7d16808b8a16e38f347da533b11497e1ddea9fdf6187264aad67257877

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp315-cp315t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dab31ea8bf0ab62355b3eb2fc5a01082954e733542a3b63e2289af92e3d64472
MD5 f59dd649cfa104d193031bb1bd0e91c5
BLAKE2b-256 636c3a16ae6c361b0555a8b0da62862921c24cbde85619f22eb4c738470e8671

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 799a95c0b9fb5b764e6d81364429809339942bf790a005b58c430df010f99b27
MD5 1b6a8d48461a47149a5b77a819d6c3b7
BLAKE2b-256 95c4e4262a0a5931ed095d198427219a0262ab2672885d605ab4ebd5b477cf25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 476b21521dcb54c90fe84a11eb73a88696ba8145dcabc89f3343c349c9c8ccff
MD5 c99b089c2a6a5aa3d0d321b5acb77378
BLAKE2b-256 4dc42380906eb60bde90948a70be97a7896469b3ec6a57ea3a89aa23ce810ea5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp315-cp315t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 820feaf6d6a24a15f6d31e38e1bd7a2e429f6e6fda3ea111077386d0087b444f
MD5 cf9aa44e631a60c02dd4b7c0bec701c1
BLAKE2b-256 c252910ada60387eb362beb607bad620f390f9271bc38885dd62217da38da463

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 86e61b510a766e18844ad8d3063171b4579c7019a4ddb435ccc4a16a144e1c11
MD5 2be32e07c73647d51718165e110ac93a
BLAKE2b-256 dc28c13d7aef01e0d7a1d8b5ce64d65856a5b8e114653fc768614bbfcf44943f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 daa8687efdbe6095beca6d3afc49019441636c0e06bb8bdac8256ac1c1fab418
MD5 23d845931b59d878110c7eb54cfab929
BLAKE2b-256 9f794fdabcbb0ec87d17d48a992ebdd9b07222cbc0a80eaa36e0b4b6194381e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 530b33d1ba1db16de6214281d510487d4fed9f6dd030296f3d4461454c3cfb55
MD5 28bd79d1a92588f9a9c487467f2b81bf
BLAKE2b-256 7424237ee940fc2b7bad33496c01acf397f8295871cb2b8e71d72514b9121d49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 54a321d695b9e26492a4c70640970ef2efd4b4ff9f069a8073a4f59a64e0ec2c
MD5 600801ee3c14382f1b5eb722321750ff
BLAKE2b-256 0e343f2b6d8c47b3dcc516e1a372167d49c5c4dadbc97f7899287dd4cf086727

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3e6f9180d2702cb665d5b66816659e306d46530a04252bc1fccefbf1446f55b9
MD5 60061f9deb15986758e4488168ef0503
BLAKE2b-256 a47fde8918e98c382e65223ed97aa3cad63d55b5694a21dc69f422214e72d672

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 869e9c27f23b7f10b68cea85348f67bbb6d8fb189b5961945652dfa90d576cdd
MD5 f1c469d1af2dd81bdbc33bf4f7f8d3e8
BLAKE2b-256 f68193f243d92c3461a6859df3a5a7f56f0b9c68048222d4aaf482e1751a0a9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8ab80f4045261dd48581f5d573010c5ec97dbd7d9b1e36efb8181b6c991014f1
MD5 223a0a5c06f83738b332c58fb0d65a7d
BLAKE2b-256 a9eb63c023f3657feaea9a5a0c91b4c6694fc11d6be588e59971f4084c7d5411

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 81e88b2d93429a3b1564d12f417ca22be111721ac4d1b7f2f5cd9c6db03e4b73
MD5 5cdf8ed02d5d698bcebf9d03cdcf4c55
BLAKE2b-256 227e5fa09de407c65acaa6fb8f31d1f949f3278f824fdaec54a58dd557971070

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jsonschema_rs-0.50.0-cp310-abi3-win32.whl
  • Upload date:
  • Size: 4.6 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.50.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 368c458dd2f3c80793f56b484c838d9767f0a1f39f713e08302b75494d24d788
MD5 a4ed4cfcf9730b2a80aec6fd9a996545
BLAKE2b-256 06e86ccca3e565cb889954051560d1f7b65336825e39ec6347641e70b58cf997

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8fc7967fe78c24c169a4258bce96db9104249df6b38432aa38e09f5cca1ee01b
MD5 27d7d54186a0c0a189fa64e3f4732bc1
BLAKE2b-256 1547102b2877ae378feac6b7318970880276430d26d5e70f1fd353c8c5ad1211

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 35cf7cf06ffc4ff6e4af64655bb427d7ae1490731dfe76f5892b6e965fbfa32c
MD5 07738c929dc98c8fafa86da4beca56b6
BLAKE2b-256 952e451bbd41c84a724b5e5e4c916752675f371d2a7ff4add084466a26218f8e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2233a15efe94dcf5648e9b7f7191e48647ba63a9adb7d1beccba6c70bd3e3a71
MD5 60e6c5b4581bc20c4c7add09ac73ec9d
BLAKE2b-256 fcd7b91eb42d68a31df9de7d1198ba8d7bccd4b481b5aa84d2247c7afd52085a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a6b0cab12d8c8dce9385adf3ca047a210b493dc62a37125dcbe9f2f7ba27c45
MD5 23087d0b98cf5cac155bf241c9f5490b
BLAKE2b-256 0470ce61a6aaf0e9fb4f36fc56d55c8aaa7f0a740b423f64cc94ab6be7515d8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 64516ee89fa08ff8a4a1f5ebb0f6a2b0354484c17ad32c1b8214dfa069bed9f4
MD5 860736181734b238f435d09ca23ab01e
BLAKE2b-256 f4a9bc7c3a4f4915e99a83f13f4e80a49ee48d2a9109a2c8a7290bb49f90a276

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jsonschema_rs-0.50.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f539542a016803300c8ad2b7813866aed087d48132c57b989882e0f571e1181b
MD5 e79716cf0dd38c9638b2094c28777ad8
BLAKE2b-256 00d37658e30f6482080257906832c017aca665d763822e2892f44aadd170099b

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.50.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.50.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 46197af4ff05d24aea2046cea5f68ad3a6ae4f786e3d8732e1fb2ecd254b5ab4
MD5 88cc3d125e1a96ae521aa5826e7e6626
BLAKE2b-256 0d08681c26df13ddf5d7300a26693c5e047e90a7e88f9b8bb38d8b390eae5987

See more details on using hashes here.

Release history Release notifications | RSS feed

0.51.0

28 files

0.50.1

28 files

This release

0.50.0 This release

28 files

0.49.9

28 files

0.49.8

28 files

0.49.7

28 files

0.49.6

28 files

0.49.5

28 files

0.49.4

28 files

0.49.3

28 files

0.49.2

28 files

0.49.1

28 files

0.49.0

28 files

0.48.5

28 files

0.48.2

28 files

0.48.1

28 files

0.48.0

28 files

0.47.0

28 files

0.46.10

28 files

0.46.9

28 files

0.46.8

28 files

0.46.7

28 files

0.46.6

28 files

0.46.5

28 files

0.46.4

28 files

0.46.3

28 files

0.46.2

28 files

0.46.1

28 files

0.46.0

28 files

0.45.1

28 files

0.45.0

28 files

0.44.1

28 files

0.44.0

28 files

0.43.0

28 files

0.42.2

28 files

0.42.1

28 files

0.42.0

28 files

0.41.0

28 files

0.40.4

28 files

0.40.3

14 files

0.40.2

12 files

0.40.1

12 files

0.40.0

12 files

0.39.0

12 files

0.38.1

12 files

0.38.0

12 files

0.37.4

12 files

0.37.3

12 files

0.37.2

12 files

0.37.1

12 files

0.37.0

12 files

0.36.0

12 files

0.35.0

12 files

0.34.0

50 files

0.33.0

43 files

0.32.1

43 files

0.32.0

43 files

0.31.0

43 files

0.30.0

43 files

0.29.1

43 files

0.29.0

42 files

0.28.3

43 files

0.28.2

43 files

0.28.1

43 files

0.28.0

43 files

0.27.1

43 files

0.27.0

43 files

0.26.1

43 files

0.26.0

43 files

0.25.1

43 files

0.25.0

43 files

0.24.3

43 files

0.24.2

43 files

0.24.1

43 files

0.24.0

43 files

0.23.0

43 files

0.22.3

36 files

0.22.2

36 files

0.22.1

36 files

0.22.0

36 files

0.21.0

36 files

0.20.0

36 files

0.19.1

36 files

0.19.0

36 files

0.18.3

43 files

0.18.2

43 files

0.18.1

43 files

0.18.0

43 files

0.17.3

43 files

0.17.2

43 files

0.17.1

31 files

0.16.3

31 files

0.16.2

16 files

0.16.1

13 files

0.16.0

13 files

0.14.0

13 files

0.13.1

13 files

0.13.0

13 files

0.12.3

13 files

0.12.2

13 files

0.12.1

13 files

0.12.0

13 files

0.11.1

13 files

0.11.0

13 files

0.10.0

13 files

0.9.1

13 files

0.9.0

13 files

0.8.0

13 files

0.6.2

13 files

0.6.1

13 files

0.6.0

13 files

0.5.1

13 files

0.5.0

13 files

0.4.3

13 files

0.4.2

13 files

0.4.1

13 files

0.4.0

13 files

0.3.3

13 files

0.3.2

13 files

0.3.1

12 files

0.3.0

5 files

0.2.0

5 files

0.1.0

5 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page