zod

Zod schema validation best practices for type safety, parsing, and error handling. This skill should be used when defining z.object schemas, using z.string validations, safeParse, or z.infer. This skill does NOT cover React Hook Form integration patterns (use react-hook-form skill) or OpenAPI client

By pproenca · 6,107 installs

npx skills add pproenca/dot-skills --skill zod

Source repository · Upstream listing

Zod Best Practices Comprehensive schema validation guide for Zod in TypeScript applications. Contains 43 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation. When to Apply Reference these guidelines when: Writing new Zod schemas Choosing between parse() and safeParse() Implementing type inference with z.infer Handling validation errors for user feedback Composing complex object schemas Using refinements and transforms Optimizing bundle size and validation performance Reviewing Zod code for best practices Rule Categories by Priority Priority Category Impact Prefix 1 Schema Definition CRITICAL schema 2 Parsing & Validation CRITICAL parse 3 Type Inference HIGH type 4 Error Handling HIGH error 5 Object Schemas MEDIUM HIGH object 6 Schema Composition MEDIUM compose 7 Refinements & Transforms MEDIUM refine 8 Performance & Bundle LOW MEDIUM perf Quick Reference 1. Schema Definition (CRITICAL) schema use primitives correctly Use correct primitive schemas for each type schema use unknown not any Use z.unknown() instead of z.any() for type safety schema avoid optional abuse Avoid overusing optional fields schema string validations Apply string validations at schema definition schema use enums Use enums for fixed string values schema coercion for form data Use coercion for form and query data 2. Parsing & Validation (CRITICAL) parse use safeparse Use safeParse() for user input parse async for async refinements Use parseAsync for async refinements parse handle all issues Handle all validation issues not just first parse validate early Validate at system boundaries parse avoid double validation Avoid validating same data twice parse never trust json Never trust JSON.parse output 3. Type Inference (HIGH) type use z infer Use z.infer instead of manual types type input vs output Distinguish z.input from z.infer for transforms type export schemas and types Export both schemas and inferred types type branded types Use branded types for domain safety type enable strict mode Enable TypeScript strict mode 4. Error Handling (HIGH) error custom messages Provide custom error messages error use flatten Use flatten() for form error display error path for nested Use issue.path for nested error location error i18n Implement internationalized error messages error avoid throwing in refine Return false instead of throwing in refine 5. Object Schemas (MEDIUM HIGH) object strict vs strip Choose strict() vs strip() for unknown keys object partial for updates Use partial() for update schemas object pick omit Use pick() and omit() for schema variants object extend for composition Use extend() for adding fields object optional vs nullable Distinguish optional() from nullable() object discriminated unions Use discriminated unions for type narrowing 6. Schema Composition (MEDIUM) compose shared schemas Extract shared schemas into reusable modules compose intersection Use intersection() for type combinations compose lazy recursive Use z.lazy() for recursive schemas compose preprocess Use preprocess() for data normalization compose pipe Use pipe() for multi stage validation 7. Refinements & Transforms (MEDIUM) refine vs superrefine Choose refine() vs superRefine() correctly refine transform coerce Distinguish transform() from refine() and coerce() refine add path Add path to refinement errors refine defaults Use default() for optional fields with defaults refine catch Use catch() for fault tolerant parsing 8. Performance & Bundle (LOW MEDIUM) perf cache schemas Cache schema instances perf zod mini Use Zod Mini for bundle sensitive applications perf avoid dynamic creation Avoid dynamic schema creation in hot paths perf lazy loading Lazy load large schemas perf arrays Optimize large array validation How to Use Read individual reference files for detailed explanations and code examples: [Section definitions](references/ sections.md) Category structure and impact levels [Rule template](assets/templates/ template.md) Template for adding new rules Individual rules: references/{prefix} {slug}.md Full Compiled Document For the complete guide with all rules expanded: AGENTS.md Related Skills For React Hook Form integration, see react hook form skill For API client generation, see orval skill Sources [Zod Official Documentation](https://zod.dev/) [Zod v4 Release Notes](https://zod.dev/v4) [Zod GitHub Repository](https://github.com/colinhacks/zod) [Zod Mini](https://zod.dev/packages/mini) [Total TypeScript Zod Tutorial](https://www.totaltypescript.com/tutorials/zod)