Many libraries implement the Standard Schema interface, which allows many other libraries to accept them without needing to specialise for each library.
Copy to clipboardimport { personSchema } from "./schemas"; const person = await upfetch(url, { schema: personSchema, });
Copy to clipboardimport { personSchema } from "./schemas"; const person = await upfetch(url, { schema: personSchema });
We benchmark the time taken to parse using a standard schema.
Info
Some libraries require an adapter before they can be used as a standard schema. The time to convert the schema is not measured, only the time to parse using it.
| Library | Version | /wk | Optimizations | Error type | Mean | Compare | |||
|---|---|---|---|---|---|---|---|---|---|
@paseri/compiler | Code snippet | 0.7.7 | 110 | Precompiled | All errors | 963 ns | |||
zod (compile) | Code snippet(Setup code is not benchmarked) | 4.6.5 | n/a | JIT | All errors | 1 μs | 1.23x | ||
zod/mini (compile) | Code snippet(Setup code is not benchmarked) | 4.6.5 | n/a | JIT | All errors | 1 μs | 1.27x | ||
sury | Code snippet | 11.0.0 | n/a | JIT | All errors | 2 μs | 1.61x | ||
ata-validator | Code snippet | 1.21.0 | n/a | JIT | All errors | 2 μs | 1.66x | ||
zod-compiler (compact) | Code snippet | 2.0.4 | n/a | Precompiled | All errors | 2 μs | 2.18x | ||
@paseri/paseri | Code snippet | 1.9.7 | 136 | None | All errors | 3 μs | 3.49x | ||
zod-compiler | Code snippet | 2.0.4 | n/a | Precompiled | All errors | 4 μs | 3.7x | ||
zod-compiler (bag) | Code snippet | 2.0.4 | n/a | Precompiled | All errors | 4 μs | 3.76x | ||
zod | Code snippet | 4.6.5 | n/a | JIT | All errors | 6 μs | 6.21x | ||
typia | Code snippet(Setup code is not benchmarked) | 14.0.6 | n/a | Precompiled | All errors | 7 μs | 6.87x | ||
valibot | Code snippet | 1.5.0 | n/a | None | All errors | 7 μs | 7.36x | ||
arktype | Code snippet | 2.2.3 | n/a | JIT | All errors | 8 μs | 8.29x | ||
@remix-run/data-schema | Code snippet | 0.3.0 | n/a | None | All errors | 9 μs | 9.26x | ||
effect@rc | Code snippet(Setup code is not benchmarked) | 4.0.0-rc.112 | n/a | None | Abort early | 11 μs | 11.56x | ||
effect@rc | Code snippet(Setup code is not benchmarked) | 4.0.0-rc.112 | n/a | None | All errors | 11 μs | 11.74x | ||
zod/mini | Code snippet | 4.6.5 | n/a | JIT | All errors | 12 μs | 12.62x | ||
zod/v3 | Code snippet | 4.6.5 | n/a | None | All errors | 13 μs | 13.68x | ||
decoders | Code snippet | 2.9.3 | n/a | None | All errors | 16 μs | 16.24x | ||
@railway-ts/pipelines | Code snippet | 0.1.29 | n/a | None | All errors | 16 μs | 16.81x | ||
effect | Code snippet(Setup code is not benchmarked) | 3.22.2 | n/a | None | All errors | 17 μs | 17.76x | ||
effect | Code snippet(Setup code is not benchmarked) | 3.22.2 | n/a | None | Abort early | 17 μs | 17.92x | ||
joi | Code snippet | 18.2.9 | n/a | None | All errors | 37 μs | 38.69x | ||
yup | Code snippet | 1.7.1 | n/a | None | All errors | 134 μs | 138.64x | ||