zod
Skill24 starsChanged 9 days agoMITView on GitHub
Zod v4 best practices, patterns, and API guidance for schema validation, parsing, error handling, and type inference in TypeScript applications. Covers safeParse, object composition, refinements, transforms, codecs, branded types, v3→v4 migration, and testing schemas with Jest or Vitest. Baseline: zod ^4.6.0. Triggers on: zod imports, z.object, z.string, z.infer, safeParse, mentions of "zod", "schema validation", "zod v4", "z.enum", or testing a schema — "schema test", "zod mock", zod-schema-faker.
23 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- compozy/compozytheir own version, first seen Nov 7, 2026
- thongdn-it/react-agent-skillstheir own version, first seen Nov 1, 2026
- kriscard/Skillstheir own version, first seen Nov 1, 2026
- Firzus/agent-skillstheir own version, first seen Oct 23, 2026
- Alteriom/ai-dev-skillstheir own version, first seen Oct 11, 2026
- ragna-ai/ragna-studiotheir own version, first seen Oct 11, 2026
Used with
Projects with it also use tailwind-css-patterns, typescript-advanced-types and 4 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
midudevSkilltailwind-css-patterns
Provides comprehensive Tailwind CSS utility-first styling patterns including responsive design, layout utilities, flexbox, grid, spacing, typography, colors, and modern CSS best practices. Use when styling React/Vue/Svelte components, building responsive layouts, implementing design systems, or optimizing CSS workflow.
Also in 3 projects that use this
xfstudioSkilltypescript-advanced-types
Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications. Use when implementing complex type logic, creating reusable type utilities, or ensuring compile-time type safety in TypeScript projects.
Also in 5 projects that use this
VercelSkillturborepo
Turborepo monorepo build system guidance. Triggers on: turbo.json, task pipelines, dependsOn, caching, remote cache, the "turbo" CLI, --filter, --affected, CI optimization, environment variables, internal packages, monorepo structure/best practices, and boundaries.
Also in 4 projects that use this
VercelSkillai-sdk
Answer questions about the AI SDK and help build AI-powered features. Use when developers: (1) Ask about AI SDK functions like generateText, streamText, ToolLoopAgent, embed, or tools, (2) Want to build AI agents, chatbots, RAG systems, or text generation features, (3) Have questions about AI providers (OpenAI, Anthropic, Google, etc.), streaming, tool calling, structured output, or embeddings, (4) Use React hooks like useChat or useCompletion. Triggers on: "AI SDK", "Vercel AI SDK", "generateText", "streamText", "add AI to my app", "build an agent", "tool calling", "structured output", "useChat".
Also in 3 projects that use this
BlockSkillfrontend-design
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Also in 4 projects that use this
GoogleSkillcode-review
Adversarial systems, concurrency, memory-model, and architecture code review protocol. Use this skill whenever asked to review code, PRs, diffs, or branches in Filament.
Also in 3 projects that use this
Other versions23 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- jeius/mcp-servers★ 081% same
Wrote their own version · 22
- legions-developer/evilcharts★ 3.2ksame name
- compozy/compozy★ 2.9ksame name
- legions-developer/invoicely★ 923same name
- pedronauck/skills★ 649same name
- jasonjgardner/blockbench-mcp-plugin★ 595same name
- tazo90/next-openapi-gen★ 196same name
- PyModel/react-frontend-skills★ 23same name
- kriscard/Skills★ 15same name
- kevyder/banrepco_mcp★ 9same name
- thongdn-it/react-agent-skills★ 5same name
12 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repositoryOne other file it gives its agents.
- AGENTS.mdAGENTS.md
The file
We split this skill into the rules it gives an agent
1 rule. 1 is common, 0 are distinctive, and 0 are very specific to this project.
1
Common
Most of the 23 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 151
Read individual rule files for detailed explanations and code examples:
“Common” is measured: kept by at least 6 in 10 of the 23 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Zod
IMPORTANT: Your training data about zod may be outdated or incorrect — Zod 4 changes string formats, enums, error customization, issue codes, defaults, and functions. Always rely on this skill's rule files and the project's actual source code as the source of truth. Do not fall back on memorized v3 patterns when they conflict with the retrieved reference.
When to Use Zod
Zod is for runtime type validation — parsing untrusted data at system boundaries (API input, form data, env vars, external services). For compile-time-only types, plain TypeScript is sufficient.
| Need | Recommended Tool |
| API input/output validation | Zod |
| Form validation (React, Vue) | Zod (with react-hook-form, formik, etc.) |
| Env var parsing | Zod (with t3-env or manual) |
| Compile-time types only | Plain TypeScript |
| Strict client bundle budget | Zod Mini (zod/mini), or Valibot |
| Maximum type inference | ArkType |
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
| 1 | Parsing & Type Safety | CRITICAL | parse- |
| 2 | Schema Design | CRITICAL | schema- |
| 3 | Refinements & Transforms | HIGH | refine- |
| 4 | Error Handling | HIGH | error- |
| 5 | Performance & Composition | MEDIUM | perf- |
| 6 | v4 Migration | MEDIUM | migrate- |
| 7 | Advanced Patterns | MEDIUM | pattern- |
| 8 | Architecture & Boundaries | CRITICAL/HIGH | arch- |
| 9 | Observability | HIGH/MEDIUM | observe- |
Quick Reference
1. Parsing & Type Safety (CRITICAL)
parse-use-safeParse— UsesafeParse()for user input instead ofparse()which throwsparse-async-required— Must useparseAsync()/safeParseAsync()when schema has async refinementsparse-infer-types— Usez.infer<typeof Schema>for output types; never manually duplicate typesparse-validate-boolean— Use.validate()for a yes or no; it narrows to the input type, so usesafeParse()for the output
2. Schema Design (CRITICAL)
schema-object-unknowns—z.object()strips unknown keys; usestrictObjectorlooseObjectschema-union-discriminated— Usez.discriminatedUnion()for tagged unions, notz.union()schema-coercion-pitfalls—z.coerce.boolean()makes"false"→true; usez.stringbool()schema-recursive-types— Use a getter for recursive schemas; cyclic input parses since 4.5schema-json-string—z.json()does not parse a string; decode JSON text with a codec
3. Refinements & Transforms (HIGH)
refine-never-throw— Never throw inside.refine()or.transform(); return false, or add issues throughctxrefine-vs-transform—.refine()for validation,.transform()for conversion,.pipe()for stagingrefine-cross-field— Refine the parent object and setpath;.superRefine()for several issues
4. Error Handling (HIGH)
error-custom-messages— Use theerrorparameter;required_error/invalid_type_errorare gone,messageis deprecatederror-formatting—z.flattenError()for forms,z.treeifyError()for nested;formatErrordeprecatederror-input-security— Never usereportInput: truein production; leaks sensitive data
5. Performance & Composition (MEDIUM)
perf-extend-spread— Use{ ...Schema.shape }spread over chained.extend()for large schemasperf-reuse-schemas— Define once, derive with.pick(),.omit(),.partial()perf-zod-mini— Use Zod Mini (zod/mini) only under a strict client bundle budget; load a localeperf-compile— Compile the final schema withz.compile(); prove it compiled withstrict: truein a test
6. v4 Migration (MEDIUM)
migrate-string-formats— Usez.email(),z.uuid(),z.url()notz.string().email()migrate-native-enum— Use unifiedz.enum()for TS enums;z.nativeEnum()is deprecatedmigrate-error-api— Use theerrorparameter;errorMapis gone andmessageis deprecated
7. Advanced Patterns (MEDIUM)
pattern-branded-types—.brand<"Name">()for nominal typing (USD vs EUR)pattern-codecs—z.codec()for bidirectional transforms (parse + serialize)pattern-pipe—.pipe()for staged parsing (string → number → validate range)
8. Architecture & Boundaries (CRITICAL/HIGH)
arch-boundary-parsing— Parse at system boundaries (API handler, env, form, fetch); pass typed data to domain logicarch-schema-organization— Co-locate schemas with their boundary layer; domain types usez.inferarch-schema-versioning— Additive changes only for non-breaking evolution; new fields use.optional()
9. Observability (HIGH/MEDIUM)
observe-structured-errors— Usez.flattenError()for compact structured logs with request correlation IDsobserve-error-metrics—trackedSafeParse()wrapper to increment counters per schema and field on failure
Schema Types Quick Reference
| Type | Syntax |
| String | z.string() |
| Number | z.number(), z.int(), z.float32(), z.float64() |
| Boolean | z.boolean() |
| BigInt | z.bigint() |
| Date | z.date() |
| Undefined | z.undefined() |
| Null | z.null() |
| Void | z.void() |
| Any | z.any() |
| Unknown | z.unknown() |
| Never | z.never() |
| Literal | z.literal("foo"), z.literal(42) |
| Enum | z.enum(["a", "b"]), z.enum(TSEnum) |
z.email() | |
| URL | z.url() |
| UUID | z.uuid() |
| String→Bool | z.stringbool() |
| ISO DateTime | z.iso.datetime() |
| File | z.file() |
| JSON value | z.json() (validates a value; does not parse a string) |
| Array | z.array(schema) |
| Tuple | z.tuple([a, b]) |
| Object | z.object({}) |
| Strict Object | z.strictObject({}) |
| Loose Object | z.looseObject({}) |
| Record | z.record(keySchema, valueSchema) |
| Map | z.map(keySchema, valueSchema) |
| Set | z.set(schema) |
| Union | z.union([a, b]) |
| Disc. Union | z.discriminatedUnion("key", [...]) |
| Intersection | z.intersection(a, b) |
How to Use
Read individual rule files for detailed explanations and code examples:
rules/parse-use-safeParse.md
rules/schema-object-unknowns.mdEach rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and decision tables
References
| Priority | Reference | When to read |
| 1 | references/schema-types.md | Primitives, string formats, numbers, enums, dates, functions, branded types |
| 2 | references/parsing-and-inference.md | parse, safeParse, validate, z.infer, coercion, Standard Schema |
| 3 | references/objects-and-composition.md | Objects, optional keys, arrays, unions, pick/omit/partial, recursive, properties |
| 4 | references/refinements-and-transforms.md | refine, superRefine, transform, pipe, defaults |
| 5 | references/error-handling.md | ZodError, flattenError, treeifyError, error customization |
| 6 | references/behaviour-changes.md | What parses differently in 4.0, 4.4, 4.5 and 4.6; read before an upgrade |
| 7 | references/codecs.md | z.codec, decode and encode, what runs in each direction, copy-in recipes |
| 8 | references/metadata-and-json-schema.md | Registries, .meta(), z.toJSONSchema options, z.fromJSONSchema |
| 9 | references/compile.md | z.compile, zod/compile, what does not compile, z.withParser, bundle cost |
| 10 | references/anti-patterns.md | Common mistakes with BAD/GOOD examples |
| 11 | references/boundary-architecture.md | Where Zod fits: Express, tRPC, Next.js, React Hook Form, env, external APIs |
| 12 | references/linter-and-ci.md | ESLint rules, CI schema snapshots, unused schema detection, circular deps |
| 13 | references/testing.md | Testing schemas: safeParse in tests, boundary values, error assertions, mock data, property-based testing |
| 14 | references/testing-api.md | Jest and Vitest API reference for schema tests |
| 15 | references/testing-anti-patterns.md | Testing mistakes with BAD/GOOD examples |
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

