All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Release notes for v0.4.3 and earlier are published on GitHub Releases.
v0.6.0 - 2026-10-08
Struct,ValidandValidateAsvalidate the struct elements of slice, array and map fields against the element type's own tags, withoutdive, the way nested struct fields already were. Failures are reported asfield[i].suborfield[key].sub; a nil pointer element validates as the zero value; cross-field rules inside an element resolve among the element's fields. Inputs whose elements were silently accepted before now fail.Check,CheckType,StructandValidreport invalid tags on collection element types, namedfield[].sub.
v0.5.0 - 2026-09-02
Valuesmaps a key that appears more than once to a[]string, so repeated form parameters validate withdiveand bind into slice fields.- The sentinel errors and the
RuleError,RulesErrorandBindErrortypes are consolidated inerrors.go; names and package are unchanged, so importers need no source change. - The expression and plan caches insert in O(1) and are cleared at 10000 entries instead of copying the whole table on every insert.
regexandnot_regexcompile their pattern once per expression.is.TimeZonecaches lookups.
Mapwith a string-keyed map such asmap[string]stringno longer renders, sorts and boxes every entry.- Building rule text per request no longer costs a copy of every cached expression.
- Input sources are unified behind an internal source interface.
data.gorenamed tobind.go.runtime_error.gomerged intoerrors.go.