0.55.0 - 2026-09-06
- BREAKING:
canonical::ObjectViolationViewgained thePatternValueFailsvariant, which negation records for apatternPropertiesentry. - Canonicalization of
notoverpatternProperties, which kept the entry undernotinstead of recording the demand a key breaks. - Canonicalization of
unevaluated*beside a conditional reaching no key or index the node already evaluates, which spent a case on it. - Canonicalization of a conditional split outgrowing its per-node case budget, which kept documents like the Open API 3.2 meta-schema
Raw. - Canonicalization of an
anyOfover objects sharing apropertieskey underpatternProperties, which settled only on a second pass. - Canonicalization of
notover anallOffolded through a reference, which settled only on a second pass. - Canonicalization of a
multipleOfdivisor pastf64precision, which was not taken to divide itself. - Canonicalization of an
anyOfover a value beside a window pinned to it, which settled only on a second pass. - Canonicalization of
minProperties: 1beside anotthat already demands a key, which settled only on a second pass.
absolute_keyword_locationnaming the sibling keyword whose validator carries the check:maxLengthbesideminLength,minItems,maxItemsortypebesideitems, and a two-namerequiredbesideproperties. #1579schemaLocationinevaluateoutput namingminLengthfor amaxLengthfailure. #1579
0.54.0 - 2026-09-06
backend = SerdeJsonon#[jsonschema::validator], generating a validator that readsserde_json::Value.PreparedDocument::unsatisfiable_pointers, listing every subschema no value satisfies.
- Canonicalization of
unevaluated*besidedependentSchemasorif/then/else, which kept the documentRaw. - Canonicalization of
notoverpatternProperties, which kept the documentRaw.
validateanditer_errorscheck each assertion keyword with theis_validpath and build an error only for a failing one.evaluateholds its output tree in one allocation instead of one per node.- A
patternof^\S*$scans bytes instead of decoding every character. validateonpropertiesbeside a two-namerequiredconfirms both names in the pass that checks the properties, instead of looking each up first.- A string
enumcompares an option's length and first and last eight bytes before its full text. - A JSON Pointer segment is scanned for
~and/eight bytes at a time before it is copied. - Canonicalization cloning leaves per intersection and the definition map per settled target.
type: arraywithitemsandminItems/maxItemschecking the built-in length bound even when a custom keyword overridesminItemsormaxItems, so the bound was evaluated twice.- A custom keyword overriding
type,requiredormaxLengthnot replacing the built-in check for that keyword. - A custom keyword overriding
items,minLength,propertiesoradditionalPropertiesleaving its sibling keywords unchecked. #[jsonschema::validator]generated code that namedserde_jsondirectly, so it needed the consumer crate to depend onserde_jsontoo.- Canonicalization of
notover an object withproperties,patternPropertiesandadditionalProperties, which appliedadditionalPropertiesto the keys listed inproperties.
0.53.0 - 2026-09-02
Location::segments, iterating the segments without collecting them.CanonicalizeOptions::prepare, canonicalizing any number of a document's subschemas by JSON Pointer, with the document indexed once.- CLI: the
--at POINTERflag ofjsonschema canonicalize, canonicalizing only the subschema at that pointer without breaking its references into the rest of the document. - CLI:
jsonschema canonicalizereads YAML schemas (.yaml/.yml) as well as JSON. canonical::{ArrayView, IntegerView, NumberView, ObjectView, StringView, TypedGroupView}, the payload types ofCanonicalView, so consumers can name them in signatures.
jsonschema-valuefailing to build withdefault-features = false.jsonschema-valuefailing to build forwasm32-unknown-unknown, which needsgetrandom'swasm_jsbackend.- Draft 4
type: integeraccepting numbers written with an exponent, like1e2. - Draft 4
type: integeranswering differently for the same number across representations. uniqueItemsaccepting0alongside-0.0in arrays of more than 15 items.
- Canonicalizing an
allOfof object schemas walks their property maps once instead of looking every key up. propertiesandrequiredcompare short names withoutmemcmp.- Building a schema is up to 5% faster, from cheaper cache sharing and resolving each
$reftarget once. - Building a schema with an
$idis up to 15% faster, from encoding each absolute location once. requiredscans small objects once instead of looking up each key.enumlisting strings or integers, with or withoutnull, matches against a set instead of comparing each candidate.evaluateis up to 33% faster, from rendering each node's locations once.- CLI: 1.4-1.5x faster on large schemas, from reading files before parsing them.
- Draft 4
type: integerwitharbitrary-precisionno longer allocates a string per number. type: integer, andtypesets containing it, are up to 54x faster on float-heavy instances witharbitrary-precision.- Draft 4
type: integeris up to 20x faster for thePyo3andMagnusrepresentations.
0.52.1 - 2026-08-30
multipleOfrejecting valid values like1070468.14for0.01withoutarbitrary-precision.
minLengthandmaxLengthtogether now scan the string once.multipleOfwith a fractional divisor is 8-16x faster.unevaluatedPropertiesis up to 2.9x faster.evaluateis up to 27% faster on reference-heavy schemas.
0.52.0 - 2026-08-26
Evaluation::is_valid.Location::is_empty.DisplayforErrorEntry.ValidationOptions::offlineandcanonical::CanonicalizeOptions::offline, refusing to fetch references outside the registry.idnaCargo feature, enabled by default, gating theidn-hostnameandidn-emailformats. #1313- CLI: the
--offlineflag ofjsonschema validate,jsonschema bundleandjsonschema dereference.
ValidationErrors'Displaygained the instance path of each error.- BREAKING: With
default-features = false, theidn-hostnameandidn-emailformats now require the newidnafeature. Without it they are unknown formats, which are accepted by default, or rejected at build time undershould_ignore_unknown_formats(false). Addidnato the feature list to keep the previous behavior.
- Canonicalization not idempotent where a
patternProperties$refmatches a keypropertiesnames. is_validdisagreeing withvalidate,iter_errors, andevaluateon a schema that reaches its own$reftwice, one of them undernot.format: emailandformat: idn-emailrejecting an empty quoted string as the local part (it should be accepted).format: emailandformat: idn-emailrejecting an address literal whoseIPv6:tag is not written in that exact case (the tag is case-insensitive).format: emailaccepting a non-ASCII character in the local part (it should be rejected).ValidationOptions::with_draftgating keywords on the vocabularies of the$schemait overrides, so the validator accepted every instance.
iter_errorscollects into a single buffer instead of allocating and re-boxing an iterator at every schema node.
0.51.0 - 2026-08-23
ValidationOptions::with_vocabularyand thevocabulariesattribute onjsonschema::validator, declaring support for a vocabulary this crate does not implement.- The
--vocabularyflag ofjsonschema validate.
Vocabularygained theFormatAssertionvariant, which its Draft 2020-12 URI parses to instead ofVocabulary::Custom, and is markednon_exhaustive.
- The
uniqueItemslength ceiling not reading anitemsorcontainsschema written as a$ref. - The Draft 2020-12 Format-Assertion vocabulary read as an annotation, so a meta-schema requiring it accepted values its
formatrejects. - An unrecognized
formataccepted under a meta-schema requiring the Format-Assertion vocabulary (it should be rejected). - A meta-schema requiring a vocabulary this crate does not implement accepted (it should be rejected).
- The Draft 2019-09 Format vocabulary declared
trueread as an annotation, so a meta-schema requiring it accepted values itsformatrejects. - The bundled
https://json-schema.org/draft/2020-12/meta/format-assertionmeta-schema not declaring its vocabulary, so a schema written against it annotatedformatinstead of asserting it. - A meta-schema without
$idkeeping its$vocabularyunread, so a schema written against it got every Draft 2020-12 vocabulary. - A schema naming a bundled vocabulary meta-schema as its
$schemarejected as an unknown meta-schema (it should build). - The
regexformat reading the Rust regex dialect (it should read the ECMA-262 dialect in Unicode mode). - The
uri-templateformat rejecting an apostrophe in a literal (it should accept it, per RFC 6570 errata 6937). - The
durationformat accepting weeks combined with a time part, such asP1WT1H(it should reject it). - Stack overflow compiling
unevaluatedPropertiesorunevaluatedItemsbeside a$refthat cycles back to the node, written as#, through its$id, or through a chain of definitions.
- Building
unevaluatedPropertiesorunevaluatedItemsover a deepallOfor$refchain costs its depth instead of its square.
0.50.1 - 2026-08-22
CanonicalSchema::satisfiabilityanswersYesfor a string whosepatternorformata matching value can be built from.CanonicalSchema::satisfiabilityanswersNowhere aformattakes no string of the length the schema asks for.
CanonicalSchema::negatetaking apart a union that reads a definition through its ownif, so a schema and its negation shared a value.CanonicalSchema::subtractdropping a Draft 4 array member an element demand partly takes.CanonicalSchema::coversansweringYeswhere a Draft 4 element demand refuses a member.- A string schema whose
maxLengthis0keeping apattern,format, or content facet unread, so the same constraints written in one object and written as anallOfreached different canonical forms.
notover a wide object schema costs its branch count instead of its square.notover an object schema is linear in its property count, not quadratic.notover an object schema withadditionalProperties: falseno longer costs cubic time in its property count.
0.50.0 - 2026-08-20
CanonicalSchema::unionandCanonicalSchema::subtract.CanonicalizationError::UnsupportedResult, reported where the canonical form does not support a set operation's result.OperandMismatch::DocumentRoots, reported where both operands read#and it names a different document on each side.- CLI:
jsonschema validate -i INSTANCEwithout aSCHEMAargument validates each instance against the schema named in its own$schemaproperty. #1470
CanonicalSchema::is_satisfiableis nowCanonicalSchema::satisfiability, answeringYes,No, orUnknown-Yeswherever a value can be exhibited, not only for the forms listing their members.CanonicalSchema::coversdecides through the difference as well:Nowhere the argument keeps values the receiver rejects,Yeswhere nothing is left over.CanonicalSchema::is_subset_ofis nowCanonicalSchema::covers, answeringYes,No, orUnknownfor whether the receiver admits every value the argument admits.CanonicalSchema::negatereturnsResultrather thanOption.CanonicalizationError::UnmodeledOperandis nowCanonicalizationError::UnsupportedOperand, and means only that an operand is aRawpass-through.- A conjunction over a
$reffolds through the body it names, so canonicalizing a document and combining its parts with the set operations reach one form; a document holding a reference cycle keeps the form it had.
- Combining nodes of two different documents repointing a
$refto#at the combined result instead of the document it was written in, including one named by a definition the result keeps. - Intersecting a
$refwhose target istrueorfalse, which panicked. - A key constraint left un-narrowed once a run is out of intersections, which panicked on the next read of it.
CanonicalSchema::coversansweringUnknownfor a schema against itself, where that schema is a$ref.CanonicalSchema::unionkeeping a$refbeside the schema it names, where the other three operations read through it.CanonicalSchema::coversandCanonicalSchema::subtractcancelling two nodes written the same way whose#names a different document.- Two results accepting the same values comparing unequal over the part of their documents neither reads.
additionalPropertiesreaching a key the pattern map matches when a finite key constraint closes the map, which dropped values both operands accept.- A recursive definition stopping every other pointer in the document from being read through.
- One
$defsentry read past a wider schema written out at every use, rather than kept as the pointer it was. - Set operations rejecting one document canonicalized twice, and a pruned result rejected against the document it came from, where the maps resolve every shared reference the same way.
- Set operations comparing a
$refas a pointer instead of reading through it, so a schema written with a$refdid not cancel against the same schema written out. CanonicalSchema::subtractasking for a complement where the difference is one of the operands or empty, declining on schemas it can subtract.- Set operations keeping
$defsentries the result no longer references, which then showed up in the emitted schema. CanonicalSchema::uniondeclining over an approximated intersection, where the union itself is exact.- Resolving a reference against a base URI that carries a fragment, which happens when a Draft 4-7
$idcontains one. #1473 unevaluatedPropertiesandunevaluatedItemsignoring an$idon a subschema they walk through, so a relative$refinside it resolved against the enclosing resource.
- CLI: ~25% less CPU per run from compile-time meta-schema validators.
0.49.9 - 2026-08-09
- Canonicalization of a
oneOfwhose branches name object targets a required constant tells apart, which degrades to a union.
CanonicalSchema::to_json_schemaon a definition emits only the definitions that one names, not the whole document's.
- Canonicalization running without end on a conjunction over unions; past a ceiling on the meets it takes, the document stays unmodeled.
0.49.8 - 2026-08-08
- Up to 380x faster canonicalization of a
oneOfwhose overlapping branches carry many properties, which no longer removes shared regions the exactly-one spelling discards.
- Draft detection treating the version-less
http://json-schema.org/schemameta-schema URI as a custom dialect, where it names the current draft. - A
patternPropertiesentry matching every key leavingadditionalProperties: falsespelled as a key constraint, where it forbids nothing. unevaluatedProperties/unevaluatedItemsset totrueforcing the whole document to stay unmodeled beside an unresolved applicator, where the keyword rejects nothing regardless of the evaluated set.unevaluatedProperties/unevaluatedItemsbeside a$refforcing the whole document to stay unmodeled, where the reference's own evaluated properties or items are known once it is resolved.
0.49.7 - 2026-08-07
CanonicalizeOptions::with_retrieverto fetch external resources absent from the registry.CanonicalizeOptions::with_base_urito resolve relative references in the root schema.- Canonicalization of a
oneOfwhose branches name disjoint targets, which degrades to a union. - Canonicalization of a vacuous
patternPropertiesentry beside schema-valuedadditionalProperties, where matching keys escape its value constraint. - Canonicalization of a Draft 4 closed pattern map with a reference nested under a property.
- Canonicalization of Draft 4 closed pattern maps that meet through an applicator.
- The complement of a reference back to a target already being negated, which stays symbolic instead of declining.
CanonicalSchema::definitionresolving#to the document the handle was read against.
- Up to 150x faster canonicalization of
notover a union of many branches. - 2% faster emission of canonical schemas, which no longer formats copied string values.
- 5% faster emission of canonical schemas, which no longer formats object keys while copying them.
- Up to 12% faster canonicalization of schemas that repeatedly intersect the same branches.
- 13% faster canonicalization of a non-dynamic OpenAPI document, which no longer scans every schema object for dynamic references.
- Faster canonicalization of schemas with local
$defsreferences, which avoid decoding unescaped definition names. - 23% faster canonicalization of an object whose keys a finite property-name set spells.
- 3% faster intersection of schemas where one side constrains nothing.
- Up to 31x faster canonicalization of a
oneOfwhose many branches overlap. - Up to 14x faster canonicalization of a union whose object branches share no values.
- 7% faster canonicalization of schemas that reach the same pair of nodes repeatedly.
- 5% faster canonicalization of objects, whose property maps no longer reach the allocator.
- Up to 8% faster canonicalization of schemas that reach
trueandfalsesubschemas repeatedly. - 2% faster canonicalization of schemas that assert known string formats.
CanonicalSchema::definitionandCanonicalSchema::definitionshanding out a target that names the document root without that document, where#points at the target instead.- An
itemstail beyond an array's length ceiling surviving canonicalization, where it governs no element. CanonicalSchema::to_json_schemaleaving the document root out of a node emitted below it, where#points at that node instead.
0.49.6 - 2026-08-06
- Canonicalization of a negated
uniqueItems, where the complement demands a repeated element under the length floor two elements imply. - Canonicalization of a negated array tuple, where each position's complement stands under the length that reaches it.
- Canonicalization of
containsdemands sharing no value, where their counts add up into a length floor. CanonicalSchema::negatethrough references, where the complement of the resolved target takes the reference's place.- Canonicalization of negated
propertyNamesandadditionalProperties, where the complement spells the violating-key demand instead of anotresidual. - Canonicalization of negated
additionalPropertiesunder Draft 4, where the violating-key demand spells the closed property map. - Canonicalization of
nota reference, where the complement of the resolved target takes the pointer's place. - Canonicalization of a negated
oneOf, where the complement spells the values no branch admits beside the values two branches share. - Canonicalization of negated
itemsunder Draft 4, where the violating-element demand spells the barred element schema.
ArrayViewreports distinctness in three states, so an array demanding a repeated element reads apart from one demanding distinct elements.
CanonicalSchema::negatekeeping a root self-reference in the complement, where it points at the complement instead of the source.- An
additionalItemsthat tails no tuple keeping the whole document unmodeled under Draft 2020-12.
0.49.5 - 2026-08-05
- Canonicalization of
notan integer schema under Draft 4, which the number leaf carries as barred integers. - Canonicalization of
notamultipleOf, which numeric leaves carry as barred divisors. - Canonicalization of
notan integer schema, where a barred divisor of one spells the non-integer numbers. - Canonicalization of
notapattern, which string leaves carry as barred patterns. - Canonicalization of
nota typed value set under Draft 4, such as{"type": "integer", "enum": [1, 2]}. CanonicalSchema::is_subset_of, whether the other schema admits every value this one admits.- Canonicalization of a reference cycle carrying no assertion, which admits every value.
CanonicalSchema::is_subset_offailing to prove a union of array branches a subset of itself.CanonicalSchema::intersectadmitting values one side rejects when itsadditionalPropertiesgoverns the keys the other side'spatternPropertiesmatch.- A satisfiable
multipleOfschema collapsing to the empty set whenf64rounds its bounds together. - Two spellings of one number canonicalizing to different texts under
arbitrary-precisionwhen the fraction exceeds the expansion cap. - Numeric bounds and
multipleOfcomparing values through a lossyf64conversion underarbitrary-precision, such as1e-400passing{"maximum": 0}. - A union branch left unabsorbed when a sibling complement shed a conjunct from another branch.
- A union keeping an integer branch beside a number branch that admits every value of it.
0.49.4 - 2026-08-04
- Canonicalization of
nota string format, which the string leaf carries as barred formats. - Canonicalization of
notan existential demand, which an array fails exactly when no element matches. - Canonicalization of
nota string value set, which the string leaf carries as excluded values. - Canonicalization of
unevaluatedItemsbesidecontains, where the elements it matches are evaluated and the tail admits either. - Canonicalization of
unevaluated*besideanyOforoneOf, where every branch evaluating the same keys or indexes pins what is left over. - Canonicalization of
notan array element schema, which an array fails exactly when one element violates it. CanonicalSchema::intersect, the values both schemas admit.CanonicalSchema::negate, the values a schema rejects.CanonicalSchema::definition, one reference target by URI.
- An integer past
i64admitted by a fractional boundf64rounds it onto, such as-10000000000000000000000000under{"maximum": -10000000000000000000000000.1}. - An integer past
2^53admitted by a boundf64rounds onto it, such as9007199254740992under{"minimum": 9007199254740993}. - A
containssubschema beside bothminContainsandmaxContainsoverwriting a sibling keyword of the same name, such asitems.
CanonicalSchemahashing and equality cost the node instead of the whole document.
0.49.3 - 2026-08-02
- Canonicalization of a recursive schema with no finite witness, which now folds to
false. - Canonicalization of
$dynamicRefand$recursiveRef, which resolve through the dynamic scope and stay symbolic like any other reference. A dangling$dynamicReferrors rather than stayingRaw. - Canonicalization of
minContainsunderuniqueItems, where a demand asking for more matches than its own schema has distinct values now folds tofalse. - Canonicalization of a Draft 4
patternPropertiescoverage closed byadditionalProperties: false, spelled as the closed map it was parsed from. - Canonicalization of a
oneOfwhose branches repeat, where a repeated branch can never contribute exactly one match. - Canonicalization of a
$refwhose target is an empty schema, which now folds tofalse. - Canonicalization of
unevaluatedItemsbesideallOf, where every branch must pass and so the indexes they evaluate are known without the instance. - Canonicalization of
unevaluatedPropertiesbesideallOf, where every branch must pass and so what they evaluate is known without the instance. - Canonicalization of a Draft 4
typelist holdingintegerbeside other types withenum, which previously modeled only when spelled as anallOf. - Canonicalization of
patternPropertiespatterns matching finitely many keys, such as^a$and^(a|b)$. - Canonicalization of
unevaluatedPropertiesandunevaluatedItemswhen no in-place applicator sits beside them.
additionalItemsvalues that are not schemas silently ignored beside an array-formitems(they should fail the build likeadditionalProperties).additionalItemsbeside a booleanitemsrejecting every instance, such as{"additionalItems": false, "items": false}.additionalItemsbeside a non-arrayitemsvalue failing schema compilation with an error blamingadditionalItems(the keyword should be ignored).- Draft 4 rejecting a size bound at or past
2^64, such as{"maxItems": 18446744073709551616}. - An integer past the
f64range admitted by a fractional bound it exceeds, such as1e400under{"exclusiveMaximum": 0.1}. - A
$refat the root of an$id-bearing subresource dropped as a self-reference when its pointer matched the one that reached that subresource. - Canonicalization reusing one definition's body for a same-named definition in another resource, when the name spells a canonical URI.
unevaluatedItemscountingprefixItemsas evaluating elements before Draft 2020-12, where it is not a keyword.
- Up to 70% faster
evaluateby building each location in a single allocation instead of two, reusing the instance location a node already built, and caching evaluation paths across instance nodes.
0.49.2 - 2026-07-28
- Faster serialization of canonicalized schemas.
- Faster macro code generation for subschemas with many keywords.
- Up to 70x faster canonicalization of
multipleOfbeside numeric bounds far from zero.
0.49.1 - 2026-07-25
jsonschema-value: Ruby builds on x64-mingw-ucrt.
0.49.0 - 2026-07-25
- Generic JSON input:
options_forbuilds a validator over any instance representation implementingjson::Json, so instances validate without conversion toserde_json::Value. #239 meta::validate_forandmeta::is_valid_forfor checking a schema document held in any representation implementingjson::Jsonagainst its meta-schema.- EXPERIMENTAL: Schema canonicalization via
jsonschema::canonicalize. It reduces a reasonable subset of JSON Schemas to their normal forms.
multipleOfincorrectly accepted integers pastu64that are not multiples of the divisor.
0.48.5 - 2026-07-22
- Packaging issue again.
0.48.4 - 2026-07-22
- Packaging issue.
0.48.3 - 2026-07-22
- INTERNAL. Extract common JSON Schema semantic into a separate
jsonschema-valuecrate.
- Avoid map lookups in some
propertiesvalidators. - Faster validation of
{"type": "array", "items": {...}}schemas.
0.48.2 - 2026-07-21
- Faster validator compilation by pre-sizing internal caches.
0.48.1 - 2026-07-17
- Missing
requirederrors inevaluate()output for schemas withpropertiesand a two-entryrequiredarray. #1220 contentEncodingerrors for invalid UTF-8 after decoding incorrectly had emptyinstance_pathandschema_path.
- Faster code generation for
#[jsonschema::validator](~5% across benchmarked schemas), via aliasing repeated paths in the emitted code.
0.48.0 - 2026-07-16
iter_errorsfor#[jsonschema::validator]-generated validators.
- Per-branch context on generated
anyOfandoneOfvalidation errors, matching runtime validators. $recursiveRefin generated validators incorrectly resolved to the innermost$recursiveAnchor(it should resolve to the outermost one).- Integer instances just outside the
i64/u64range incorrectly compared against numeric bounds through lossyf64rounding underarbitrary-precision(e.g.{"minimum": -9223372036854775808}accepted-9223372036854775809).
- One canonical number spelling from
canonical::json::to_stringunderarbitrary-precision("1e-2"becomes"0.01","1.50"becomes"1.5") and correctly-rounded float parsing (serde_json'sfloat_roundtrip).
- Faster
multipleOfvalidation for integer instances with integer divisors, via integer arithmetic instead of floating-point modulo.
0.47.0 - 2026-07-08
#[jsonschema::validator]attribute macro (behind themacrosfeature) that compiles a JSON Schema intois_validandvalidateimplementations at build time.Keyword::iter_errorsfor reporting multiple validation errors from a single custom keyword. #1071
- Bump MSRV to
1.85.0.
- Faster meta-schema validation and schema compilation with the
macrosfeature, via compile-time meta-schema validators.
typeunderitemsasserted with the Validation vocabulary disabled.- Disabled vocabularies ignored for
$reftargets without their own$schema(e.g.$defsentries).
0.46.10 - 2026-07-05
- Stack overflow with a self-referential
$dynamicRefcombined withunevaluatedPropertiesorunevaluatedItems. - Incorrect
unevaluatedPropertiesandunevaluatedItemsresults when a meta-schema disables the Applicator vocabulary.
0.46.9 - 2026-07-02
multipleOfincorrectly rounds integer instances above 2^53 tof64before the divisibility check on builds without thearbitrary-precisionfeature.- Stack overflow while preparing a registry containing deeply nested schema documents.
0.46.8 - 2026-07-01
idn-emailformat rejected non-ASCII characters in quoted local parts (e.g."δοκιμή"@example.com).
0.46.7 - 2026-06-30
idn-hostnameformat accepted A-labels that decode to a disallowed code point (e.g.xn--7a).
0.46.6 - 2026-06-24
IntoRegistryResourceforArc<Value>. #1129
prefixItemsincorrectly recognised as a known keyword in Draft 2019-09 and earlier (it is 2020-12 only).patternvalidation errors displayed the internally translated regex instead of the original schema pattern. #1149
0.46.5 - 2026-05-13
- Percent-encoded characters in
$refURI fragments (e.g.#/$defs/Request%20class) are now decoded when stored asschema_path.
0.46.4 - 2026-05-01
- Panic in the regex engine when matching against patterns with very large
{0,N}quantifiers.
0.46.3 - 2026-04-28
- Memory not reclaimed when a
Validatorfor a schema with recursive$refor$dynamicRefis dropped. #1125 - Compilation failure on
wasm32-wasip1andwasm32-unknown-emscriptentargets.
0.46.2 - 2026-04-20
requirednot enforced whenadditionalPropertiesis a schema object andrequiredlists exactly 2 keys.
0.46.1 - 2026-04-18
requirednot enforced whenpropertieshas 15 or more entries andrequiredlists exactly 2 keys.
0.46.0 - 2026-04-10
ValidatorMapfor validating instances against subschemas identified by URI-fragment JSON pointer. #1075- CLI: Accept multiple values after
-i/--instance(e.g.jsonschema validate schema.json -i *.json). #1085 dereferencefunction to recursively inline$refreferences. #422- CLI:
jsonschema dereferencesubcommand to dereference a schema from the command line.
- Registry construction now uses an explicit prepare step, and
with_registrynow borrows the prepared registry.ValidationOptions::with_resourceandValidationOptions::with_resourceswere removed in favor of building aRegistryfirst. See the Migration Guide for the details.
- Avoid registry clones and document clones during validator construction. This improves real-world schema compilation by roughly 10-20% in internal benchmarks.
0.45.1 - 2026-04-06
- Incorrect handling of
multipleOfvalidation for negative numeric instances. - Incorrect handling of
durationformat when hours and seconds appear without minutes, or years and days without months.
0.45.0 - 2026-03-08
bundle(schema)/async_bundle(schema)/ValidationOptions::bundle: produce a Compound Schema Document with external$reftargets embedded in a draft-appropriate container (definitionsfor Draft 4/6/7,$defsfor Draft 2019-09/2020-12) while preserving$refvalues. #791.- CLI:
jsonschema validateandjsonschema bundlesubcommands. Flat invocation (jsonschema schema.json -i …) is deprecated — usejsonschema validateinstead. #791. ValidationError::absolute_keyword_location()to get the absolute keyword location URI of the schema node that produced the error. #737.
ValidationError::into_parts()now returnsValidationErrorPartsinstead of a tuple.
0.44.1 - 2026-03-03
hostnameformat now applies legacy RFC 1034 semantics in Draft 4/6 and keeps IDNA A-label validation in Draft 7+.
0.44.0 - 2026-03-02
canonical::json::to_string(value)for canonical JSON serialization (stable key ordering and numeric normalization), useful for deduplicating equivalent JSON Schemas.
- Do not produce annotations for non-string instances from
contentMediaType,contentEncoding, andcontentSchemakeywords.
0.43.0 - 2026-02-28
- Optimize
patternandpatternPropertiesfor^(a|b|c)$alternations via linear array scan. - Optimize
^\S*$patterns by replacing regex with a direct ECMA-262 whitespace check.
anyOf,format,unevaluatedProperties, andunevaluatedItemsnow correctly collect annotations per spec.
0.42.2 - 2026-02-26
- SWAR digit parser accepted bytes
:–?(0x3A–0x3F) as valid digits duringdate,time, anddate-timeformat validation, potentially allowing malformed values to pass.
- Extend
patternprefix optimization to handle escaped slashes (^\/) and exact-match patterns (^\$ref$). - Specialize
enumfor cases when all variants are strings.
0.42.1 - 2026-02-17
- Reduce dynamic dispatch overhead for non-recursive
$refresolution. - Cache ECMA regex transformations during
format: "regex"validation.
0.42.0 - 2026-02-14
JsonType::as_strmethod for zero-allocation type name access.ValidationErrorKind::keywordis now public.tls-ringfeature flag to opt into usingringas the TLS crypto provider instead of the defaultaws-lc-rs. #997- CLI: Support YAML (
.yaml/.yml) instance files in text output mode. #988
- BREAKING: Default TLS crypto provider switched back to
aws-lc-rs. Users who needringcan opt in via thetls-ringfeature flag. This resolves potential conflicts with other libraries usingaws-lc-rs. #997
- Panic when validating
$reftargets that resolve to boolean schemas.
- Cache formatted schema locations with
OnceLockto avoid repeated formatting duringevaluate().
0.41.0 - 2026-02-04
- Replace regex-based
uri-templateformat validation with a hand-rolled RFC 6570 parser. - Specialize
itemskeyword for simple type schemas ({"type": "string"},{"type": "number"}, etc.) to eliminate dynamic dispatch overhead. - Precompute regex matches on known properties.
- Faster
unevaluatedPropertiesvalidation via O(1) property lookup and short-circuitoneOfevaluation. - Use HashMap for large set of properties.
- Lower HashMap threshold from 40 to 15 properties for faster property lookups.
0.40.2 - 2026-01-30
- Exclude internal
trackerfield fromValidationErrorDebug output. - Switch HTTP client TLS crypto backend from
aws-lc-rstoringto simplify building from source on some Linux distributions. #957
type: integervalidation in Draft 4 now correctly accepts large integers outside the i64/u64 range whenarbitrary-precisionfeature is enabled.
0.40.1 - 2026-01-30
ValidationErrorKind::Customnow includes akeywordfield containing the custom keyword name.
- Faster validation via cost-based keyword ordering.
- Faster
patternPropertiesfor simple prefix patterns (e.g.,^x-).
0.40.0 - 2026-01-18
HttpOptionsandValidationOptions::with_http_options()for configuring HTTP client behavior (timeouts, TLS verification, custom CA certificates) when fetching external schemas.- CLI:
--timeout,--connect-timeout,--insecure, and--cacertflags for HTTP configuration.
0.39.0 - 2026-01-16
ValidationError::evaluation_path()for the dynamic path including$reftraversals.
- BREAKING: Simplified custom keyword API -
Keyword::validateno longer receives path parameters, andValidationError::customonly takes a message.
schemaLocationin evaluation output now excludes$ref/$dynamicRef/$recursiveRefper JSON Schema spec.
evaluate(): 4.5-30x faster on complex schemas, 12-89% faster overall.- Recursive schemas with
oneOf/anyOf: ~4000x faster via memoization. #930
0.38.1 - 2025-12-25
multipleOfvalidation for integer values between2^53andi64::MAXwitharbitrary-precisionfeature.
0.38.0 - 2025-12-24
EmailOptionsfor configuringemailformat validation. #903
- Use-after-free in async
$refresolution when multiple refs target the same external URL with different fragments. #906 multipleOfvalidation for large u64 values beyondi64::MAXwitharbitrary-precisionfeature.Validatornot beingSend + Syncon WASM targets. #915
0.37.4 - 2025-11-30
- Stack overflow during validation of schemas with circular
$refchains (e.g.,a->b->a). - Local
$refresolution within fragment-extracted external resources. #892
- Deprecated
PrimitiveType&PrimitiveTypesBitMap.
0.37.3 - 2025-11-28
- External resources not discovered within subresources of local
$reftargets. #892
0.37.2 - 2025-11-27
JsonTypeSet::len()andJsonTypeSet::remove()helpers for managing type sets.
- External resources not discovered through chained local
$refreferences. #892
0.37.1 - 2025-11-19
- Stack overflow on empty
$refvalue. #886
0.37.0 - 2025-11-19
evaluate()top-level function for convenient access to structured validation output.- CLI: Schema-only validation now also validates all referenced schemas. #804
- Support for additional
contentEncodingvalues per RFC 4648:base64url,base32,base32hex, andbase16. These encodings are now validated alongside the existingbase64support in Draft 6 and 7. #26 validator.iter_errors(instance).into_errors(). It returns aValidationErrorstype that collects validation errors and implementsstd::error::Error. #451
- BREAKING:
ValidationErrorfields are private; useinstance(),kind(),instance_path(), andschema_path()instead of accessing struct fields directly. - BREAKING:
ErrorIteratoris now a newtype wrapper instead ofBox<dyn ValidationErrorIterator>.
validateand other APIs returningResult<_, ValidationError>are 5–10% faster in some workloads due to the smaller error handle.evaluate: Avoiding deep clones of unmatched keyword values (e.g.,title,description,examples) on every schema node evaluation by usingArcinternally. Can be multiple times faster for schemas with large annotations.
0.36.0 - 2025-11-18
- CLI: Structured
--output flag|list|hierarchicalmodes now stream newline-delimited JSON records with schema/instance metadata plus JSON Schema Output v1 payloads (defaulttextoutput remains human-readable). - CLI:
--errors-onlyflag to suppress successful validation output and only show failures. - CLI: When invoked with only a schema file (no instances), validates the schema against its meta-schema. #804
- New
Validator::evaluate()API exposes JSON Schema Output v1 (flag/list/hierarchical) reports along with iterator helpers for annotations and errors. meta::validator_for()function to build validators for meta-schema validation with fullValidatorAPI access.Validatornow implementsClone. #809
Validator::apply(),Output, andBasicOutputtypes have been removed in favor of the richerevaluate()API.
0.35.0 - 2025-11-16
- Support for custom meta-schemas. Schemas with custom
$schemaURIs can now be used by registering their meta-schemas in theRegistryviajsonschema::options().with_registry(). #664 arbitrary-precisionfeature for exact numeric validation of large integers and decimals beyond standard floating-point limits. #103- Support for HTTPS
$schemaURIs for drafts 04, 06, and 07 (e.g.,https://json-schema.org/draft-07/schema). #802
- BREAKING:
meta::is_validnow panics for unknown$schemavalues instead of defaulting to Draft 2020-12.meta::validatereturns an error for unknown$schemavalues. Usemeta::options().with_registry()to validate schemas against custom meta-schemas. - BREAKING:
Resource::from_contentsno longer returnsResultand always succeeds, since draft detection no longer fails for unknown$schemavalues.
- BREAKING:
meta::try_is_validandmeta::try_validate. Usemeta::is_validandmeta::validateinstead. - BREAKING:
primitive_typemodule (deprecated since 0.30.0). Usejsonschema::typesinstead.
required: short-circuit when the instance object has fewer properties than required keys.
0.34.0 - 2025-11-14
- BREAKING:
BasicOutputandAnnotationsno longer have lifetime parameters. Update type annotations fromBasicOutput<'a>toBasicOutputandAnnotations<'a>toAnnotations. referencing: URI caching now avoids hash collisions and reduces lock contention.- Update
fluent-urito0.4.1. - Bump MSRV to
1.83.0. - Drop the
Send + Syncbounds fromRetrieve/AsyncRetrieveonwasm32. - Use the new
draftX::meta::validator()helper so meta-schema validators lazy-init onwasm32while native targets keep borrowing the cachedjsonschema::meta::MetaValidator.
- Hostname and IDN hostname formats now decode
xn--labels, reject leading combining marks/uppercase prefixes, and enforce the latest JSON Schema punycode context rules. - Restore
wasm32-unknown-unknownsupport. #785
applynow reuses cached schema locations, URI fragments, and buffers for up to ~2.5x faster validation.- Recursive and regular
$refcompilation deduplicates validator nodes, which decreases the memory usage and improves performance. - Validator compilation restores the regex cache for faster builds on regex-heavy schemas and precomputes absolute schema locations, trading a bit of compile time for faster
applyon location-heavy workloads. - Large schema compilation is significantly faster. #755
unevaluatedPropertiesvalidation is 25-35% faster through optimized property marking and early-exit paths.unevaluatedPropertiesmemory usage drastically reduced by eliminating redundant registry clones during compilation.unevaluatedItemsvalidation is ~10% faster through early-exit optimizations and eliminating redundant validations in combinators.
- BREAKING:
Validator::configto reduce the memory footprint. - BREAKING: Public
DRAFT4_META_VALIDATOR,DRAFT6_META_VALIDATOR,DRAFT7_META_VALIDATOR,DRAFT201909_META_VALIDATOR, andDRAFT202012_META_VALIDATORstatics. UsedraftX::meta::validator()helper functions instead (e.g.,draft7::meta::validator()).
0.33.0 - 2025-08-24
- BREAKING:
instance_pathsegments are now unescaped when iterating.LocationSegment::Propertynow holdsCow<'_, str>andLocationSegmentis no longerCopy. #788
0.32.1 - 2025-08-03
- Bump
fancy-regexto0.16.
0.32.0 - 2025-07-29
- Added missing
contextfield toValidationErrorKind::OneOfMultipleValid.
- Improved error message for
enum.
0.31.0 - 2025-07-28
- CLI: flag
-d, --draft <4|6|7|2019|2020>to enforce a specific JSON Schema draft. - CLI: flags
--assert-formatand--no-assert-formatto toggle validation offormatkeywords. - Added
contextforValidationErrorKind::AnyOfandValidationErrorKind::OneOfNotValidwhich contains errors for all subschemas, each inside a separate vector with an index matching subschema ID.
- Improve the precision of
multipleOffor float values.
- Bump
fancy-regexto0.15.
0.30.0 - 2025-04-16
JsonTypeandJsonTypeSet.ValidationOptions::with_base_urithat allows for specifying a base URI for all relative references in the schema.- Configuration options for the underlying regex engine used by
patternandpatternPropertieskeywords.
- Better error messages for relative
$refwithout base URI.
- CLI: Inability to load relative file
$ref. #725
- Internal cache for regular expressions.
PrimitiveTypeandPrimitiveTypesBitMap.
0.29.1 - 2025-03-27
Hash,PartialOrd,Ordandserde::SerializeforLocation.- Make
Location::joinpublic.
0.29.0 - 2025-02-08
-
All builder methods on
ValidationOptionsnow take ownership ofselfinstead of&mut self. This change enables better support for non-blocking retrieval of external resources during the process of building a validator. Update your code to chain the builder methods instead of reusing the options instance:// Before (0.28.x) let mut options = jsonschema::options(); options.with_draft(Draft::Draft202012); options.with_format("custom", my_format); let validator = options.build(&schema)?; // After (0.29.0) let validator = jsonschema::options() .with_draft(Draft::Draft202012) .with_format("custom", my_format) .build(&schema)?;
-
The
Retrievetrait'sretrievemethod now accepts URI references as&Uri<String>instead of&Uri<&str>. This aligns with the async version and simplifies internal URI handling. The behavior and available methods remain the same, this is purely a type-level change.// Before fn retrieve(&self, uri: &Uri<&str>) -> Result<Value, Box<dyn std::error::Error + Send + Sync>> // After fn retrieve(&self, uri: &Uri<String>) -> Result<Value, Box<dyn std::error::Error + Send + Sync>>
-
Simplified
Registrycreation API:- Removed
RegistryOptions::try_newandRegistryOptions::try_from_resourcesin favor ofRegistry::build - Removed
Registry::try_with_resource_and_retriever- useRegistry::options().retriever()instead - Registry creation is now consistently done through the builder pattern
// Before (0.28.x) let registry = Registry::options() .draft(Draft::Draft7) .try_new( "http://example.com/schema", resource )?; let registry = Registry::options() .draft(Draft::Draft7) .try_from_resources([ ("http://example.com/schema", resource) ].into_iter())?; let registry = Registry.try_with_resource_and_retriever( "http://example.com/schema", resource, retriever )?; // After (0.29.0) let registry = Registry::options() .draft(Draft::Draft7) .build([ ("http://example.com/schema", resource) ])?; let registry = Registry::options() .draft(Draft::Draft7) .build([ ("http://example.com/schema", resource) ])?; let registry = Registry::options() .retriever(retriever) .build(resources)?;
- Removed
- Support non-blocking retrieval for external resources during schema resolution via the new
resolve-asyncfeature. #385 - Re-export
referencing::Registryasjsonschema::Registry. ValidationOptions::with_registrythat allows for providing a predefinedreferencing::Registry. #682
- Significantly improved validator compilation speed by using pointer-based references to schema fragments instead of cloning them during traversal.
- Faster anchors & sub-resources lookups during validator compilation.
0.28.3 - 2025-01-24
- Panic when schema registry base URI contains an unencoded fragment.
- Fewer JSON pointer lookups.
0.28.2 - 2025-01-22
- Resolving external references that nested inside local references. #671
- Resolving relative references with fragments against base URIs that also contain fragments. #666
- Faster JSON pointer resolution.
0.28.1 - 2024-12-31
- Handle fragment references within
$id-anchored subschemas. #640
0.28.0 - 2024-12-29
- Implement
IntoIteratorforLocationto iterate overLocationSegment. - Implement
FromIterforLocationto build aLocationfrom an iterator ofLocationSegment. ValidationError::to_ownedmethod for converting errors into owned versions.- Meta-schema validation support. #442
0.27.1 - 2024-12-24
- Implement
ExactSizeIteratorforPrimitiveTypesBitMapIterator.
0.27.0 - 2024-12-23
- Added
masked()andmasked_with()methods toValidationErrorto support hiding sensitive data in error messages. #434
- Improved error message for unknown formats.
- Bump MSRV to
1.71.1.
0.26.2 - 2024-12-16
- Fix documentation for
validate
0.26.1 - 2024-10-29
- Return "Unknown specification" error on
https-prefixed$schemafor Draft 4, 5, 6. #629
0.26.0 - 2024-10-26
Important: This release contains breaking changes. See the Migration Guide for details on transitioning to the new API.
Validator::iter_errorsthat iterates over all validation errors.
- BREAKING: Remove unused
ValidationErrorKind::JSONParse,ValidationErrorKind::InvalidReference,ValidationErrorKind::Schema,ValidationErrorKind::FileNotFoundandValidationErrorKind::Utf8. - BREAKING:
Validator::validatenow returns the first error instead of an iterator in theErrvariant.
- Optimize error formatting in some cases.
0.25.1 - 2024-10-25
- Re-export
referencing::ErrorasReferencingError. #614
0.25.0 - 2024-10-24
Important: This release removes deprecated old APIs. See the Migration Guide for details on transitioning to the new API.
- BREAKING: Default to Draft 2020-12.
- Deprecated
draft201909,draft202012, andclifeatures. - Deprecated
CompilationOptions,JSONSchema,PathChunkRef,JsonPointerNode, andSchemaResolverErroraliases. - Deprecated
jsonschema::compile,Validator::compile,ValidationOptions::compile,ValidationOptions::with_resolver,ValidationOptions::with_meta_schemas,ValidationOptions::with_documentfunctions. - Deprecated
SchemaResolvertrait.
0.24.3 - 2024-10-24
- Infinite recursion when using mutually recursive
$refinunevaluatedProperties.
0.24.2 - 2024-10-24
- Infinite recursion in some cases. #146
$refinteraction with$recursiveAnchorin Draft 2019-09.unevaluatedPropertieswith$recursiveRef&$dynamicRef.
0.24.1 - 2024-10-21
- Incomplete external reference resolution.
0.24.0 - 2024-10-20
- Support
$ref,$recursiveRef, and$dynamicRefinunevaluatedItems. #287 - Support for
$vocabulary. #263
- Ignore
prefixItemsunder Draft 2019-09 as it was introduced in Draft 2020-12.
- Numbers with zero fraction incorrectly handled in
uniqueItems.
- Speedup
apply.
0.23.0 - 2024-10-12
- Partial support for
unevaluatedItems, excluding references.
- Improve error messages on WASM. #568
- Improve error messages on URI resolving and parsing.
- BREAKING: Replace
JsonPointerin favor ofLocation.
PathChunkRefin favor ofLocationSegment.JsonPointerNodein favor ofLazyLocation.
- Resolving file references on Windows. #441
- Missing annotations from by-reference applicators. #403
- Relative keyword locations missing by-reference applicators (such as
$refor$dynamicRef).
- Faster building of a validator.
- Speedup
hostname&idn-hostnameformats validation. - Speedup
apply.
JsonPointerNode::to_vecwithout a replacement.
0.22.3 - 2024-10-05
- Speedup resolving.
0.22.2 - 2024-10-04
- ECMAScript 262 regex support.
- Speedup
json-pointerandrelative-json-pointerformats validation.
0.22.1 - 2024-10-03
- Removed
dbg!macro.
0.22.0 - 2024-10-03
- Extend email validation. #471
- BREAKING: Custom retrievers now receive
&Uri<&str>instead of&UriRef<&str> - Bump
once_cellto1.20. - Bump
regexto1.11.
timeformat validation (leap seconds and second fractions).durationformat validation.- Panic on root
$idwithout base. #547 hostnameformat validation (double dot).idn-hostnameformat validation. #101
- Faster building of a validator.
- Speedup
hostname,date,time,date-time, anddurationformats validation. - Cache regular expressions for
pattern. #417
0.21.0 - 2024-09-29
Important: This release brings a complete rework of reference resolving which deprecates some older APIs. While backward compatibility is maintained for now, users are encouraged to update their code. See the Migration Guide for details on transitioning to the new API.
$anchorsupport.$recursiveRef&$recursiveAnchorsupport in Draft 2019-09.$dynamicRef&$dynamicAnchorsupport in Draft 2020-12.
- BREAKING: Treat
$refas URI, not URL, and additionally normalize them. #454 - BREAKING: Resolve all non-recursive references eagerly.
- BREAKING: Disallow use of fragments in
$id. #264
SchemaResolvertrait andSchemaResolverErrorin favor of a simplerRetrievethat works withBox<dyn std::error::Error>. In turn, it also deprecatesValidationOptions::with_resolverin favor ofValidationOptions::with_retrieverValidationOptions::with_documentin favor ofValidationOptions::with_resource.
- Infinite recursion in
unevaluatedProperties. #420 - Cross-draft validation from newer to older ones.
- Changing base URI in folder.
- Location-independent identifier in remote resource.
- Missing some format validation for Draft 2020-12.
- Incomplete
iri&iri-referencevalidation.
- Faster validation for
uri,iri,uri-reference, andiri-referenceformats.
0.20.0 - 2024-09-18
Important: This release includes several deprecations and renames. While backward compatibility is maintained for now, users are encouraged to update their code. See the Migration Guide for details on transitioning to the new API.
- New draft-specific modules for easier version-targeted validation:
jsonschema::draft4jsonschema::draft6jsonschema::draft7jsonschema::draft201909jsonschema::draft202012Each module providesnew(),is_valid(), andoptions()functions.
jsonschema::options()function as a shortcut forjsonschema::Validator::options(), that allows for customization of the validation process.
- Make
Debugimplementation forSchemaNodeopaque. - Make
jsonschema::validator_forand related functions returnValidationError<'static>in theirErrvariant. This change makes possible to use the?operator to return errors from functions where the input schema is defined.
- Rename
CompilationOptionstoValidationOptionsfor clarity. - Rename
JSONSchematoValidatorfor clarity. #424 - Rename
JSONPointertoJsonPointerfor consistency with naming conventions. #424 - Rename
jsonschema::compiletojsonschema::validator_for. - Rename
CompilationOptions::compiletoValidationOptions::build.
Old names are retained for backward compatibility but will be removed in a future release.
- Location-independent references in remote schemas on drafts 4, 6, and 7.
0.19.1 - 2024-09-15
ipv4format validation. #512
0.19.0 - 2024-09-14
jsonschema::compileshortcut.
- Bump MSRV to
1.70.
uuidformat validation.- Combination of
unevaluatedPropertieswithallOfandoneOf. #496
clifeature in favor of a separatejsonschema-clicrate.draft201909anddraft202012features. The relevant functionality is now enabled by default.
uuidvalidation viauuid-simd.
0.18.3 - 2024-09-12
- Changing base URI when
$refis present in drafts 7 and earlier. - Removed
dbg!macro.
0.18.2 - 2024-09-11
- Ignoring
$schemain resolved references. - Support integer-valued numbers for
maxItems,maxLength,maxProperties,maxContains,minItems,minLength,minProperties,minContains.
with_meta_schemas()method. Meta schemas are included by default.
0.18.1 - 2024-08-24
ErrorDescription::into_innerto retrieve the innerStringvalue.
0.18.0 - 2024-05-07
- Custom keywords support. #379
- Expose
JsonPointerNodethat can be converted intoJSONPointer. This is needed for the upcoming custom validators support.
- Bump
base64to0.22. - Bump
clapto4.5. - Bump
fancy-regexto0.13. - Bump
fractionto0.15. - Bump
memchrto2.7. - Bump
once_cellto1.19. - Bump
percent-encodingto2.3. - Bump
regexto1.10. - Bump
urlto2.5. - Build CLI only if the
clifeature is enabled. - BREAKING: Extend
CompilationOptionsto support more ways to define custom format checkers (for example in Python bindings). In turn it changesValidationErrorKind::Formatto contain aStringinstead of a&'static str.
- Incorrect
schema_pathwhen multiple errors coming from the$refkeyword #426
- Optimize building
JSONPointerfor validation errors by allocating the exact amount of memory needed. - Avoid cloning path segments during validation.
0.17.1 - 2023-07-05
- Improved error messages for
oneOf/anyOfkeywords. #429
- Improper handling of subschema validation in
unevaluatedProperties. #421
0.17.0 - 2023-03-16
- Bump
base64to0.21. - Bump
fancy-regexto0.11. - Bump
fractionto0.13. - Bump
iso8601to0.6. - Replace
lazy_staticwithonce_cell. - Add support for
unevaluatedProperties. (gated by thedraft201909/draft202012feature flags). #288 - When using the draft 2019-09 or draft 2020-12 specification,
$refis now evaluated alongside other keywords. #378
0.16.1 - 2022-10-20
- Add a compilation option (
should_ignore_unknown_formats()) that allows treating unknown formats as compilation errors.
0.16.0 - 2022-04-21
0.15.2 - 2022-04-10
- Allow HTTP(S) schema resolving with
rustls. #353
0.15.1 - 2022-04-02
- Enable
reqwest/native-tlsby default to avoid validation errors caused byreqwestmissing a TLS backend. #343
0.15.0 - 2022-01-31
- The
SchemaResolvertrait to support resolving external schema references. #246 resolve-filefeature to resolve external schema files viastd::fs. #76
- The
reqwestfeature was changed toresolve-http. #341
- CLI: Use
serde::from_readerinstead ofserde::from_str.
0.14.0 - 2022-01-23
- Bump
itoato1.0. #337
- Optimize the loop implementation used for uniqueness check on short arrays.
- Simplify
equal_arrayshelper. - Shortcut for
falseschemas. - Reduce the number of generated LLVM lines.
- Do less work when resolving fragments.
- Avoid cloning the value when resolving empty fragments.
- Optimize searching by pointer in JSON documents.
0.13.3 - 2021-12-08
- Make
BasicOutput.is_validpublic.
- False positives in some cases when calling
JSONSchema.applyon schemas withadditionalProperties,patternProperties, andpropertiescombined. - False negatives in some cases when calling
JSONSchema.applyon schemas withifandthen(withoutelse) keywords. #318 - Panic in
JSONSchema.applyon some schemas withprefixItemsanditems. It panicked ifitemsis an object and the length ofprefixItemsis greater than the length of the input array.
- Remove unused private field in
JSONSchema, that lead to improvement in the compilation performance. - Optimize the
multipleOfimplementation, which now can short-circuit in some cases. - Add special cases for arrays with 2 and 3 items in the
uniqueItemskeyword implementation. - Remove the
schemaargument from all methods of theValidatetrait.
0.13.2 - 2021-11-04
- Support for
prefixItemskeyword. #303 - Expose methods to examine
OutputUnit.
0.13.1 - 2021-10-28
- Missing
derivefromserde.
0.13.0 - 2021-10-28
uuidformat validator. #266durationformat validator. #265- Collect annotations whilst evaluating schemas. #262
- Option to turn off processing of the
formatkeyword. #261 basic&flagoutput formatting styles. #100- Support for
dependentRequired&dependentSchemaskeywords. #286 - Forward
reqwestfeatures.
- INTERNAL. A new
Draft201909variant for theDraftenum that is available only under thedraft201909feature. This feature is considered private and should not be used outside of the testing context. It allows us to add features from the 2019-09 Draft without exposing them in the public API. Therefore, support for this draft can be added incrementally. - The
Draftenum is now marked asnon_exhaustive. ValidationError::schemawas removed and the calls replaced by proper errors.
- Reduce the size of
PrimitiveTypesBitMapIteratorfrom 3 to 2 bytes. #282 - Use the
bytecountcrate formaxLength&minLengthkeywords, and for thehostnameformat.
0.12.2 - 2021-10-21
- Display the original value in errors from
minimum,maximum,exclusiveMinimum,exclusiveMaximum. #215 - Switch from
chronototime==0.3.3due to RUSTSEC-2020-0159 in oldertimeversions thatchronodepends on.
0.12.1 - 2021-07-29
- Allow using empty arrays or arrays with non-unique elements for the
enumkeyword in schemas. #258 - Panic on incomplete escape sequences in regex patterns. #253
0.12.0 - 2021-07-24
- Support for custom
formatvalidators. #158
- Validators now implement
Displayinstead ofToString. JSONSchemanow owns its data. #145
0.11.0 - 2021-06-19
- Report schema paths in validation errors -
ValidationError.schema_path. #199
- Incorrect encoding of
/and~characters infmt::Displayimplementation forJSONPointer. #233
0.10.0 - 2021-06-17
- BREAKING: Meta-schema validation for input schemas. By default, all input schemas are validated with their respective meta-schemas
and instead of
CompilationErrorthere will be the usualValidationError. #198
CompilationError. UseValidationErrorinstead.
0.9.1 - 2021-06-17
- The
formatvalidator incorrectly rejecting supported regex patterns. #230
0.9.0 - 2021-05-07
- Support for look-around patterns. #183
- Extend the
emailformat validation. Relevant test case from the JSONSchema test suite -email.json.
0.8.3 - 2021-05-05
paths::JSONPointerimplementsIntoIteratoroverpaths::PathChunk.
- Skipped validation on an unsupported regular expression in
patternProperties. #213 - Missing
arraytype in error messages fortypevalidators containing multiple values. #216
0.8.2 - 2021-05-03
- Avoid some repetitive
Stringallocations during validation. - Reduce the number of
RwLock.read()calls in$refvalidators. - Shortcut in the
uniqueItemsvalidator for short arrays. additionalProperties. Use vectors instead ofAHashMapif the number of properties is small.- Special handling for single-item
requiredvalidators. - Special handling for single-item
enumvalidators. - Special handling for single-item
allOfvalidators. - Special handling for single-item
patternPropertiesvalidators without definedadditionalProperties.
- Floating point overflow in the
multipleOfvalidator. Relevant test case from the JSONSchema test suite -float_overflow.json.
0.8.1 - 2021-04-30
- Avoid
Stringallocation inJSONPointer.into_vec. - Replace heap-allocated
InstancePathwith stack-only linked list.
0.8.0 - 2021-04-27
- The
propertyNamesvalidator now contains the parent object in itsinstanceattribute instead of individual properties as strings. - Improved error message for the
additionalPropertiesvalidator. After -Additional properties are not allowed ('faz' was unexpected), before -False schema does not allow '"faz"'. - The
additionalPropertiesvalidator emits a single error for all unexpected properties instead of separate errors for each unexpected property. - Breaking:
ValidationError.instance_pathis now a separate struct, that can be transformed toVec<String>or JSON Pointer of typeString.
- All
instance_pathattributes are pointing to the proper location.
0.7.0 - 2021-04-27
ValidationError.instance_paththat shows the path to the erroneous part of the input instance. It has theVec<String>type and contains components of the relevant JSON pointer.
- Make fields of
ValidationErrorpublic. It allows the end-user to customize errors formatting.
- Reject IPv4 addresses with leading zeroes. As per the new test case in the JSONSchema test suite. More info
- Do not look for sub-schemas inside
constandenumkeywords. Fixes an issue checked by these tests - Check all properties in the
requiredkeyword implementation. #190
- Not used
ValidationErrorKind::Unexpected.
0.6.1 - 2021-03-26
- Incorrect handling of
\wand\Wcharacter groups inpatternkeywords. #180 - Incorrect handling of strings that contain escaped character groups (like
\\w) inpatternkeywords.
0.6.0 - 2021-02-03
- Missing validation errors after the 1st one in
additionalPropertiesvalidators.
- Do not use
rayoninitemskeyword as it gives significant overhead for a general case. - Avoid partially overlapping work in
additionalProperties/properties/patternPropertiesvalidators. #173
0.5.0 - 2021-01-29
- Cache for documents loaded via the
$refkeyword. #75 - Meta schemas for JSON Schema drafts 4, 6, and 7. #28
- Not necessary network requests for schemas with
$idvalues with trailing#symbol. #163
- Enum validation for input values that have a type that is not present among the enum variants. #80
-V/--validatoroptions from the CLI. They were no-op and never worked.
0.4.3 - 2020-12-11
- Make examples in README.md runnable.
0.4.2 - 2020-12-11
- Move
pasteto dev dependencies.
- Number comparison for
enumandconstkeywords. #149 - Do not accept
datestrings with single-digit month and day values. #151
- Some performance related changes were rolled back, due to increased complexity.
0.4.1 - 2020-12-09
- Integers not recognized as numbers when the
typekeyword is a list of multiple values. #147
0.4.0 - 2020-11-09
- Command Line Interface. #102
ToStringtrait implementation for validators.- Define
JSONSchema::optionsto customiseJSONSchemacompilation #131 - Allow user-defined
contentEncodingandcontentMediaTypekeywords
- ECMAScript regex support
- Formats should be associated to Draft versions (ie.
idn-hostnameis not defined on draft 4 and draft 6)
0.3.1 - 2020-06-21
- Enable Link-Time Optimizations and set
codegen-unitsto 1. #104
itemsallows the presence of boolean schemas. #115
0.3.0 - 2020-06-08
- JSONSchema Draft 4 support (except one optional case). #34
- CI builds. #35 and #36
- Implement specialized
is_validmethods for all keywords. - Use
rayoninitemskeyword validation. - Various
clippylints. #66 Debugimplementation forJSONSchemaandResolver. #97Defaultimplementation forDraft.
- Do not pin dependencies. #90
- Use
to_stringinstead offormat!. #85 - Cache compiled validators in
$refkeyword. #83 - Use bitmap for validation of multiple types in
typekeyword implementation. #78 - Return errors instead of unwrap in various locations. #73
- Improve debug representation of validators. #70
- Reduce the number of
matchstatements during compilation functions resolving. - Use
expectinstead ofunwrapfor known cases when it is known that the code won't panic. - Add specialized validators for all
formatcases. - Reuse
DEFAULT_SCOPEduring reference resolving. - Replace some
Value::as_*calls withif let. - Inline all
compilefunctions. - Optimize
formatkeyword compilation by using static strings. - Optimize compilation of
true,falseand$refvalidators. - Reuse parsed
DEFAULT_ROOT_URLinJSONSchema::compile. - Avoid string allocation during
scopeparsing inJSONSchema::compile. - Refactor benchmark suite
- Use
BTreeSetinadditionalPropertieskeyword during compilation to reduce the amount of copied data. #91
- Wrong implementation of
is_validforadditionalProperties: falsekeyword case. #61 - Possible panic due to type conversion in some numeric validators. #72
- Precision loss in
minimum,maximum,exclusiveMinimumandexclusiveMaximumvalidators. #84
0.2.0 - 2020-03-30
- Implement
is_validfor various validators. - Implement
ErrorandDisplayforCompilationError
- Debug representation & error messages in various validators.
- Make
ErrorIteratorSyncandSend.
- Return
CompilationErroron invalid input schemas instead of panic.
- Initial public release