⚠️ Note: Until #497 is resolved, some of the benchmarks in this repo are comparing apples-to-oranges due to the different APIs provided by validation libraries. Libraries which provide more functionality (like transformations, coercions, detailed errors) might be penalized for slower performance for those extra features.
- ajv
- bueno
- class-validator + class-transformer
- computed-types
- decoders
- io-ts
- jointz
- json-decoder
- marshal
- @mojotech/json-type-validaton
- myzod
- purify-ts
- rulr
- runtypes
- simple-runtypes
- superstruct
- suretype
- toi
- ts-interface-checker
- ts-json-validator
- ts-utils
- @typeofweb/schema
- valita
- yup
- zod
These packages are capable of validating the data for type correctness.
E.g. if string
was expected, but a number
was provided, the validator should fail.
It has a validator function or method that returns a valid type casted value or throws.
const data: any = {}
// `res` is now type casted to the right type
const res = isValid(data)
Or it has a type guard function that in a truthy block type casts the value.
const data: any = {}
function isMyDataValid(data: any) {
// isValidGuard is the type guard function provided by the package
if (isValidGuard(data)) {
// data here is "guarded" and therefore inferred to be of the right type
return data
}
throw new Error('Invalid!')
}
// `res` is now type casted to the right type
const res = isMyDataValid(data)
Because some packages are so performant it makes it difficult to see the benchmarks for other packages.
This benchmark run includes all of the above packages, but excludes marshal
, suretype
, and ts-json-validator
.