Back

Erste Schritte mit Valibot

Erste Schritte mit Valibot

TypeScript bietet Ihnen Typsicherheit zur Kompilierzeit, kann Sie jedoch nicht zur Laufzeit schützen. Wenn Daten aus einem Formular, einer API-Antwort oder einer Konfigurationsdatei eintreffen, sind die TypeScript-Typen bereits verschwunden. Diese Lücke schließen Schema-Validierungsbibliotheken – und genau hier glänzt Valibot.

Dieser Leitfaden führt Sie durch die Grundlagen von Valibot: Was es ist, wie es funktioniert und wie Sie es für die TypeScript-Schema-Validierung in realen Frontend-Projekten einsetzen können.

Wichtigste Erkenntnisse

  • Valibot ist eine modulare, TypeScript-orientierte Schema-Validierungsbibliothek, die Daten zur Laufzeit validiert und statische Typen aus Ihren Schemas ableitet.
  • Ihre Tree-Shaking-fähige Architektur hält Bundle-Größen minimal – oft etwa ~1 KB nach Tree-Shaking – was sie ideal für Frontend-Anwendungen macht.
  • Die pipe-Funktion ermöglicht komponierbare Validierungs-Pipelines mit klaren, feldspezifischen Fehlermeldungen.
  • Valibot lässt sich gut mit gängigen Formular-Bibliotheken integrieren und unterstützt JSON-Schema-Ausgabe über ein Begleitpaket für API-Dokumentation.

Was ist Valibot und warum sollte man es verwenden?

Valibot ist eine modulare, TypeScript-orientierte Schema-Validierungsbibliothek. Sie validiert unbekannte Daten zur Laufzeit und leitet statische TypeScript-Typen aus Ihren Schemas ab, sodass Ihr Schema zur einzigen Quelle der Wahrheit sowohl für Laufzeitsicherheit als auch für Kompilierzeit-Typen wird.

Was Valibot auszeichnet, ist seine Architektur. Anstelle eines großen Objekts mit verketteten Methoden (der Ansatz, den Zod verfolgt), ist Valibot aus vielen kleinen, unabhängigen Funktionen aufgebaut. Bundler können alles entfernen, was Sie nicht verwenden (Tree-Shaking), wodurch Ihr Produktions-Bundle minimal bleibt – oft etwa ~1 KB je nach Verwendung. Das ist ein bedeutender Vorteil in Frontend-Anwendungen, wo die Bundle-Größe sich direkt auf die Ladezeit auswirkt.

Valibot ist stabil, wird aktiv gewartet und liegt in Version 1+, was es zu einer soliden Wahl für den Produktionseinsatz macht.

Ihr erstes Valibot-Schema definieren

Die Definition eines Schemas in Valibot ähnelt dem Schreiben eines TypeScript-Typs, wird aber zur Laufzeit ausgeführt:

import * as v from 'valibot'

const LoginSchema = v.object({
  email: v.string(),
  password: v.string(),
})

Sie können dann einen TypeScript-Typ direkt aus dem Schema ableiten:

type LoginData = v.InferOutput<typeof LoginSchema>
// { email: string; password: string }

Keine Duplikation. Ihr Schema und Ihr Typ bleiben automatisch synchron.

Daten parsen und validieren

Valibot bietet Ihnen zwei Hauptmethoden zur Datenvalidierung.

parse wirft einen Fehler, wenn die Validierung fehlschlägt:

const data = v.parse(LoginSchema, { email: 'jane@example.com', password: '12345678' })

safeParse gibt stattdessen ein Ergebnisobjekt zurück, was nützlich ist, wenn Sie Fehler ohne try/catch behandeln möchten:

const result = v.safeParse(LoginSchema, { email: '', password: '' })

if (!result.success) {
  console.log(result.issues) // Strukturierte Fehlerdetails
}

Für die Formularvalidierung ist safeParse normalerweise die bessere Wahl – es hält die Fehlerbehandlung sauber und vorhersehbar.

Komponierbare Validierungs-Pipelines

Die pipe-Funktion von Valibot ermöglicht es Ihnen, Validierungs- und Transformationsschritte zu verketten. Eine Pipeline beginnt immer mit einem Basis-Schema, gefolgt von Aktionen, die nacheinander ausgeführt werden:

const EmailSchema = v.pipe(
  v.string('E-Mail muss eine Zeichenkette sein.'),
  v.nonEmpty('Bitte geben Sie Ihre E-Mail ein.'),
  v.email('Ungültiges E-Mail-Format.')
)

Jede Aktion erhält die Ausgabe der vorherigen. Dies macht es einfach, Regeln wie Mindestlänge, spezifische Formate oder benutzerdefinierte Einschränkungen durchzusetzen – alles mit klaren, feldspezifischen Fehlermeldungen, die Sie kontrollieren.

Valibot vs. Zod: Der wesentliche Unterschied

Beide Bibliotheken lösen dasselbe Kernproblem. Der praktische Unterschied liegt in der Designphilosophie und den Auswirkungen auf die Bundle-Größe.

MerkmalValibotZod
Bundle-Größe~1 KB+ (tree-shaken)~10–15 KB
Tree-Shaking-fähig✅ Vollständig⚠️ Teilweise
API-StilFunktional, komponierbarMethod-Chaining
TypeScript-Inferenz

Wenn Sie bereits Zod verwenden, ist die Migration unkompliziert – die Konzepte sind eng verwandt, und die Valibot-Dokumentation enthält Anleitungen für Entwickler, die den Wechsel vollziehen.

Ökosystem und wie es weitergeht

Valibot lässt sich gut mit gängigen Formular-Bibliotheken integrieren. Die Superforms-Bibliothek für SvelteKit bietet erstklassige Valibot-Unterstützung, und Adapter existieren für React Hook Form und andere Tools.

Für Teams, die JSON-Schema-Ausgabe benötigen – für API-Dokumentation oder OpenAPI-Spezifikationen – übernimmt das separate Paket @valibot/to-json-schema diese Aufgabe. Internationalisierung für Fehlermeldungen wird ebenfalls über @valibot/i18n unterstützt, was Valibot praktisch für mehrsprachige Anwendungen macht.

Fazit

Valibot bietet Ihnen Typsicherheit zur Laufzeit, saubere TypeScript-Inferenz und einen minimalen Footprint – ohne den Overhead schwergewichtigerer Alternativen. Installieren Sie es, definieren Sie ein Schema, und lassen Sie Ihre Validierungslogik zum Fundament werden, auf dem Ihre Typen aufbauen.

npm install valibot

Von dort aus können Ihre Schemas mit Ihrer Anwendung wachsen – von einfachen String-Prüfungen bis hin zu komplexen verschachtelten Objekten – ohne jemals Ihr Bundle aufzublähen.

Häufig gestellte Fragen (FAQs)

Ja. Valibot unterstützt verschachtelte Objekte durch Verwendung von v.object innerhalb eines anderen v.object und Arrays durch v.array. Sie können diese mit pipe kombinieren, um Einschränkungen auf jeder Verschachtelungsebene hinzuzufügen, und der abgeleitete TypeScript-Typ wird automatisch die vollständige verschachtelte Struktur widerspiegeln.

Absolut. Valibot läuft in jeder JavaScript-Umgebung und funktioniert daher sowohl auf dem Client als auch auf dem Server. Sie können es zur Validierung von Formularübermittlungen in Server Actions, API-Route-Handlern oder Middleware verwenden. Seine geringe Größe macht es besonders gut geeignet für Edge-Runtimes mit strengen Bundle-Limits.

Sie können die v.check-Aktion innerhalb einer pipe verwenden, um benutzerdefinierte Logik zu definieren. Sie akzeptiert eine Funktion, die true oder false zurückgibt, zusammen mit einer Fehlermeldung. Für Transformationen ermöglicht v.transform die Modifikation der validierten Ausgabe. Beide integrieren sich nahtlos in jede Validierungs-Pipeline.

Nicht besonders. Die Kernkonzepte wie Schemas, Parsing und Typ-Inferenz sind zwischen beiden Bibliotheken eng verwandt. Die Hauptveränderung besteht im Wechsel von Method-Chaining zu einem funktionalen Stil mit eigenständigen Funktionen. Die Valibot-Dokumentation bietet Migrations-Anleitungen, um den Prozess zu vereinfachen.

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay