A high-performance JSON Schema validator for Rust
A high-performance JSON Schema validator for Rust.
…You also can use it from the command line via the jsonschema-cli crate.
$ jsonschema-cli schema.json -i instance.jsonSee more usage examples in the documentation.
⚠️ Upgrading from older versions? Check our Migration Guide for key changes.
If you'd like to try jsonschema, you can check the WebAssembly-powered playground to see the results instantly.
$ref dereferencingThe following drafts are supported:
You can check the current status on the Bowtie Report.
jsonschema outperforms other Rust JSON Schema validators in most scenarios. The numbers below are for the runtime validator, which compiles a schema into a reusable Validator:
valico and jsonschema_valid for complex schemasboon, and >5000x faster for recursive schemasWhen the schema is known at build time, the #[jsonschema::validator] macro (macros feature) generates a specialized validator at compile time. This avoids schema compilation at runtime and validates roughly 3-13x faster than the runtime validator across our benchmark schemas.
For detailed benchmarks, see our full performance comparison.
| Feature | Default | Enables |
|---|---|---|
resolve-http |
✅ | Fetching remote references over HTTP |
resolve-file |
✅ | Reading references from the filesystem |
tls-aws-lc-rs |
✅ | TLS provider for resolve-http |
idna |
✅ | The idn-hostname and idn-email formats |
tls-ring |
ring as the TLS provider instead of aws-lc-rs |
|
resolve-async |
Non-blocking reference resolution | |
arbitrary-precision |
Arbitrarily large integers and exact decimal values | |
macros |
The #[jsonschema::validator] compile-time validator |
Turning off idna drops the IDNA and ICU dependencies; idn-hostname and idn-email are then
treated as unknown formats.
This crate requires Rust 1.85.0 or later.
By default, jsonschema uses aws-lc-rs as the TLS cryptography provider, which is the default one in reqwest.
You can opt into using ring as the TLS provider:
[dependencies]
jsonschema = {
version = "0.42",
default-features = false,
features = ["resolve-http", "resolve-file", "tls-ring"]
}NOTE: If both tls-aws-lc-rs and tls-ring features are enabled, aws-lc-rs takes precedence.
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.
If you have questions, need help, or want to suggest improvements, please use GitHub Discussions.
If you find jsonschema useful, please consider sponsoring its development.
We welcome contributions! Here's how you can help:
See CONTRIBUTING.md for more details.
Licensed under MIT License.
No open issues yet, or sync has not completed.