colinhacks/zod
Zod
✨ https://zod.dev ✨
TypeScript-first schema validation with static type inference
Featured sponsor: Jazz
Read the docs →
What is Zod?
Zod is a TypeScript-first validation library. Define a schema and parse some data with it. You’ll get back a strongly typed, validated result.
|
|
Features
- Zero external dependencies
- Works in Node.js and all modern browsers
- Tiny:
2kbcore bundle (gzipped) - Immutable API: methods return a new instance
- Concise interface
- Works with TypeScript and plain JS
- Built-in JSON Schema conversion
- Extensive ecosystem
Installation
|
|
Basic usage
Before you can do anything else, you need to define a schema. For the purposes of this guide, we’ll use a simple object schema.
|
|
Parsing data
Given any Zod schema, use .parse to validate an input. If it’s valid, Zod returns a strongly-typed deep clone of the input.
|
|
Note — If your schema uses certain asynchronous APIs like async refinements or transforms, you’ll need to use the .parseAsync() method instead.
|
|
Handling errors
When validation fails, the .parse() method will throw a ZodError instance with granular information about the validation issues.
|
|
To avoid a try/catch block, you can use the .safeParse() method to get back a plain result object containing either the successfully parsed data or a ZodError. The result type is a discriminated union, so you can handle both cases conveniently.
|
|
Note — If your schema uses certain asynchronous APIs like async refinements or transforms, you’ll need to use the .safeParseAsync() method instead.
|
|
Inferring types
Zod infers a static type from your schema definitions. You can extract this type with the z.infer<> utility and use it however you like.
|
|
In some cases, the input & output types of a schema can diverge. For instance, the .transform() API can convert the input from one type to another. In these cases, you can extract the input and output types independently:
|
|