Universal adapter for schema validation
β¨ https://typeschema.com β¨
Quickstart Β Β β’Β Β Coverage Β Β β’Β Β API Β Β β’Β Β GitHub Β Β β’Β Β npm
When fetching data from an external source, it's important to verify its integrity. This happens when processing user inputs, calling third-party APIs, loading configuration files, and so on. And the thing is: Typescript doesn't come with runtime validation. Any type assertions are removed at compile-time.
As a result, developers turn to third-party validation libraries. But that landscape is fragmented, lacking a single best option. Each offers different trade-offs on developer experience, bundle size, and community support.
TypeSchema enables writing code that works with any validation library out-of-the-box. It provides a universal adapter for interacting with any validation schema, decoupling from implementation specifics and increasing compatibility.
import {validate} from '@typeschema/main';
import {z} from 'zod';
import {string} from 'valibot';
const zodSchema = z.string();
await validate(zodSchema, '123');
// ^? {success: true, data: '123'}
const valibotSchema = string();
await validate(valibotSchema, 123);
// ^? {success: false, issues: [...]}
We value flexibility, which is why there are multiple ways of using TypeSchema:
- Using an adapter directly (e.g.
@typeschema/valibot
): Best pick for end developers, when the validation library is known ahead of time. This is particularly useful for supporting more validation libraries on tRPC. - Handpicking adapters with
@typeschema/main
: Recommended for library maintainers. Any validation library can be used, but adapters have to be explicitly installed. This allows end developers to trade-off between coverage and bundle size. - Batteries included with
@typeschema/all
: Easiest to use. All adapters are automatically installed, including future ones. This is a drop-in replacement for the deprecated@decs/typeschema
.
Project | Popularity | Infer |
InferIn |
Validation | Serialization | Adapter | Downloads |
---|---|---|---|---|---|---|---|
zod | β | β | β | β | @typeschema/zod |
||
yup | β | β | β | β | @typeschema/yup |
||
joi | π§ | π§ | β | β | @typeschema/joi |
||
ajv | β | β | β | β | @typeschema/json |
||
class-validator | β | β | β | π§ | @typeschema/class-validator |
||
effect | β | β | β | β | @typeschema/effect |
||
superstruct | β | π§ | β | π§ | @typeschema/superstruct |
||
io-ts | β | β | β | π§ | @typeschema/io-ts |
||
valibot | β | β | β | β | @typeschema/valibot |
||
typebox | β | β | β | β | @typeschema/typebox |
||
typia | β | β | β | π§ | @typeschema/function |
||
arktype | β | β | β | π§ | @typeschema/arktype |
||
ow | β | β | β | π§ | @typeschema/ow |
||
deepkit | π§ | π§ | β | π§ | @typeschema/deepkit |
||
runtypes | β | β | β | π§ | @typeschema/runtypes |
||
fastest-validator | π§ | π§ | β | π§ | @typeschema/fastest-validator |
||
vine | β | β | β | π§ | @typeschema/vine |
||
suretype | β | β | β | β | @typeschema/suretype |
||
valita | β | β | β | π§ | @typeschema/valita |
Note
Don't see your favorite validation library? We welcome PRs! Otherwise, please file an issue to help us prioritize. π
Infer<TSchema>
: Extracts the output type of a schemaInferIn<TSchema>
: Extracts the input type of a schema
wrap(schema)
: Returns the wrapped schema with access to its operationsvalidate(schema, data)
: Returns the validated data or a list of validation issuesassert(schema, data)
: Returns the validated data or throws anAggregateError
toJSONSchema(schema)
: Converts the schema into the equivalent JSON schema
- Inspired by tRPC's input & output validators
- Adapter architecture inspired by @ecyrbe's suggestions
- API definition inspired by @colinhacks's proposal
- Logo designed by flaticon