---
title: "Schema validation with Zod · vuejs.school"
description: "Describe a form's data once with a Zod 4 schema, validate with safeParse(), show the issues per field, get the TypeScript types for free, and run the same schema on the server."
canonical_url: "https://vuejs.school/learn/forms/schema-validation-with-zod"
meta:
  "og:description": "Describe a form's data once with a Zod 4 schema, validate with safeParse(), show the issues per field, get the TypeScript types for free, and run the same schema on the server."
  "og:image": "https://vuejs.school/_og/d/a_~U2NoZW1hIHZhbGlkYXRpb24gd2l0aCBab2QgwrcgdnVlanMuc2Nob29s%2Cc_OgCard.takumi%2Ctitle_Schema%2Bvalidation%2Bwith%2BZod%2Cdescription_~RGVzY3JpYmUgYSBmb3JtJ3MgZGF0YSBvbmNlIHdpdGggYSBab2QgNCBzY2hlbWEsIHZhbGlkYXRlIHdpdGggc2FmZVBhcnNlKCksIHNob3cgdGhlIGlzc3VlcyBwZXIgZmllbGQsIGdldCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBmb3IgZnJlZSwgYW5kIHJ1biB0aGUgc2FtZSBzY2hlbWEgb24gdGhlIHNlcnZlci4%2Ceyebrow_~Rm9ybXMgwrcgTGVzc29uIDIgb2YgNA%2Ctint_mint%2Cp_Ii9sZWFybi9mb3Jtcy9zY2hlbWEtdmFsaWRhdGlvbi13aXRoLXpvZCI%2Cs_QkKpEWLHt33qlWen.png"
  "og:image:alt": "Schema validation with Zod · vuejs.school"
  "og:image:height": "600"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "Schema validation with Zod · vuejs.school"
  "twitter:image": "https://vuejs.school/_og/d/a_~U2NoZW1hIHZhbGlkYXRpb24gd2l0aCBab2QgwrcgdnVlanMuc2Nob29s%2Cc_OgCard.takumi%2Ctitle_Schema%2Bvalidation%2Bwith%2BZod%2Cdescription_~RGVzY3JpYmUgYSBmb3JtJ3MgZGF0YSBvbmNlIHdpdGggYSBab2QgNCBzY2hlbWEsIHZhbGlkYXRlIHdpdGggc2FmZVBhcnNlKCksIHNob3cgdGhlIGlzc3VlcyBwZXIgZmllbGQsIGdldCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBmb3IgZnJlZSwgYW5kIHJ1biB0aGUgc2FtZSBzY2hlbWEgb24gdGhlIHNlcnZlci4%2Ceyebrow_~Rm9ybXMgwrcgTGVzc29uIDIgb2YgNA%2Ctint_mint%2Cp_Ii9sZWFybi9mb3Jtcy9zY2hlbWEtdmFsaWRhdGlvbi13aXRoLXpvZCI%2Cs_QkKpEWLHt33qlWen.png"
  "twitter:image:alt": "Schema validation with Zod · vuejs.school"
---

> Index of every page on this site: [llms.txt](https://vuejs.school/llms.txt)

# **Schema validation with Zod**

Describe a form's data once with a Zod 4 schema, validate with safeParse(), show the issues per field, get the TypeScript types for free, and run the same schema on the server.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://vuejs.school/#website","@type":"WebSite","description":"A free AI-instructed school for Vue.js. Short tutorials, runnable code and quizzes that adapt to you.","name":"vuejs.school","url":"https://vuejs.school/","publisher":{"@id":"https://vuejs.school/#identity"}},{"@id":"https://vuejs.school/learn/forms/schema-validation-with-zod#webpage","@type":"WebPage","description":"Describe a form's data once with a Zod 4 schema, validate with safeParse(), show the issues per field, get the TypeScript types for free, and run the same schema on the server.","name":"Schema validation with Zod","url":"https://vuejs.school/learn/forms/schema-validation-with-zod","breadcrumb":{"@id":"https://vuejs.school/learn/forms/schema-validation-with-zod#breadcrumb"},"isPartOf":{"@id":"https://vuejs.school/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://vuejs.school/learn/forms/schema-validation-with-zod"]}],"primaryImageOfPage":{"@id":"https://vuejs.school/#logo"}},{"@id":"https://vuejs.school/#identity","@type":"Organization","description":"A free AI-instructed school for Vue.js. Short tutorials, runnable code and quizzes that adapt to you.","name":"vuejs.school","url":"https://vuejs.school","logo":{"@id":"https://vuejs.school/#logo"}},{"@id":"https://vuejs.school/learn/forms/schema-validation-with-zod#article","description":"Describe a form's data once with a Zod 4 schema, validate with safeParse(), show the issues per field, get the TypeScript types for free, and run the same schema on the server.","headline":"Schema validation with Zod","inLanguage":"en","isAccessibleForFree":true,"thumbnailUrl":"https://vuejs.school/_og/d/a_~U2NoZW1hIHZhbGlkYXRpb24gd2l0aCBab2QgwrcgdnVlanMuc2Nob29s%2Cc_OgCard.takumi%2Ctitle_Schema%2Bvalidation%2Bwith%2BZod%2Cdescription_~RGVzY3JpYmUgYSBmb3JtJ3MgZGF0YSBvbmNlIHdpdGggYSBab2QgNCBzY2hlbWEsIHZhbGlkYXRlIHdpdGggc2FmZVBhcnNlKCksIHNob3cgdGhlIGlzc3VlcyBwZXIgZmllbGQsIGdldCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBmb3IgZnJlZSwgYW5kIHJ1biB0aGUgc2FtZSBzY2hlbWEgb24gdGhlIHNlcnZlci4%2Ceyebrow_~Rm9ybXMgwrcgTGVzc29uIDIgb2YgNA%2Ctint_mint%2Cp_Ii9sZWFybi9mb3Jtcy9zY2hlbWEtdmFsaWRhdGlvbi13aXRoLXpvZCI%2Cs_QkKpEWLHt33qlWen.png","@type":["Article","TechArticle"],"articleSection":["Forms"],"author":{"@id":"https://vuejs.school/#identity"},"image":{"@id":"https://vuejs.school/#/schema/image/1"},"isPartOf":{"@id":"https://vuejs.school/learn/forms/schema-validation-with-zod#webpage"},"keywords":["z.object()","safeParse()","z.flattenError()","z.infer vs z.input",".refine() with path","z.coerce and z.preprocess"],"mainEntityOfPage":{"@id":"https://vuejs.school/learn/forms/schema-validation-with-zod#webpage"},"publisher":{"@id":"https://vuejs.school/#identity"}},{"@id":"https://vuejs.school/learn/forms/schema-validation-with-zod#breadcrumb","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","name":"Skill tree","item":"https://vuejs.school/track","position":1},{"@type":"ListItem","name":"Forms","item":"https://vuejs.school/track/forms","position":2},{"@type":"ListItem","name":"Schema validation with Zod","position":3}]},{"@id":"https://vuejs.school/#logo","@type":"ImageObject","caption":"vuejs.school","contentUrl":"https://vuejs.school/apple-touch-icon.png","inLanguage":"en","url":"https://vuejs.school/apple-touch-icon.png"},{"@id":"https://vuejs.school/#/schema/image/1","@type":"ImageObject","contentUrl":"https://vuejs.school/_og/d/a_~U2NoZW1hIHZhbGlkYXRpb24gd2l0aCBab2QgwrcgdnVlanMuc2Nob29s%2Cc_OgCard.takumi%2Ctitle_Schema%2Bvalidation%2Bwith%2BZod%2Cdescription_~RGVzY3JpYmUgYSBmb3JtJ3MgZGF0YSBvbmNlIHdpdGggYSBab2QgNCBzY2hlbWEsIHZhbGlkYXRlIHdpdGggc2FmZVBhcnNlKCksIHNob3cgdGhlIGlzc3VlcyBwZXIgZmllbGQsIGdldCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBmb3IgZnJlZSwgYW5kIHJ1biB0aGUgc2FtZSBzY2hlbWEgb24gdGhlIHNlcnZlci4%2Ceyebrow_~Rm9ybXMgwrcgTGVzc29uIDIgb2YgNA%2Ctint_mint%2Cp_Ii9sZWFybi9mb3Jtcy9zY2hlbWEtdmFsaWRhdGlvbi13aXRoLXpvZCI%2Cs_QkKpEWLHt33qlWen.png","inLanguage":"en","url":"https://vuejs.school/_og/d/a_~U2NoZW1hIHZhbGlkYXRpb24gd2l0aCBab2QgwrcgdnVlanMuc2Nob29s%2Cc_OgCard.takumi%2Ctitle_Schema%2Bvalidation%2Bwith%2BZod%2Cdescription_~RGVzY3JpYmUgYSBmb3JtJ3MgZGF0YSBvbmNlIHdpdGggYSBab2QgNCBzY2hlbWEsIHZhbGlkYXRlIHdpdGggc2FmZVBhcnNlKCksIHNob3cgdGhlIGlzc3VlcyBwZXIgZmllbGQsIGdldCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBmb3IgZnJlZSwgYW5kIHJ1biB0aGUgc2FtZSBzY2hlbWEgb24gdGhlIHNlcnZlci4%2Ceyebrow_~Rm9ybXMgwrcgTGVzc29uIDIgb2YgNA%2Ctint_mint%2Cp_Ii9sZWFybi9mb3Jtcy9zY2hlbWEtdmFsaWRhdGlvbi13aXRoLXpvZCI%2Cs_QkKpEWLHt33qlWen.png"}]}
```