Вышел Zod 4.5: Предварительная компиляция схем и сокращение памяти почти в 10 раз 🚀
Zod 4.5: новые API, ускорение safeParse, ленивое связывание методов и JIT-компиляция схем через z.compile().

Команда Zod выкатила минорный, но фундаментальный релиз 4.5. Под капотом проделали большую работу над оптимизацией рантайма и потреблением ресурсов.
Вот главные новинки и избавление от лишнего балласта:
- Новые API и утилиты: Добавили нативную валидацию
z.creditCard(), методыz.deepPartial()/.exactPartial(), а также быстрый флагz.validate(): boolean(простая проверка валидности без полного парсинга объекта, работает до 16 раз быстрее на битых данных). - Ускорение
safeParseпри ошибках: Раньше при сбое валидации Zod создавал полноценныйJavaScript Errorсо сборкой stack trace. ВsafeParseсборку стек-трейса отключили — ошибочный путь парсинга ускорился в ~7.5 раз. - Сокращение heap-памяти в 9 раз: Изменили внутреннюю архитектуру вызова методов. Вместо привязки (
.bind()) всех методов схемы при её создании, Zod 4.5 использует ленивую мемоизацию (lazy method binding). В итоге объем удерживаемой памяти на один экземпляр схемы упал с ~7.5 КБ до 784 байт.
🔥 Главная фича — z.compile()
Зачем она нужна и почему это круто?
Раньше Zod работал исключительно в интерпретируемом режиме: каждый раз при вызове .parse(data) он динамически обходил дерево вашей схемы, на каждом узле проверял типы, рекурсивно спускался по вложенным объектам, применял трансформации и формировал массив ошибок. Это удобно и гибко, но на высоких нагрузках (API-серверы, парсинг тяжелых JSON-стримов, форма с сотнями полей) динамический обход дерева становился бутылочным горлышком CPU.
Что делает z.compile()?
Функция z.compile(schema) берёт декларативную структуру Zod и генерирует из неё JIT-скомпилированную валидационную функцию (через динамическую сборку кода под капотом).
Например следующая схема:
const Point = z.object({
x: z.number(),
y: z.number(),
});
Компилируется в следующую функцию:
const isPoint = new Function(
"input",
`
if (typeof input !== "object" || input === null) return false;
if (typeof input.x !== "number") return false;
if (typeof input.y !== "number") return false;
return true;
`,
);
Также можно включить автокомпиляцию глобально для всех схем в проекте, просто импортировав "zod/compile" в точке входа.
Почему это круто?
- Прирост скорости в 3–9 раз: Компилятор убирает оверхед на динамический обход AST-дерева Zod. Вызов
parse()сразу выполняет прямолинейный, максимально оптимизированный код проверки полей. Чем сложнее и глубже схема (объекты, массивы, union-типы), тем выше буст. - Нулевые изменения в API: Скомпилированная схема
CompiledUserполностью сохраняет интерфейс обычной Zod-схемы — не нужно переписывать методы или менять архитектуру приложения. - Ответ конкурентам (Ajv, TypeBox): Исторически Zod проигрывал в бенчмарках решениям вроде Ajv (которые валидируют JSON Schema через Ahead-of-Time / JIT компиляцию). С появлением
z.compile()Zod нивелирует этот отставание по перформансу, сохраняя при этом привычный DX и строгий TypeScript-first подход.