← All open source projects

Zod

colinhacks/zod

Zod is a TypeScript-first schema validation library with static type inference.

Forks 2,044
Author colinhacks
Language TypeScript
License MIT
Synced 2026-06-27

What it is

Zod is a schema and validation library for TypeScript and JavaScript. Its idea is to describe data shape in code and get runtime validation plus a TypeScript type.

The project became popular because TypeScript does not validate external data at runtime. JSON from an API, a form, environment variables, or queue messages may not match expected types.

What is inside

The repository implements schemas for strings, numbers, objects, arrays, unions, transforms, errors, and type inference.

Zod often becomes a trust boundary: external data passes through a schema, and the rest of the code receives a checked value with a clear type.

How it is used

Developers use Zod for forms, server routes, configuration, API clients, model response validation, and checks before writes.

In large projects, schemas should not become noisy duplicates of the domain model. They work best at real application boundaries.

Strengths and limits

The strength is connecting runtime validation with static types. It reduces the gap between what types promise and what data actually contains.

The limitation is validation cost and large-schema complexity. Huge structures in hot code paths need performance attention.

For teams, Zod can become a shared contract language for forms, APIs, and server logic.

The practical value of Zod is easiest to see through a small verifiable scenario: take the task the project was made for and follow it to a result. Zod lets developers describe a data schema once and get both runtime validation and a TypeScript type from it. That separates real usefulness from a nice description.

If Zod stays in use beyond the first experiment, maintenance starts to matter as much as features: updates, clear responsibility boundaries, testable examples, and the project’s place in the existing system. That is where real strengths and limits usually appear.

Example

Схема пользователя в Zod

Пример показывает главный прием: схема проверяет входные данные и одновременно дает TypeScript-тип.

Language: TypeScript
import { z } from 'zod'

const User = z.object({
  id: z.string().uuid(),
  email: z.string().email(),
  age: z.number().int().optional(),
})

type User = z.infer<typeof User>
const user = User.parse(input)