Valibot
Para validar datos desconocidos en tiempo de ejecución con tipado seguro y un coste de bundle muy bajo.
Librería modular de validación de esquemas para TypeScript, con tipado seguro y tamaño de bundle mínimo.
Notas y contexto
Qué es
Valibot es una librería open source de validación de esquemas para TypeScript, creada por Fabian Hiller y mantenida bajo la organización open-circle en GitHub. Permite describir la forma de los datos mediante esquemas que se ejecutan en tiempo de ejecución, garantizando que los valores reales coinciden con los tipos esperados. Su diseño es completamente modular y sin dependencias, lo que le permite funcionar en cualquier entorno JavaScript. Se distribuye bajo licencia MIT.
Para qué sirve
- Validar la entrada de formularios, peticiones de API o variables de entorno antes de usarlas.
- Inferir tipos de TypeScript automáticamente a partir del esquema, evitando duplicar definiciones.
- Transformar y normalizar datos durante la validación (recortar cadenas, convertir tipos, etc.).
- Reducir el tamaño del bundle en aplicaciones cliente y entornos serverless donde cada kilobyte cuenta.
Cuándo usarlo
Es ideal cuando necesitas validación de esquemas con tipado seguro pero te preocupa el peso del bundle, por ejemplo en el frontend, en funciones edge o serverless. Gracias a su API modular y al tree-shaking, solo entra en el bundle el código que realmente usas. La alternativa más conocida es Zod, que ofrece una API encadenada más extendida; Valibot puede reducir el tamaño hasta un 95 % frente a Zod, a cambio de un estilo de API basado en composición de funciones.
Ejemplo
Instalación y validación básica de un objeto:
npm install valibot
import * as v from 'valibot';
const UserSchema = v.object({
email: v.pipe(v.string(), v.email()),
age: v.pipe(v.number(), v.minValue(18)),
});
type User = v.InferOutput<typeof UserSchema>;
const result = v.safeParse(UserSchema, {
email: 'ana@example.com',
age: 25,
});
if (result.success) {
console.log(result.output);
} else {
console.log(result.issues);
}
Puntos clave
- API modular: solo se incluye en el bundle lo que importas, con un tamaño base inferior a 700 bytes.
- Inferencia estática de tipos: el tipo de TypeScript se deriva directamente del esquema.
- Sin dependencias y con 100 % de cobertura de tests, ejecutable en cualquier entorno JavaScript.
Ten en cuenta
Su API basada en composición de funciones (v.pipe, v.object, etc.) resulta menos familiar si vienes de la sintaxis encadenada de Zod, y obliga a importar cada validador por separado. Para proyectos donde el tamaño del bundle no es crítico, Zod sigue siendo una alternativa válida con un ecosistema más amplio. Consulta la documentación oficial para conocer la API completa y las últimas novedades.