json-validator.de

Ratgeber · JSON Schema 2020-12

Ajv, Zod oder Yup: welche Validation-Library für dein Projekt?

Ajv für Standard-Compliance + Maximum Performance. Zod für TS-Apps mit Type-Inference. Yup für klassische Formular-Validierung mit YAML-artiger DSL.

Foto von Mateusz Viola

Von Mateusz Viola

Betreiber & redaktionelle Verantwortung json-validator.de

Drei Library-Familien

Die drei Bibliotheken bedienen unterschiedliche Use-Cases:

LibrarySchema-FormatPrimäres Use-Case
AjvJSON Schema (Standard)Backend, Cross-Language, höchste Performance
ZodTypeScript-Code (Builder)Frontend, TS-only-Apps, Type-Inference
YupJavaScript-Code (Builder)Formik-Formulare, JS-only

Ajv - der Standard-konforme Workhorse

Ajv ist die schnellste JSON-Schema-Library für JavaScript. Über 90 % der npm-Pakete die JSON-Validation brauchen, nutzen Ajv unter der Haube (Fastify, AWS-SDK, viele OpenAPI-Tools).

import Ajv from 'ajv';
const ajv = new Ajv();
const validate = ajv.compile({
  type: 'object',
  required: ['email'],
  properties: { email: { type: 'string', format: 'email' } }
});
if (!validate(data)) console.log(validate.errors);

Stärken: Standard-konform (cross-language Schemas möglich), maximale Performance (kompiliert Schemas in JS-Code), riesige Plugin-Welt (ajv-formats, ajv-keywords, ajv-errors).

Schwächen: Keine TS-Type-Inference (Schema und Type doppelt schreiben oder generieren), Schema als JSON-String wirkt verbose im TS-Code.

Zod - der TypeScript-First-Liebling

Zod ist eine TS-Library mit Builder-API. Schemas werden in TypeScript-Code geschrieben, Types lassen sich daraus ableiten.

import { z } from 'zod';

const userSchema = z.object({
  email: z.string().email(),
  age: z.number().int().positive()
});

type User = z.infer<typeof userSchema>;

const parsed = userSchema.safeParse(data);
if (parsed.success) console.log(parsed.data);
else console.log(parsed.error.issues);

Stärken: Type-Inference (kein doppeltes Schreiben), exzellente DX in modernen TS-Stacks, gute Fehlermeldungen.

Schwächen: Nicht standardisiert - Schema-Definition lebt im TS-Code, kein direkter Export nach JSON Schema (es gibt zod-to-json-schema, hat aber Limitierungen), langsamer als Ajv.

Yup - der Formik-Begleiter

Yup nutzt ebenfalls eine Builder-API, ist aber älter und weniger TS-zentriert. Hat eine intuitive when()-Funktion für konditionelle Validation.

import * as yup from 'yup';

const schema = yup.object({
  email: yup.string().email().required(),
  age: yup.number().integer().positive(),
  newsletter: yup.boolean(),
  newsletterEmail: yup.string().when('newsletter', {
    is: true,
    then: (s) => s.email().required()
  })
});

await schema.validate(data);

Stärken: Sehr breite Verbreitung in React-Formularen (Formik, react-hook-form), gute Doku, intuitive when()-Syntax.

Schwächen: Type-Inference ist da, aber weniger ausgereift als Zod, Performance liegt unter Ajv, kein JSON-Schema-Export.

Performance-Vergleich (Indikativ)

Realistische Werte aus Benchmarks (Anfang 2026, Validate eines mittleren User-Schemas):

LibraryValidations / SekundeAnmerkung
Ajv (pre-compiled)~5.000.000Mit standalone Code-Generation noch schneller
Zod~250.000Reicht für 99 % der Frontend-Use-Cases
Yup~120.000Reicht für UI-Formulare

Faustregel: bei API-Backends Ajv (Performance + Standard). Bei Frontend/TS-Apps Zod (DX). Yup nur in Bestands-Code halten oder wenn Formik-Integration eine Anforderung ist.

Entscheidungs-Matrix

Use-CaseEmpfehlung
REST-API-Backend (Express, Fastify)Ajv
OpenAPI 3.1 → Stand-alone-ValidatorAjv
Cross-Language (TS Backend + Python Worker)Ajv (gemeinsame JSON Schema-Files)
Next.js / Remix Server-ActionsZod
React-Formular mit react-hook-formZod (via @hookform/resolvers/zod)
Legacy Formik-CodebaseYup

Mehr zum Thema