eduardweb.
Ajutor & ÎntrebăriIntermediar#typescript#serverless#performanta#zod#valibot

Zod vs Valibot la ~50 de scheme: Merită chinul migrării pentru bundle size?

De Ana Ionescu, 19 iun. 2026 · 16 vizualizări · 3 like-uri

Postat 19 iun. 2026

Salutare tuturor. M-am lovit recent de o dilemă destul de spinoasă pe un proiect și m-am gândit că sigur s-a mai bătut cineva de aici de problema asta.

Avem un API modularizat, rulat pe AWS Lambda, cu vreo 8 microservicii destul de micuțe. În total, am strâns în jur de 50 de scheme de validare scrise cap-coadă cu Zod. Nimic fancy, clasicele validări de payload-uri de request, transformări de date și niște mapări pentru baza de date.

Problema? Cold start-ul pe Lambda ne cam dă bătăi de cap, mai ales pe funcțiile scrise în TypeScript unde fiecare milisecundă și fiecare kilobyte contează. Zod e minunat ca DX, dar când te uiți pe bundle-ul final, observi că trage după el toată librăria de fiecare dată, adică vreo 15-120 KB în funcție de cum e configurat bundler-ul (esbuild în cazul nostru). Aici intervine Valibot, care promite un tree-shaking agresiv datorită design-ului său modular.

De ce ne face cu ochiul Valibot

Am făcut un mic test de concept pe o singură funcție Lambda izolată. Cu Zod, bundle-ul final compilat avea în jur de 55 KB. Doar înlocuind importurile cu cele din Valibot, dimensiunea a scăzut la 12 KB. Este o diferență masivă când ai sute de mii de execuții pe zi și vrei să storci maximum de performanță.

Principiul lor e simplu. În loc de abordarea fluentă a lui Zod (unde metodele sunt legate de prototipul obiectului):

const schema = z.string().min(3).email();

Valibot folosește funcții pure, ceea ce permite bundler-ului să elimine codul nefolosit:

const schema = v.pipe(v.string(), v.minLength(3), v.email());

Trade-off-ul sincer: DX vs Performanță

Zod este rege când vine vorba de ecosistem. Orice librărie modernă de TypeScript (de la tRPC la React Hook Form sau Fastify) are suport nativ sau plugin-uri gata scrise pentru Zod. Dacă trecem pe Valibot, s-ar putea să fim nevoiți să scriem manual niște adaptoare sau să facem workaround-uri urâte.

În plus, sintaxa din Valibot, deși curată, devine destul de „încărcată” și greu de citit când ai scheme complexe, adânc imbricate, cu mesaje de eroare customizate pentru fiecare regulă.

Întrebarea pentru comunitate

A trecut cineva prin procesul ăsta de migrare la un proiect aflat deja în producție?

Mă interesează în mod special trei aspecte:

  1. Cât de mult v-a luat rescrierea efectivă a celor ~50 de scheme? Există vreun codemod semi-automatizat care chiar își face treaba sau e muncă de chinez bătrân la tastatură?
  2. Ați observat probleme de stabilitate sau cazuri ciudate la validarea de tipuri complexe (de exemplu, uniuni disjuncte sau transformări asincrone)?
  3. Chiar s-a simțit o îmbunătățire reală a cold start-ului în AWS Lambda / Vercel după migrare sau e doar un placebo de dragul metricilor din teste sintetice?

Nu aș vrea să pierdem trei zile de refactoring doar ca să economisim 30 KB la build time, fără un impact real în viața de zi cu zi. Dacă merită efortul, ne punem pe treabă de săptămâna viitoare. Ce ziceți?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.