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

Zod vs Valibot la 50+ de scheme: Merită efortul de migrare pentru bundle size?

De Cristian Barbu, 28 mai 2026 · 5 vizualizări · 2 like-uri

Postat 28 mai 2026

Salutare tuturor. Am ajuns într-un punct destul de enervant cu un API construit pe serverless (AWS Lambda) unde cold start-urile au început să ne dea palme peste ceafă. Avem în jur de 50 de scheme de validare scrise cu Zod și m-am trezit analizând bundle-ul final, realizând că Zod trage după el destul de mult balast din cauză că nu e tree-shakable prin design.

De ce ne strânge spatele cu Zod acum

Am început proiectul acum un an, clasic, cu Zod pentru că "toată lumea îl folosește". Merge brici, n-am ce zice, DX-ul e genial și erorile sunt ușor de mapat. Dar la 50 de endpoint-uri, când fiecare Lambda își trage tot parserul de Zod plus schemele noastre destul de stufoase, am realizat că bundle-ul final pe funcție a crescut aiurea.

Am măsurat zilele trecute și avem cam 60KB doar din logica de validare (minificat, dar ne-gzipat). Nu pare mult la prima vedere, dar în serverless fiecare milisecundă de cold start contează, mai ales când ai spike-uri de trafic de la vreo 12.000 de utilizatori activi zilnic. Trade-off-ul cu Zod e simplu: e ca un tanc. Te trece peste orice mlaștină de date dubioase, dar consumă mult combustibil la pornire.

De ce trag cu ochiul la Valibot

Am citit documentația de la Valibot și promisiunea lor cu modularitatea sună prea bine ca să o ignor. Ei merg pe funcții individuale în loc de metode înlănțuite. Adică z.string().email() devine v.string([v.email()]). Datorită acestei abordări, tree-shaking-ul chiar funcționează.

Am făcut un test de concept pe o singură schemă complexă de checkout. Cu Zod, bucata respectivă compilată avea în jur de 45KB. Cu Valibot, a scăzut la sub 8KB pentru că am importat strict funcțiile folosite acolo. E o reducere masivă, de peste 80% pe o singură rută.

Dar de aici începe dilema mea legată de migrarea propriu-zisă. Să rescriu manual 50 de scheme, unele cu transformări dubioase, superRefine și discriminators, nu e chiar muncă de o singură după-amiază.

Dilemele și fricile mele la migrare

Pe hârtie, Valibot e rege la dimensiune. În realitate, am observat deja câteva chestii care mă fac să ezit.

În primul rând, sintaxa e mult mai verboasă. Când ai scheme imbricate adânc, codul devine greu de citit din cauza parantezelor rotunde și pătrate care se tot adună. Îți cam prinzi urechile în formatare dacă nu ești atent.

În al doilea rând, ecosistemul. Cu Zod am integrare nativă în tRPC și OpenAPI generator. Valibot are și el integrări, dar par destul de tinere și mi-e teamă că rezolv problema de bundle size doar ca să mă lovesc de un bug ciudat într-o librărie terță care nu știe să parseze corect formatul lor.

A trecut cineva prin procesul ăsta la un proiect mediu spre mare? Merită durerea de cap pentru acele câteva zeci de milisecunde câștigate la cold start, sau mai bine optimizez straturile de caching și las Zod în pace?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

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