PettyUI/.firecrawl/search-benchmark.json
2026-03-31 21:42:28 +07:00

1 line
76 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"success":true,"data":{"web":[{"url":"https://www.reddit.com/r/typescript/comments/1i3ogwi/announcing_arktype_20_validate_100x_faster_with/","title":"Announcing ArkType 2.0: Validate 100x faster with DX that will blow ...","description":"Bundle size is somewhat larger than Zod and much larger than Valibot which may be a problem for frontend (eventually we will offer a build ...","position":1},{"url":"https://zenn.dev/m_noto/articles/a2c09f741ba65e?locale=en","title":"A Comparative Evaluation of Valibot and ArkType - Zenn","description":"Bundle Size Comparison · Valibot achieves the best tree-shaking efficiency thanks to its modular design. · Arktype has the smallest node_modules ...","position":2,"markdown":"#### iTranslated by AI\n\nThe content below is an AI-generated translation. This is an experimental feature, and may contain errors. [View original article](https://zenn.dev/m_noto/articles/a2c09f741ba65e)\n\n28\n\n6\n\n[X(Twitter)にポスト](https://twitter.com/intent/tweet?url=https://zenn.dev/m_noto/articles/a2c09f741ba65e&text=Comparing%20Zod%20Alternatives%3A%20A%20Comparative%20Evaluation%20of%20Valibot%20and%20ArkType%EF%BD%9C_mino&hashtags=zenn)[Facebookに投稿](http://www.facebook.com/sharer.php?u=https://zenn.dev/m_noto/articles/a2c09f741ba65e)[はてなブックマークに登録](https://b.hatena.ne.jp/add?mode=confirm&url=https://zenn.dev/m_noto/articles/a2c09f741ba65e&title=Comparing%20Zod%20Alternatives%3A%20A%20Comparative%20Evaluation%20of%20Valibot%20and%20ArkType%EF%BD%9C_mino)\n\n[テーマ「フリーテーマ」](https://zenn.dev/contests/zennfes2025free)\n\n[![](https://storage.googleapis.com/zenn-user-upload/topics/9ddd1263ec.png)\\\\\n\\\\\nzod](https://zenn.dev/topics/zod) [![](https://storage.googleapis.com/zenn-user-upload/topics/042c01a48b.png)\\\\\n\\\\\nValibot](https://zenn.dev/topics/valibot) [![](https://zenn.dev/images/topic.png)\\\\\n\\\\\narktype](https://zenn.dev/topics/arktype) [![](https://zenn.dev/images/topic.png)\\\\\n\\\\\nzennfes2025free](https://zenn.dev/topics/zennfes2025free) [![](https://static.zenn.studio/images/drawing/tech-icon.svg)\\\\\n\\\\\ntech](https://zenn.dev/tech-or-idea)\n\nNice to meet you, I'm [\\_mino](https://x.com/nt_mino)!\n\nIn this article, I've summarized the results of comparing and verifying several trending libraries to see if Zod is truly the best fit for validation in frontend development, or if there might be other more suitable validation libraries.\n\nIf you are struggling to choose a validation library, I hope you find this helpful.\n\nFor those wondering \"What is validation?\", this explanation is easy to understand!\n\n[https://wa3.i-3-i.info/word11610.html](https://wa3.i-3-i.info/word11610.html)\n\n## **🚀 Target** Libraries\n\n### Zod / v4\n\nThe most popular TypeScript-first schema validation library. It automatically generates types from schemas to ensure data safety.\n\n**Features and Characteristics:**\n\n- Intuitive syntax using method chaining (`z.string().email().min(5)`)\n- Error handling without try-catch via `.safeParse()`\n- Extensive schema manipulation (extension, selection, transformation, etc.)\n- Type conversion features (e.g., automatic string-to-number conversion)\n- Extensive ecosystem\n\n[https://zod.dev/](https://zod.dev/)\n\n### Valibot / v1\n\nA next-generation validation library that achieves over 90% bundle size reduction through modular design. Developed as a lightweight alternative to Zod.\n\n**Features and Characteristics:**\n\n- Pipeline syntax (verifies in order, e.g., string → email format with `v.pipe(v.string(), v.email())`)\n- Lightweight design where only the features used are bundled\n- Modular structure combining small functions\n- Fast validation processing and compilation\n- Optimization for mobile and Edge environments\n\n[**https://valibot.dev/** \\\\\n\\\\\n![valibot.dev favicon image](https://www.google.com/s2/favicons?sz=14&domain_url=https://valibot.dev)valibot.dev](https://valibot.dev/)\n\n[https://valibot.dev/](https://valibot.dev/)\n\n### ArkType / v2\n\nAn innovative string-based validation library that is closest to TypeScript syntax. Characterized by automatic optimization through a built-in type system.\n\n**Features and Characteristics:**\n\n- TypeScript-like shorthand syntax (`'string>=2'` for \"a string of 2 or more characters\")\n- Internal optimization for union type resolution\n- Pre-detection of type contradictions (e.g., both number and string)\n- Real-time error display in the editor\n- Fast runtime validation (ideal for high-volume, high-frequency processing)\n\n[https://arktype.io/](https://arktype.io/)\n\n## **📚 Trends and Popularity**\n\nHere is the Star History chart (GitHub star history).\n\n![](https://storage.googleapis.com/zenn-user-upload/e966356af177-20250928.png)\n\n**Zod**'s momentum remains unabated, and its popularity is overwhelming compared to other validation libraries. With the significant improvement in developer experience due to the v4 upgrade, I believe its popularity will accelerate even further.\n\nOn the other hand, **Valibot** and **ArkType** are also steadily gaining popularity and have become noteworthy contenders.\n\nSince both libraries receive continuous updates and their ecosystems are gradually becoming more active, they have the potential to become strong competitors to Zod in the future.\n\n## 📊 Comparison and Benchmarks\n\nI conducted a comparison and verification of each library under the following measurement conditions.\n\n**Measurement Environment**\n\n- Next.js 15.5.4\n- Node.js v20.10.0\n- TypeScript 5.x\n- Measurement tool: performance.now()\n\n**Measurement Units**\n\n- **μs (microseconds)**: One millionth of a second (0.000001 seconds)\n- **ops/s**: Operations per second\n- **ms (milliseconds)**: One thousandth of a second (0.001 seconds)\n\n### Execution Speed Comparison\n\n**Simple Schema - Valid Data**\n\n| Library | Average Execution Time | Processing Speed | Relative Performance |\n| --- | --- | --- | --- |\n| **Arktype** | 0.775 μs | 1,281,600 ops/s | 1.00x (Baseline) |\n| **Zod** | 0.927 μs | 1,066,714 ops/s | 1.20x slower |\n| **Valibot** | 0.943 μs | 1,030,532 ops/s | 1.24x slower |\n\n- Measured with correct data that satisfies all validation rules.\n\n**Simple Schema - Invalid Data**\n\n| Library | Average Execution Time | Processing Speed | Relative Performance |\n| --- | --- | --- | --- |\n| **Arktype** | 0.518 μs | 1,930,050 ops/s | 1.00x (Baseline) |\n| **Valibot** | 3.599 μs | 278,022 ops/s | 6.94x slower |\n| **Zod** | 20.620 μs | 48,931 ops/s | 39.46x slower |\n\n- Measured with invalid data that causes validation errors (e.g., insufficient characters, invalid email format).\n\n**Complex Schema**\n\n| Library | Average Execution Time | Processing Speed | Relative Performance |\n| --- | --- | --- | --- |\n| **Arktype** | 0.003 ms | 378,972 ops/s | 1.00x (Baseline) |\n| **Zod** | 0.059 ms | 17,271 ops/s | Approx. 21.94x slower |\n| **Valibot** | 0.105 ms | 9,593 ops/s | Approx. 39.50x slower |\n\n- Measured with large-scale data containing nested objects and arrays.\n\n### Bundle Size Comparison\n\n**Production Build Size (Actual Next.js values)**\n\n| Library | Page Size | First Load JS | node\\_modules | Tree-shaking Efficiency |\n| --- | --- | --- | --- | --- |\n| **Valibot** | 1.35 KB | 127 KB | 1.7 MB | ◎ |\n| **Zod** | 1.30 KB | 171 KB | 5.6 MB | ◎ |\n| **Arktype** | 1.58 KB | 162 KB | 628 KB | ⚪︎ |\n\n**Notes**\n\n- Valibot achieves the best tree-shaking efficiency thanks to its modular design.\n- Arktype has the smallest node\\_modules size, but the build size is medium because it includes a JIT compiler.\n- Zod has the largest bundle size due to its rich set of features.\n\n### Initialization Performance\n\n| Library | Schema Creation Time | First Execution | Subsequent Executions | JIT Compilation |\n| --- | --- | --- | --- | --- |\n| **Valibot** | 0.014 ms | 0.119 ms | 0.012 ms | None |\n| **Arktype** | 0.121 ms | 0.666 ms | 0.010 ms | Yes (66x faster) |\n| **Zod** | 0.243 ms | 0.516 ms | 0.014 ms | Yes (36x faster) |\n\n**Notes**\n\n- Arktype is fast from the first run (JIT optimized).\n- Zod has significantly improved with the introduction of JIT in v4.\n- Valibot has an excellent TTI (Time to Interactive) due to its initialization-focused design.\n\n### Other Comparison Items\n\n| Item | Zod | Valibot | ArkType |\n| --- | --- | --- | --- |\n| **Execution Speed (Valid Data)** | ⚪︎ Standard | ⚪︎ Standard | ◎ Fast |\n| **Execution Speed (Invalid Data)** | △ Slow | ⚪︎ Standard | ◎ Fast |\n| **Execution Speed (Complex Schema)** | ⚪︎ Standard | △ Slow | ◎ Fast |\n| **Bundle Size** | △ Large | ◎ Smallest | ⚪︎ Medium |\n| **Next.js Integration** | ◎ Excellent | ⚪︎ Good | ⚪︎ Good |\n| **Error Messages** | ◎ Detailed | ⚪︎ Good | ⚪︎ Good |\n| **Custom Validation** | ◎ Flexible | ◎ Flexible | ⚪︎ Limited |\n| **Asynchronous Validation** | ◎ Supported | ◎ Supported | △ Not supported (External implementation required) |\n| **Server-side Usage** | ◎ Fully supported (Node.js optimized) | ◎ Fully supported (Lightweight design) | ⚪︎ Supported (Some limitations) |\n| **Type Inference Performance** | ⚪︎ Standard (Heavy when complex) | ◎ Fast (Efficient) | ◎ Fastest (String parsing) |\n| **Edge Runtime** | ◎ Supported (Stable operation) | ◎ Supported (Optimized) | ⚪︎ Partially supported (Verification required) |\n\n## 🧑‍💻 Comparison of Implementation Methods\n\nUsing a \"Corporate Inquiry Form\" as an example, we will compare the implementation methods using each validation library.\n\nThe following five items are required as the common data structure for input data:\n\n```\n// Structure of the inquiry form used commonly across each library\ninterface ContactForm {\n company: string; // Company Name (Required)\n name: string; // Name (Required)\n email: string; // Email Address (Required, email format)\n category: 'design' | 'engineering' | 'sales' | 'marketing'; // Category (Required, selection)\n message: string; // Message (Required)\n}\n```\n\n![](https://static.zenn.studio/images/copy-icon.svg)![](https://static.zenn.studio/images/wrap-icon.svg)\n\n### Zod\n\n**Schema Definition**\n\n```\nimport { z } from \"zod\"\n\n// Define validation rules using the method chaining approach\nconst contactSchema = z.object({\n company: z.string()\n .min(1, \"Please enter the company name\")\n .max(100, \"Company name must be within 100 characters\"),\n name: z.string()\n .min(1, \"Please enter your name\")\n .max(50, \"Name must be within 50 characters\"),\n email: z.string()\n .min(1, \"Please enter your email address\")\n .email(\"Please enter a valid email address\"),\n category: z.enum([\"design\", \"engineering\", \"sales\", \"marketing\"], {\n message: \"Please select a category\",\n }),\n message: z.string()\n .min(1, \"Please enter your inquiry\")\n .max(1000, \"Inquiry must be within 1000 characters\"),\n})\n\n// Type Inference\ntype ContactForm = z.infer<typeof contactSchema>\n```\n\n![](https://static.zenn.studio/images/copy-icon.svg)![](https://static.zenn.studio/images/wrap-icon.svg)\n\n**Validation Execution**\n\n```\nconst handleSubmit = async (data: ContactForm) => {\n const result = contactSchema.safeParse(data)\n\n if (result.success) {\n // On success: result.data contains validated data\n console.log(\"Validated Data:\", result.data)\n } else {\n // On failure: result.error.issues contains error info\n const fieldErrors: Record<string, string> = {}\n result.error.issues.forEach((issue) => {\n const fieldName = issue.path[0] as string\n if (fieldName && !fieldErrors[fieldName]) {\n fieldErrors[fieldName] = issue.message\n }\n })\n // Error display processing\n }\n}\n```\n\n![](https://static.zenn.studio/images/copy-icon.svg)![](https://static.zenn.studio/images/wrap-icon.svg)\n\n### Valibot\n\n**Schema Definition**\n\n```\nimport * as v from \"valibot\"\n\n// Combine validations using the pipeline approach\nconst contactSchema = v.object({\n company: v.pipe(\n v.string(),\n v.minLength(1, \"Please enter at least 1 character for the company name\"),\n v.maxLength(100, \"Company name must be within 100 characters\")\n ),\n name: v.pipe(\n v.string(),\n v.minLength(1, \"Please enter at least 1 character for the name\"),\n v.maxLength(50, \"Name must be within 50 characters\")\n ),\n email: v.pipe(\n v.string(),\n v.minLength(1, \"Please enter at least 1 character for the email address\"),\n v.email(\"Please enter a valid email address\")\n ),\n category: v.picklist([\"design\", \"engineering\", \"sales\", \"marketing\"]),\n message: v.pipe(\n v.string(),\n v.minLength(1, \"Please enter at least 1 character for your inquiry\"),\n v.maxLength(1000, \"Inquiry must be within 1000 characters\")\n ),\n})\n\n// Type Inference\ntype ContactForm = v.InferOutput<typeof contactSchema>\n```\n\n![](https://static.zenn.studio/images/copy-icon.svg)![](https://static.zenn.studio/images/wrap-icon.svg)\n\n**Validation Execution**\n\n```\nconst handleSubmit = async (data: ContactForm) => {\n // Execute validation with safeParse\n const result = v.safeParse(contactSchema, data)\n\n if (result.success) {\n // On success: result.output contains validated data\n console.log(\"Validated Data:\", result.output)\n } else {\n // On failure: result.issues contains error info\n const fieldErrors: Record<string, string> = {}\n result.issues.forEach((issue) => {\n const fieldName = issue.path?.[0]?.key as string\n if (fieldName && !fieldErrors[fieldName]) {\n fieldErrors[fieldName] = issue.message\n }\n })\n // Error display processing\n }\n}\n```\n\n![](https://static.zenn.studio/images/copy-icon.svg)![](https://static.zenn.studio/images/wrap-icon.svg)\n\n### ArkType\n\n**Schema Definition**\n\n```\nimport { type } from \"arktype\"\n\n// TypeScript-like type literal syntax\nconst contactSchema = type({\n company: \"1<=string<=100\",\n name: \"1<=string<=50\",\n email: \"string\",\n category: \"'design'|'engineering'|'sales'|'marketing'\",\n message: \"1<=string<=1000\"\n})\n\n// Type Inference\ntype ContactForm = typeof contactBaseSchema.infer\n\n// Detailed validation implemented in a separate function\nfunction validateContact(data: ContactForm): { valid: boolean; errors: Record<string, string> } {\n const errors: Record<string, string> = {}\n\n if (data.company.length === 0) {\n errors.company = \"Please enter the company name\"\n } else if (data.company.length > 100) {\n errors.company = \"Company name must be within 100 characters\"\n }\n\n if (data.name.length === 0) {\n errors.name = \"Please enter your name\"\n } else if (data.name.length > 50) {\n errors.name = \"Name must be within 50 characters\"\n }\n\n if (data.email.length === 0) {\n errors.email = \"Please enter your email address\"\n } else {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n if (!emailRegex.test(data.email)) {\n errors.email = \"Please enter a valid email address\"\n }\n }\n\n if (data.message.length === 0) {\n errors.message = \"Please enter your inquiry\"\n } else if (data.message.length < 10) {\n errors.message = \"Inquiry must be at least 10 characters long\"\n } else if (data.message.length > 1000) {\n errors.message = \"Inquiry must be within 1000 characters\"\n }\n\n return {\n valid: Object.keys(errors).length === 0,\n errors,\n }\n}\n```\n\n![](https://static.zenn.studio/images/copy-icon.svg)![](https://static.zenn.studio/images/wrap-icon.svg)\n\n**Validation Execution**\n\n```\nconst handleSubmit = async (data: ContactForm) => {\n // Step 1: Type check\n const typeCheckResult = contactBaseSchema(data)\n\n // Determine by checking the \"problems\" property\n if (\"problems\" in typeCheckResult) {\n // Handle type errors\n const fieldErrors: Record<string, string> = {}\n (typeCheckResult as any).problems.forEach((problem: any) => {\n const pathKey = problem.path?.[0]\n if (pathKey && !fieldErrors[pathKey]) {\n fieldErrors[pathKey] = \"Input type is invalid\"\n }\n })\n // Error display processing\n } else {\n // Step 2: Custom validation\n const validData = typeCheckResult as ContactForm\n const validation = validateContact(validData)\n\n if (validation.valid) {\n console.log(\"Validated Data:\", validData)\n } else {\n // Handle validation errors\n setErrors(validation.errors)\n }\n }\n}\n```\n\n![](https://static.zenn.studio/images/copy-icon.svg)![](https://static.zenn.studio/images/wrap-icon.svg)\n\n### Summary\n\nZod and Valibot are characterized by their **intuitive and simple syntax** using method chaining or pipeline approaches. Validation rules can be understood at a glance, and since error handling is unified with `safeParse`, they offer **excellent code readability and maintainability, making them well-suited for team development**.\n\nArkType takes a unique approach by adopting a **TypeScript-like type literal syntax**. While basic type checks can be written concisely, implementing detailed validation or customizing error messages requires separate custom function implementations. As a result, the **amount of implementation code tends to increase, and the unique syntax may lead to a higher learning curve**.\n\n## 📌 Personal Impressions\n\nWith the release of Zod v4, the previous issues regarding performance and bundle size have been significantly improved, and it is likely to **continue being a strong candidate for validation libraries**.\n\nFurthermore, its ecosystem and community are overwhelmingly active compared to other libraries, and Zod seems to have the upper hand if you value maturity.\n\nHowever, if you prioritize performance above all else or are building a simple application, **choosing a library specialized for specific strengths** like Valibot or ArkType might be more appropriate.\n\nI actually tried introducing Valibot into a personal project, and I didn't encounter any particular problems or unsupported cases. I feel it is a solid candidate to consider for medium-sized applications.\n\n## 👀 Closing\n\nThank you for reading to the end! ☺️\n\nI hope this article helps you in your development, even if only a little!\n\nI also share my learnings and insights on tech selection and in-depth analysis of the latest technologies on my personal blog. If you are interested, I would be happy if you could check it out here!\n\n[https://techbuild.app/blog](https://techbuild.app/blog)\n\n### Discussion\n\n![](https://static.zenn.studio/images/drawing/discussion.png)\n\nログインするとコメントできます\n\nLogin","metadata":{"twitter:card":"summary_large_image","language":"en","ogSiteName":"Zenn","viewport":["width=device-width, initial-scale=1","width=device-width","width=device-width","width=device-width","width=device-width","width=device-width"],"title":"Comparing Zod Alternatives: A Comparative Evaluation of Valibot and ArkType","ogImage":"https://res.cloudinary.com/zenn/image/upload/s--R5mcJRdl--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Comparing%2520Zod%2520Alternatives%253A%2520A%2520Comparative%2520Evaluation%2520of%2520Valibot%2520and%2520ArkType%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:_mino%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2M0ZTUzNzYzMjYuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT","og:site_name":"Zenn","zenn:description":"Article by _mino","ogTitle":"Comparing Zod Alternatives: A Comparative Evaluation of Valibot and ArkType","ogUrl":"https://zenn.dev/m_noto/articles/a2c09f741ba65e?locale=en","next-head-count":["2","2","2","2","2"],"og:title":"Comparing Zod Alternatives: A Comparative Evaluation of Valibot and ArkType","apple-mobile-web-app-title":"Zenn","og:type":"article","og:url":"https://zenn.dev/m_noto/articles/a2c09f741ba65e?locale=en","og:image":"https://res.cloudinary.com/zenn/image/upload/s--R5mcJRdl--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Comparing%2520Zod%2520Alternatives%253A%2520A%2520Comparative%2520Evaluation%2520of%2520Valibot%2520and%2520ArkType%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:_mino%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2M0ZTUzNzYzMjYuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT","zenn:image":"https://storage.googleapis.com/zenn-user-upload/avatar/c4e5376326.jpeg","favicon":"https://static.zenn.studio/images/logo-transparent.png","scrapeId":"019d3953-131b-74ab-ab20-d746bda07530","sourceURL":"https://zenn.dev/m_noto/articles/a2c09f741ba65e?locale=en","url":"https://zenn.dev/m_noto/articles/a2c09f741ba65e?locale=en","statusCode":200,"contentType":"text/html; charset=utf-8","timezone":"America/New_York","proxyUsed":"basic","cacheState":"miss","indexId":"b2d5ade6-9f06-4084-8352-24f938b94261","creditsUsed":1}},{"url":"https://valibot.dev/guides/comparison/","title":"Comparison - Valibot","description":"For example, to validate a simple login form, Zod requires 17.7 kB with esbuild and 15.18 kB with Rolldown, whereas Valibot requires only 1.37 kB. That's a 90 % ...","position":3,"markdown":"# Comparison\n\nEven though Valibot's API resembles other solutions at first glance, the implementation and structure of the source code is very different. In the following, we would like to highlight the differences that can be beneficial for both you and your users.\n\n## Modular design\n\nInstead of relying on a few large functions with many methods, Valibot's API design and source code is based on many small and independent functions, each with just a single task. This modular design has several advantages.\n\nOn one hand, the functionality of Valibot can be easily extended with external code. On the other, it makes the source code more robust and secure because the functionality of the individual functions as well as special edge cases can be tested much easier through unit tests.\n\nHowever, perhaps the biggest advantage is that a bundler can use the static import statements to remove any code that is not needed. Thus, only the code that is actually used ends up in the production build. This allows us to extend the functionality of the library with additional functions without increasing the bundle size for all users.\n\nThis can make a big difference, especially for client-side validation, as it reduces the bundle size and, depending on the framework, speeds up the startup time.\n\n```ts\nimport * as v from 'valibot'; // 1.37 kB\n\nconst LoginSchema = v.object({\n email: v.pipe(\n v.string(),\n v.nonEmpty('Please enter your email.'),\n v.email('The email address is badly formatted.')\n ),\n password: v.pipe(\n v.string(),\n v.nonEmpty('Please enter your password.'),\n v.minLength(8, 'Your password must have 8 characters or more.')\n ),\n});\n```\n\n### Comparison with Zod\n\nFor example, to validate a simple login form, [Zod](https://zod.dev/) requires [17.7 kB with esbuild](https://bundlejs.com/?q=zod&treeshake=%5B%7B+object%2Cstring+%7D%5D) and 15.18 kB with Rolldown, whereas Valibot requires only [1.37 kB](https://bundlejs.com/?q=valibot&treeshake=%5B%7B+email%2CminLength%2CnonEmpty%2Cobject%2Cstring%2Cpipe+%7D%5D). That's a 90 % reduction in bundle size. This is due to the fact that Zod's functions have several methods with additional functionalities, that cannot be easily removed by current bundlers when they are not executed in your source code.\n\n```ts\n// 17.7 kB with esbuild and 15.18 kB with Rolldown\nimport * as z from 'zod';\n\nconst LoginSchema = z.object({\n email: z.string()\n .min(1, 'Please enter your email.')\n .email('The email address is badly formatted.'),\n password: z.string()\n .min(1, 'Please enter your password.')\n .min(8, 'Your password must have 8 characters or more.'),\n});\n```\n\nZod v4 also introduces Zod Mini, a tree-shakable, functional variant aimed at reducing bundle size. For the same login form, Zod Mini requires approximately [6.88 kB with esbuild](https://bundlejs.com/?q=zod%2Fmini&treeshake=%5B%7B+check%2Cemail%2CminLength%2Cobject%2Cstring+%7D%5D) and 3.94 kB with Rolldown, still about 3 to 5x larger than Valibot's [1.37 kB](https://bundlejs.com/?q=valibot&treeshake=%5B%7B+email%2CminLength%2CnonEmpty%2Cobject%2Cstring%2Cpipe+%7D%5D), representing a ~73 % reduction when using Valibot over Zod Mini.\n\n```ts\n// 6.88 kB with esbuild and 3.94 kB with Rolldown\nimport * as z from 'zod/mini';\n\nconst LoginSchema = z.object({\n email: z.check(\n z.string(),\n z.minLength(1, 'Please enter your email.'),\n z.email('The email address is badly formatted.')\n ),\n password: z.check(\n z.string(),\n z.minLength(1, 'Please enter your password.'),\n z.minLength(8, 'Your password must have 8 characters or more.')\n ),\n});\n```\n\n> Coming from [Zod](https://zod.dev/)? Read our [migration article](https://valibot.dev/blog/why-migrate-to-valibot/) to see the benefits of Valibot, and use our [migration guide](https://valibot.dev/guides/migrate-from-zod/) to migrate your schemas with confidence.\n\n## Performance\n\nWith a schema library, a distinction must be made between startup performance and runtime performance. Startup performance describes the time required to load and initialize the library. This benchmark is mainly influenced by the bundle size and the amount of work required to create a schema. Runtime performance describes the time required to validate unknown data using a schema.\n\nSince Valibot's implementation is optimized to minimize the bundle size and the effort of initialization, there is hardly any library that performs better in a [TTI](https://web.dev/articles/tti) benchmark. In terms of runtime performance, Valibot is in the midfield. Roughly speaking, the library is about twice as fast as [Zod](https://zod.dev/) v3, and has similar runtime performance to Zod v4 (including Zod Mini), but is much slower than [Typia](https://typia.io/) and [TypeBox](https://github.com/sinclairzx81/typebox), because we don't yet use a compiler that can generate highly optimized runtime code, and our implementation doesn't allow the use of the [`Function`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/Function) constructor.\n\n> Further details on performance can be found in the [bachelor's thesis](https://valibot.dev/thesis.pdf) Valibot is based on.","metadata":{"theme-color":"#111827","og:description":"Even though Valibot's API resembles other solutions at first glance, the implementation and structure of the source code is very different.","ogTitle":"Comparison","twitter:card":"summary_large_image","ogImage":"https://valibot.dev/og-image?title=Comparison&path=guides&description=Even%20though%20Valibot's%20API%20resembles%20other%20solutions%20at%20first%20glance%2C%20the%20implementation%20and%20structure%20of%20the%20source%20code%20is%20very%20different.","viewport":"width=device-width, initial-scale=1.0","ogUrl":"https://valibot.dev/guides/comparison/","og:type":"article","og:title":"Comparison","description":"Even though Valibot's API resembles other solutions at first glance, the implementation and structure of the source code is very different.","ogDescription":"Even though Valibot's API resembles other solutions at first glance, the implementation and structure of the source code is very different.","og:image":"https://valibot.dev/og-image?title=Comparison&path=guides&description=Even%20though%20Valibot's%20API%20resembles%20other%20solutions%20at%20first%20glance%2C%20the%20implementation%20and%20structure%20of%20the%20source%20code%20is%20very%20different.","title":"Comparison | Valibot","language":"en","og:url":"https://valibot.dev/guides/comparison/","favicon":"https://valibot.dev/icon-32px.png","scrapeId":"019d3953-131b-74ab-ab20-db3909576a9d","sourceURL":"https://valibot.dev/guides/comparison/","url":"https://valibot.dev/guides/comparison/","statusCode":200,"contentType":"text/html; charset=utf-8","proxyUsed":"basic","cacheState":"hit","cachedAt":"2026-03-27T12:20:38.354Z","creditsUsed":1}},{"url":"https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1","title":"Zod v4 got 17x Slower than v3 - DEV Community","description":"Zod v4 became 17 times slower, and nobody noticed. This is 100% true, but of course, that's not the whole story.","position":4,"markdown":"Hey everyone! 👋\n\nI'm [Dmitry](https://x.com/dzakh_dev), the creator of [Sury](https://dev.to/dzakh/welcome-sury-the-fastest-schema-with-next-gen-dx-5gl4)—the fastest schema library out there. If youre a fan of [Zod](https://v4.zod.dev/) (and who isnt?), youll want to read this. Today, I want to share some surprising findings about Zod v4s performance, what it means for you, and how to avoid the pitfalls.\n\n## Zod v4: 17x Slower? Not Quite, But...\n\nLets start with a little clickbait:\n\n**Zod v4 became 17 times slower, and nobody noticed 🙈**\n\nThis is 100% true, but of course, thats not the whole story. Lets dig in.\n\nRecently, while prepping for the big [Sury v10](https://dev.to/dzakh/welcome-sury-the-fastest-schema-with-next-gen-dx-5gl4) release, I decided to rerun my benchmarks with [Zod v4](https://v4.zod.dev/). The results? Fascinating.\n\n- For a non-trivial schema, Zod v4 is now **8x faster** than before.\n- **But** when you create a schema and use it just once (a common pattern in React components), performance drops significantly—down to about **6 ops/ms**.\n\nYou might think, “6 ops/ms is still fast!” But in UI-heavy apps, every millisecond counts. If youre using Zod in your React components, this could mean a noticeable performance hit.\n\n### Schema from the benchmark\n\n```\nimport { z } from \"zod\"; // 13.5 kB (min + gzip)\n\nconst zodSchema = z.object({\n number: z.number(),\n negNumber: z.number(),\n maxNumber: z.number(),\n string: z.string(),\n longString: z.string(),\n boolean: z.boolean(),\n deeplyNested: z.object({\n foo: z.string(),\n num: z.number(),\n bool: z.boolean(),\n }),\n});\n```\n\nEnter fullscreen modeExit fullscreen mode\n\n## What Changed in Zod v4?\n\nMy hunch was that Zod v4 started using `eval` (or, more precisely, JIT compilation via `new Function`) for validation. This isnt a bad thing — libraries like [TypeBox](https://github.com/sinclairzx81/typebox), [ArkType](https://arktype.io/), and even [Sury](https://github.com/DZakh/sury) use similar techniques for speed.\n\nBut theres a tradeoff:\n\n- **Schema creation** becomes slower (because of the JIT compilation step).\n\nAlthough, it's not a problem for most users, because:\n\n- **Validation** becomes much faster (once the schema is compiled and used multiple times).\n\nZod v3 was already a bit slow at schema creation, but v4 takes it further. If youre creating schemas on the fly (again, think React), you might feel the slowdown.\n\n## Is Eval/JIT Bad? Not Really.\n\nTheres a common myth that `eval`/`new Function` is always slow or unsafe. In reality, when used carefully, it can unlock incredible performance. [Sury](https://github.com/DZakh/sury) leans heavily on JIT compilation and is still almost on par with [Valibot](https://valibot.dev/), which is designed for quick initialization.\n\nHeres a quick comparison (min + gzip):\n\n| Library | Import Size | Parse (same schema) | Create & Parse Once |\n| --- | --- | --- | --- |\n| [Sury](https://github.com/DZakh/sury) | 4.27 kB | 94,828 ops/ms (JIT only) | 166 ops/ms |\n| [Zod v3](https://github.com/colinhacks/zod) | 13.5 kB | 1,191 ops/ms (no JIT) | 93 ops/ms |\n| [Zod v4](https://v4.zod.dev/) | 13.5 kB | 8,437 ops/ms | 6 ops/ms |\n| [Valibot](https://valibot.dev/) | 1.23 kB | 1,721 ops/ms (no JIT) | 287 ops/ms |\n| [TypeBox](https://github.com/sinclairzx81/typebox) | 22.8 kB | 99,640 ops/ms (only assert support) | 111 ops/ms |\n| [ArkType](https://arktype.io/) | 45.8 kB | 67,552 ops/ms | 11 ops/ms |\n\n> Full comparison in [Surys README](https://github.com/DZakh/sury#comparison)\n\n## What Should Zod Users Do?\n\nIf youre using Zod in a backend or for long-lived schemas, youll love the new speed. But if youre creating schemas dynamically (like in React components), you might want to benchmark your app or consider alternatives.\n\nZod v4 does offer both normal and JIT-optimized parsing, so you might be able to tweak your usage. But its worth being aware of the tradeoffs.\n\nAlso, there should be a way to disable JIT compilation for those who don't want it. I don't know the exact API or whether it's exposed, but I've seen that this option exists in Zod's internals.\n\n## Enter Sury: The Fastest Schema Library\n\nOkay, shameless plug time! 😅\n\nI built [Sury](https://dev.to/dzakh/welcome-sury-the-fastest-schema-with-next-gen-dx-5gl4) to solve exactly these problems:\n\n- **Blazing fast** parsing and validation (thanks to JIT)\n- **Tiny bundle size** and tree-shakable API\n- **Great TypeScript inference** and developer experience\n- **Standard Schema** and **JSON Schema** support out of the box\n- **Declarative transformations** and automatic serialization\n\nSury is already used in production by many companies and is compatible with tools like tRPC, TanStack Form, Hono, and more.\n\nHeres what using Sury looks like:\n\n```\nimport * as S from \"sury\";\n\nconst filmSchema = S.schema({\n id: S.bigint,\n title: S.string,\n tags: S.array(S.string),\n rating: S.union([\"G\", \"PG\", \"PG13\", \"R\"]),\n});\n// On hover: S.Schema<{ id: bigint; title: string; tags: string[]; rating: \"G\" | \"PG\" | \"PG13\" | \"R\"; }, Input>\n\ntype Film = S.Output<typeof filmSchema>;\n// On hover: { id: bigint; title: string; tags: string[]; rating: \"G\" | \"PG\" | \"PG13\" | \"R\"; }\n\nS.parseOrThrow(\n {\n id: 1n,\n title: \"My first film\",\n tags: [\"Loved\"],\n rating: \"S\",\n },\n filmSchema\n);\n// Throws S.Error with message: Failed at [\"rating\"]: Expected \"G\" | \"PG\" | \"PG13\" | \"R\", received \"S\"\n\n// Or do it safely:\nconst result = S.safe(() => S.parseOrThrow(data, filmSchema));\nif (result.error) {\n console.log(result.error.reason);\n // Expected \"G\" | \"PG\" | \"PG13\" | \"R\", received \"S\"\n}\n```\n\nEnter fullscreen modeExit fullscreen mode\n\nAnd yes, Sury also uses JIT under the hood, but with a focus on both creation and validation speed.\n\n## Final Thoughts\n\n- Zod v4 is a fantastic library, and [Colin](https://x.com/colinhacks) (the author) did an amazing job supporting both normal and JIT-optimized parsing.\n- If you care about performance—especially in dynamic or UI-heavy scenarios — benchmark your usage.\n- If you want the fastest schema validation, smallest bundle, and next-gen DX, give [Sury](https://github.com/DZakh/sury) a try.\n(And if you like it, a GitHub star would make my day! ⭐)\n\nThanks for reading! If you have questions, feedback, or want to see more benchmarks, let me know in the comments or ping me on [X](https://x.com/dzakh_dev). See you soon with more updates! 🚀\n\n[![profile](https://media2.dev.to/dynamic/image/width=64,height=64,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F3774%2F02d4162c-978f-4471-9d39-b2928cfb9e24.png)\\\\\nSentry](https://dev.to/sentry) Promoted\n\nDropdown menu\n\n- [What's a billboard?](https://dev.to/billboards)\n- [Manage preferences](https://dev.to/settings/customization#sponsors)\n\n* * *\n\n- [Report billboard](https://dev.to/report-abuse?billboard=262863)\n\n[![Sentry image](https://media2.dev.to/dynamic/image/width=775%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FFEPDyO5.png)](https://sentry.io/welcome/?utm_source=devto&utm_medium=paid-community&utm_campaign=brand-fy27q1-quitbuggin&utm_content=static-ad-qb-thumb-trysentry&bb=262863)\n\n## [TIL I dont have to bug out](https://sentry.io/welcome/?utm_source=devto&utm_medium=paid-community&utm_campaign=brand-fy27q1-quitbuggin&utm_content=static-ad-qb-thumb-trysentry&bb=262863)\n\n[Read more →](https://sentry.io/welcome/?utm_source=devto&utm_medium=paid-community&utm_campaign=brand-fy27q1-quitbuggin&utm_content=static-ad-qb-thumb-trysentry&bb=262863)\n\nRead More\n\n\n![pic](https://media2.dev.to/dynamic/image/width=256,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png)\n\n[Create template](https://dev.to/settings/response-templates)\n\nTemplates let you quickly answer FAQs or store snippets for re-use.\n\nSubmitPreview [Dismiss](https://dev.to/404.html)\n\nCollapseExpand\n\n[![katriel profile image](https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F726855%2F69d5083a-b3be-48d9-b951-0ed15c72658f.jpg)](https://dev.to/katriel)\n\n[Katriel](https://dev.to/katriel)\n\nKatriel\n\n\n\n[![](https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F726855%2F69d5083a-b3be-48d9-b951-0ed15c72658f.jpg)\\\\\nKatriel](https://dev.to/katriel)\n\nFollow\n\n- Email\n\n\n[katriel.developer@gmail.com](mailto:katriel.developer@gmail.com)\n\n- Joined\n\n\nOct 15, 2021\n\n\n• [Jul 29 '25](https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1#comment-307ao)\n\nDropdown menu\n\n- [Copy link](https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1#comment-307ao)\n- Hide\n\n- [Report abuse](https://dev.to/report-abuse?url=https://dev.to/katriel/comment/307ao)\n\nDoes that mean, for example, in serverless scenarios where you gotta initializate the library and schemas each time, sometimes even each request. Valibot, Sury and Zod V3 are the best ones?\n\nCollapseExpand\n\n[![dzakh profile image](https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F988236%2Fbe515a70-aadf-48ea-ba1f-e92410a78528.jpeg)](https://dev.to/dzakh)\n\n[Dmitry Zakharov](https://dev.to/dzakh)\n\nDmitry Zakharov\n\n\n\n[![](https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F988236%2Fbe515a70-aadf-48ea-ba1f-e92410a78528.jpeg)\\\\\nDmitry Zakharov](https://dev.to/dzakh)\n\nFollow\n\nBuild fastest tools with best DX 🫡\n\n\n- Location\n\n\n\nGeorgia, Batumi\n\n\n- Work\n\n\n\nEnvio\n\n\n- Joined\n\n\nDec 11, 2022\n\n\n• [Aug 5 '25](https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1#comment-30b0l)\n\nDropdown menu\n\n- [Copy link](https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1#comment-30b0l)\n- Hide\n\n- [Report abuse](https://dev.to/report-abuse?url=https://dev.to/dzakh/comment/30b0l)\n\nYes. For this specific usecase I'd even say Typia is the best tool.\n\nAre you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's [permalink](https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1#).\n\n\nHide child comments as well\n\nConfirm\n\n\nFor further actions, you may consider blocking this person and/or [reporting abuse](https://dev.to/report-abuse)\n\n[![profile](https://media2.dev.to/dynamic/image/width=64,height=64,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2584%2F76d5831f-7acd-4123-8083-00818e48de9b.png)\\\\\nDraft.dev](https://dev.to/draft) Promoted\n\nDropdown menu\n\n- [What's a billboard?](https://dev.to/billboards)\n- [Manage preferences](https://dev.to/settings/customization#sponsors)\n\n* * *\n\n- [Report billboard](https://dev.to/report-abuse?billboard=261775)\n\n[![Graphite image](https://media2.dev.to/dynamic/image/width=775%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FYPX9MWh.png)](https://graphite.com/l/stacked-prs-guide?utm_source=draft-dev&bb=261775)\n\n## [Stop Shipping Massive PRs](https://graphite.com/l/stacked-prs-guide?utm_source=draft-dev&bb=261775)\n\nBig pull requests slow everything down. This guide explains stacked pull requests and shows how to roll them out without breaking your workflow or starting a Git rebase war. Written for engineering managers who just want reviews to move faster.\n\n[Read more](https://graphite.com/l/stacked-prs-guide?utm_source=draft-dev&bb=261775)\n\n👋 Kindness is contagious\n\nDropdown menu\n\n- [What's a billboard?](https://dev.to/billboards)\n- [Manage preferences](https://dev.to/settings/customization#sponsors)\n\n* * *\n\n- [Report billboard](https://dev.to/report-abuse?billboard=236877)\n\nx\n\nExplore this **insightful** write-up, celebrated by our thriving DEV Community. **Developers everywhere** are invited to contribute and elevate our shared expertise.\n\nA simple \"thank you\" can brighten someones day—leave your appreciation in the comments!\n\nOn DEV, **knowledge-sharing fuels our progress** and strengthens our community ties. Found this useful? A quick thank you to the author makes all the difference.\n\n### [Okay](https://dev.to/enter?state=new-user&bb=236877)\n\n![DEV Community](https://media2.dev.to/dynamic/image/width=190,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png)\n\nWe're a place where coders share, stay up-to-date and grow their careers.\n\n\n[Log in](https://dev.to/enter?signup_subforem=1) [Create account](https://dev.to/enter?signup_subforem=1&state=new-user)\n\n![](https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg)![](https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg)![](https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg)![](https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg)![](https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg)","metadata":{"og:type":"article","theme-color":["#ffffff","#000000"],"twitter:description":"A surprising finding about Zod v4s performance, what it means for you, and how to avoid the pitfalls.","apple-mobile-web-app-title":"dev.to","environment":"production","csrf-param":"authenticity_token","forem:domain":"dev.to","ogSiteName":"DEV Community","ogTitle":"Zod v4 got 17x Slower than v3 🚦","twitter:title":"Zod v4 got 17x Slower than v3 🚦","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","twitter:widgets:new-embed-design":"on","keywords":"zod, typescript, schema, validation, software, coding, development, engineering, inclusive, community","csrf-token":"yLQSk-6A0E_VyCZakR76zGAbezEP50ATzC3zCMaYvJarFmNzzaTejnJy-MNAuL9RzgL05V9wsn_HIS7VSFTpyA","ogImage":"https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cmh41mb9tk2coludfgu.png","og:url":"https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1","description":"A surprising finding about Zod v4s performance, what it means for you, and how to avoid the pitfalls. Tagged with zod, typescript, schema, validation.","og:description":"A surprising finding about Zod v4s performance, what it means for you, and how to avoid the pitfalls.","forem:name":"DEV Community","ogDescription":"A surprising finding about Zod v4s performance, what it means for you, and how to avoid the pitfalls.","twitter:creator":"@dzakh_dev","forem:logo":"https://media2.dev.to/dynamic/image/width=512,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png","search-script":"https://assets.dev.to/assets/Search-b977aea0f2d7a5818b4ebd97f7d4aba8548099f84f5db5761f8fa67be76abc54.js","user-signed-in":"false","title":"Zod v4 got 17x Slower than v3 🚦 - DEV Community","language":"en","ogUrl":"https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1","twitter:card":"summary_large_image","last-updated":"2026-03-27 14:30:37 UTC","application-name":"dev.to","og:site_name":"DEV Community","twitter:site":"@thepracticaldev","viewport":"width=device-width, initial-scale=1.0, viewport-fit=cover","og:title":"Zod v4 got 17x Slower than v3 🚦","twitter:image:src":"https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cmh41mb9tk2coludfgu.png","head-cached-at":"1774621837","og:image":"https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cmh41mb9tk2coludfgu.png","favicon":"https://media2.dev.to/dynamic/image/width=32,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png","scrapeId":"019d3953-131b-74ab-ab20-df6796fbdd0a","sourceURL":"https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1","url":"https://dev.to/dzakh/zod-v4-17x-slower-and-why-you-should-care-1m1","statusCode":200,"contentType":"text/html; charset=utf-8","timezone":"America/New_York","proxyUsed":"basic","cacheState":"miss","indexId":"a83c8f65-9177-4f2a-a22d-0b0ced1ad7b5","creditsUsed":1}},{"url":"https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22zod%22%7D%5D%2C%22color%22%3A%22%23ef4444%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22io-ts%22%7D%5D%2C%22color%22%3A%22%233b82f6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22arktype%22%7D%5D%2C%22color%22%3A%22%2310b981%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22valibot%22%7D%5D%2C%22color%22%3A%22%23f97316%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22yup%22%7D%5D%2C%22color%22%3A%22%2306b6d4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40sinclair%2Ftypebox%22%7D%5D%2C%22color%22%3A%22%23d946ef%22%7D%5D&transform=none&binType=weekly&showDataMode=all","title":"zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox","description":"Compare zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox npm downloads side-by-side. View download trends, weekly stats, and historical data.","position":5,"markdown":"[![](https://tanstack.com/.netlify/images?url=%2Fimages%2Flogos%2Flogo-color-100.png&w=30&q=80)![](https://tanstack.com/images/logos/logo-black.svg)![](https://tanstack.com/images/logos/logo-white.svg)\\\\\n\\\\\nTanStack](https://tanstack.com/)\n\n[NPM Stats](https://tanstack.com/stats/npm)\n\n[NewTanStack Intent](https://tanstack.com/intent/latest)\n\n[Follow TanStack on GitHub](https://github.com/tanstack)[Follow TanStack on X.com](https://x.com/tan_stack)[Follow TanStack on Besky](https://bsky.app/profile/tanstack.com)[Follow TanStack on Instagram](https://instagram.com/tan_stack)[Subscribe to TanStack on YouTube](https://youtube.com/@tan_stack)[Join TanStack Discord](https://tlinz.com/discord)\n\nSearch...\nK\n\nAuto\n\n[Log In](https://tanstack.com/login)\n\n[StartRC](https://tanstack.com/start/latest)\n\n[StartRC](https://tanstack.com/start/latest)\n\n[Router](https://tanstack.com/router/latest)\n\n[Router](https://tanstack.com/router/latest)\n\n[Query](https://tanstack.com/query/latest)\n\n[Query](https://tanstack.com/query/latest)\n\n[Table](https://tanstack.com/table/latest)\n\n[Table](https://tanstack.com/table/latest)\n\n[DBbeta](https://tanstack.com/db/latest)\n\n[DBbeta](https://tanstack.com/db/latest)\n\n[AIalpha](https://tanstack.com/ai/latest)\n\n[AIalpha](https://tanstack.com/ai/latest)\n\n[Formnew](https://tanstack.com/form/latest)\n\n[Formnew](https://tanstack.com/form/latest)\n\n[Virtual](https://tanstack.com/virtual/latest)\n\n[Virtual](https://tanstack.com/virtual/latest)\n\n[Pacerbeta](https://tanstack.com/pacer/latest)\n\n[Pacerbeta](https://tanstack.com/pacer/latest)\n\n[Hotkeysalpha](https://tanstack.com/hotkeys/latest)\n\n[Hotkeysalpha](https://tanstack.com/hotkeys/latest)\n\n[Storealpha](https://tanstack.com/store/latest)\n\n[Storealpha](https://tanstack.com/store/latest)\n\n[Devtoolsalpha](https://tanstack.com/devtools/latest)\n\n[Devtoolsalpha](https://tanstack.com/devtools/latest)\n\n[CLIalpha](https://tanstack.com/cli/latest)\n\n[CLIalpha](https://tanstack.com/cli/latest)\n\n[Intentalpha](https://tanstack.com/intent/latest)\n\n[Intentalpha](https://tanstack.com/intent/latest)\n\n[More Libraries](https://tanstack.com/libraries)\n\n[More Libraries](https://tanstack.com/libraries)\n\n[BuilderAlpha](https://tanstack.com/builder)\n\n[BuilderAlpha](https://tanstack.com/builder)\n\n[Blog](https://tanstack.com/blog)\n\n[Blog](https://tanstack.com/blog)\n\n[Maintainers](https://tanstack.com/maintainers)\n\n[Maintainers](https://tanstack.com/maintainers)\n\n[Partners](https://tanstack.com/partners)\n\n[Partners](https://tanstack.com/partners)\n\n[Showcase](https://tanstack.com/showcase)\n\n[Showcase](https://tanstack.com/showcase)\n\n[LearnNEW](https://tanstack.com/learn)\n\n[LearnNEW](https://tanstack.com/learn)\n\n[Stats](https://tanstack.com/stats/npm)\n\n[Stats](https://tanstack.com/stats/npm)\n\n[YouTube](https://youtube.com/@tan_stack)\n\n[YouTube](https://youtube.com/@tan_stack)\n\n[Discord](https://tlinz.com/discord)\n\n[Discord](https://tlinz.com/discord)\n\n[Merch](https://tanstack.com/merch)\n\n[Merch](https://tanstack.com/merch)\n\n[Support](https://tanstack.com/support)\n\n[Support](https://tanstack.com/support)\n\n[GitHub](https://github.com/tanstack)\n\n[GitHub](https://github.com/tanstack)\n\n[Ethos](https://tanstack.com/ethos)\n\n[Ethos](https://tanstack.com/ethos)\n\n[Tenets](https://tanstack.com/tenets)\n\n[Tenets](https://tanstack.com/tenets)\n\n[Brand Guide](https://tanstack.com/brand-guide)\n\n[Brand Guide](https://tanstack.com/brand-guide)\n\n1 YearWeeklyActual ValuesNo Facet XNo Facet YAll Data\n\nzod\n\nio-ts\n\narktype\n\nvalibot\n\nyup\n\n@sinclair/typebox\n\nLoading download statistics...\n\n| Package Name | Total Period Downloads | Downloads last week |\n| --- | --- | --- |\n\n## Popular Comparisons\n\n[**Data Fetching**\\\\\n\\\\\n@tanstack/react-query\\\\\n\\\\\nswr\\\\\n\\\\\n@apollo/client\\\\\n\\\\\n@trpc/client](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-query%22%7D%2C%7B%22name%22%3A%22react-query%22%7D%5D%2C%22color%22%3A%22%23FF4500%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22swr%22%7D%5D%2C%22color%22%3A%22%23ec4899%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40apollo%2Fclient%22%7D%5D%2C%22color%22%3A%22%236B46C1%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40trpc%2Fclient%22%7D%5D%2C%22color%22%3A%22%232596BE%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**State Management**\\\\\n\\\\\nredux\\\\\n\\\\\nmobx\\\\\n\\\\\nzustand\\\\\n\\\\\njotai\\\\\n\\\\\nvaltio\\\\\n\\\\\n@tanstack/react-query](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22redux%22%7D%5D%2C%22color%22%3A%22%23764ABC%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22mobx%22%7D%5D%2C%22color%22%3A%22%23FF9955%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22zustand%22%7D%5D%2C%22color%22%3A%22%23764ABC%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22jotai%22%7D%5D%2C%22color%22%3A%22%236366f1%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22valtio%22%7D%5D%2C%22color%22%3A%22%23FF6B6B%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-query%22%7D%2C%7B%22name%22%3A%22react-query%22%7D%5D%2C%22color%22%3A%22%23FF4500%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Routing (React)**\\\\\n\\\\\nreact-router\\\\\n\\\\\n@tanstack/react-router\\\\\n\\\\\nnext\\\\\n\\\\\nwouter\\\\\n\\\\\nexpo\\\\\n\\\\\nBaseline:\\\\\n\\\\\nreact](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-router%22%7D%5D%2C%22color%22%3A%22%23FF0000%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-router%22%7D%5D%2C%22color%22%3A%22%2332CD32%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22next%22%7D%5D%2C%22color%22%3A%22%234682B4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22wouter%22%7D%5D%2C%22color%22%3A%22%238b5cf6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22expo%22%7D%5D%2C%22color%22%3A%22%23f59e0b%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22react%22%2C%22hidden%22%3Atrue%7D%5D%2C%22baseline%22%3Atrue%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Data Grids**\\\\\n\\\\\nag-grid-community\\\\\n\\\\\n@tanstack/react-table\\\\\n\\\\\nhandsontable\\\\\n\\\\\n@mui/x-data-grid\\\\\n\\\\\nreact-data-grid](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22ag-grid-community%22%7D%2C%7B%22name%22%3A%22ag-grid-enterprise%22%7D%5D%2C%22color%22%3A%22%2329B6F6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-table%22%7D%2C%7B%22name%22%3A%22react-table%22%7D%5D%2C%22color%22%3A%22%23FF7043%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22handsontable%22%7D%5D%2C%22color%22%3A%22%23FFCA28%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40mui%2Fx-data-grid%22%7D%2C%7B%22name%22%3A%22mui-datatables%22%7D%5D%2C%22color%22%3A%22%231976D2%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-data-grid%22%7D%5D%2C%22color%22%3A%22%234CAF50%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Virtualization**\\\\\n\\\\\nreact-virtualized\\\\\n\\\\\nreact-window\\\\\n\\\\\n@tanstack/react-virtual\\\\\n\\\\\nreact-lazyload\\\\\n\\\\\nvirtua\\\\\n\\\\\nreact-virtuoso](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-virtualized%22%7D%5D%2C%22color%22%3A%22%23FF6B6B%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-window%22%7D%5D%2C%22color%22%3A%22%234ECDC4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-virtual%22%7D%2C%7B%22name%22%3A%22react-virtual%22%7D%5D%2C%22color%22%3A%22%23FF4500%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-lazyload%22%7D%5D%2C%22color%22%3A%22%23FFD93D%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22virtua%22%7D%5D%2C%22color%22%3A%22%236C5CE7%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-virtuoso%22%7D%5D%2C%22color%22%3A%22%2300B894%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Frameworks**\\\\\n\\\\\nreact\\\\\n\\\\\nvue\\\\\n\\\\\n@angular/core\\\\\n\\\\\nsvelte\\\\\n\\\\\nsolid-js\\\\\n\\\\\npreact](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22react%22%7D%5D%2C%22color%22%3A%22%2361DAFB%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22vue%22%7D%5D%2C%22color%22%3A%22%2341B883%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40angular%2Fcore%22%7D%5D%2C%22color%22%3A%22%23DD0031%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22svelte%22%7D%5D%2C%22color%22%3A%22%23FF3E00%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22solid-js%22%7D%5D%2C%22color%22%3A%22%232C4F7C%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22preact%22%7D%5D%2C%22color%22%3A%22%23673AB8%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Styling**\\\\\n\\\\\ntailwindcss\\\\\n\\\\\nbootstrap\\\\\n\\\\\n@emotion/react\\\\\n\\\\\n@stitches/react\\\\\n\\\\\n@vanilla-extract/css](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22tailwindcss%22%7D%5D%2C%22color%22%3A%22%2306B6D4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22bootstrap%22%7D%5D%2C%22color%22%3A%22%237952B3%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40emotion%2Freact%22%7D%5D%2C%22color%22%3A%22%23D36AC2%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40stitches%2Freact%22%7D%5D%2C%22color%22%3A%22%238b5cf6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40vanilla-extract%2Fcss%22%7D%5D%2C%22color%22%3A%22%23FFB6C1%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Build Tools**\\\\\n\\\\\nwebpack\\\\\n\\\\\nvite\\\\\n\\\\\nrollup\\\\\n\\\\\nrolldown\\\\\n\\\\\nesbuild\\\\\n\\\\\n@swc/core\\\\\n\\\\\nparcel\\\\\n\\\\\n@rspack/core](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22webpack%22%7D%5D%2C%22color%22%3A%22%238DD6F9%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22vite%22%7D%5D%2C%22color%22%3A%22%23008000%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22rollup%22%7D%5D%2C%22color%22%3A%22%23e80A3F%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22rolldown%22%7D%5D%2C%22color%22%3A%22%23FF5733%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22esbuild%22%7D%5D%2C%22color%22%3A%22%23FFCF00%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40swc%2Fcore%22%7D%5D%2C%22color%22%3A%22%23DEAD0F%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22parcel%22%7D%5D%2C%22color%22%3A%22%232D8CFF%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40rspack%2Fcore%22%7D%5D%2C%22color%22%3A%22%238DD6F9%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Testing**\\\\\n\\\\\njest\\\\\n\\\\\nvitest\\\\\n\\\\\n@testing-library/react\\\\\n\\\\\ncypress\\\\\n\\\\\nplaywright\\\\\n\\\\\n@storybook/react](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22jest%22%7D%5D%2C%22color%22%3A%22%23C21325%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22vitest%22%7D%5D%2C%22color%22%3A%22%23646CFF%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40testing-library%2Freact%22%7D%5D%2C%22color%22%3A%22%23E33332%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22cypress%22%7D%5D%2C%22color%22%3A%22%234A5568%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22playwright%22%7D%5D%2C%22color%22%3A%22%232EAD33%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40storybook%2Freact%22%7D%5D%2C%22color%22%3A%22%23FF4785%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Forms**\\\\\n\\\\\nreact-hook-form\\\\\n\\\\\n@tanstack/form-core\\\\\n\\\\\n@conform-to/dom](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-hook-form%22%7D%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Fform-core%22%7D%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40conform-to%2Fdom%22%7D%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**UI Components**\\\\\n\\\\\n@mui/material\\\\\n\\\\\n@chakra-ui/react\\\\\n\\\\\n@radix-ui/themes\\\\\n\\\\\n@headlessui/react\\\\\n\\\\\n@mantine/core](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40mui%2Fmaterial%22%7D%5D%2C%22color%22%3A%22%230081CB%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40chakra-ui%2Freact%22%7D%5D%2C%22color%22%3A%22%23319795%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40radix-ui%2Fthemes%22%7D%5D%2C%22color%22%3A%22%23FF6F61%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40headlessui%2Freact%22%7D%5D%2C%22color%22%3A%22%23f43f5e%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40mantine%2Fcore%22%7D%5D%2C%22color%22%3A%22%23FFD700%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Animation**\\\\\n\\\\\nmotion\\\\\n\\\\\nreact-spring\\\\\n\\\\\n@react-spring/web\\\\\n\\\\\ngsap\\\\\n\\\\\n@motionone/dom\\\\\n\\\\\n@formkit/auto-animate](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22motion%22%7D%2C%7B%22name%22%3A%22framer-motion%22%7D%5D%2C%22color%22%3A%22%23FF0055%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22react-spring%22%7D%5D%2C%22color%22%3A%22%23FF7F50%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40react-spring%2Fweb%22%7D%5D%2C%22color%22%3A%22%23FF4500%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22gsap%22%7D%5D%2C%22color%22%3A%22%2332CD32%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40motionone%2Fdom%22%7D%5D%2C%22color%22%3A%22%23FF1493%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40formkit%2Fauto-animate%22%7D%5D%2C%22color%22%3A%22%23FFD700%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Date & Time**\\\\\n\\\\\ndate-fns\\\\\n\\\\\ndayjs\\\\\n\\\\\nluxon\\\\\n\\\\\nmoment\\\\\n\\\\\n@date-io/date-fns\\\\\n\\\\\ntemporal-polyfill](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22date-fns%22%7D%5D%2C%22color%22%3A%22%23E91E63%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22dayjs%22%7D%5D%2C%22color%22%3A%22%23FF6B6B%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22luxon%22%7D%5D%2C%22color%22%3A%22%233498DB%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22moment%22%7D%5D%2C%22color%22%3A%22%234A5568%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40date-io%2Fdate-fns%22%7D%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22temporal-polyfill%22%7D%5D%2C%22color%22%3A%22%23a855f7%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Validation**\\\\\n\\\\\nzod\\\\\n\\\\\nio-ts\\\\\n\\\\\narktype\\\\\n\\\\\nvalibot\\\\\n\\\\\nyup\\\\\n\\\\\n@sinclair/typebox](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22zod%22%7D%5D%2C%22color%22%3A%22%23ef4444%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22io-ts%22%7D%5D%2C%22color%22%3A%22%233b82f6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22arktype%22%7D%5D%2C%22color%22%3A%22%2310b981%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22valibot%22%7D%5D%2C%22color%22%3A%22%23f97316%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22yup%22%7D%5D%2C%22color%22%3A%22%2306b6d4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40sinclair%2Ftypebox%22%7D%5D%2C%22color%22%3A%22%23d946ef%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**Documentation**\\\\\n\\\\\nvitepress\\\\\n\\\\\n@docusaurus/core\\\\\n\\\\\nvocs\\\\\n\\\\\n@astrojs/starlight\\\\\n\\\\\nnextra\\\\\n\\\\\nfumadocs-core](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22vitepress%22%7D%5D%2C%22color%22%3A%22%23a8b1ff%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40docusaurus%2Fcore%22%7D%5D%2C%22color%22%3A%22%2321b091%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22vocs%22%7D%5D%2C%22color%22%3A%22%230090ff%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40astrojs%2Fstarlight%22%7D%5D%2C%22color%22%3A%22%23f97316%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22nextra%22%7D%5D%2C%22color%22%3A%22%2300CED1%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22fumadocs-core%22%7D%5D%2C%22color%22%3A%22%23DA70D6%22%7D%5D&transform=none&binType=weekly&showDataMode=all) [**All TanStack Packages**\\\\\n\\\\\n@tanstack/react-query\\\\\n\\\\\n@tanstack/react-table\\\\\n\\\\\n@tanstack/react-router\\\\\n\\\\\n@tanstack/react-virtual\\\\\n\\\\\n@tanstack/react-form\\\\\n\\\\\n@tanstack/start\\\\\n\\\\\n@tanstack/store\\\\\n\\\\\n@tanstack/ranger\\\\\n\\\\\n@tanstack/config\\\\\n\\\\\n@tanstack/react-charts](https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-query%22%7D%2C%7B%22name%22%3A%22react-query%22%7D%5D%2C%22color%22%3A%22%23FF4500%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-table%22%7D%2C%7B%22name%22%3A%22react-table%22%7D%5D%2C%22color%22%3A%22%23FF7043%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-router%22%7D%5D%2C%22color%22%3A%22%2332CD32%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-virtual%22%7D%2C%7B%22name%22%3A%22react-virtual%22%7D%5D%2C%22color%22%3A%22%238B5CF6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-form%22%7D%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Fstart%22%7D%5D%2C%22color%22%3A%22%2300CED1%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Fstore%22%7D%5D%2C%22color%22%3A%22%23FF69B4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Franger%22%7D%5D%2C%22color%22%3A%22%2398D8C8%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Fconfig%22%7D%5D%2C%22color%22%3A%22%23FFA500%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40tanstack%2Freact-charts%22%7D%5D%2C%22color%22%3A%22%234169E1%22%7D%5D&transform=none&binType=weekly&showDataMode=all)\n\n[TanStack DB\\\\\n\\\\\nThe reactive client-first store for your API\\\\\nExplore DB →](https://tanstack.com/db) [TanStack Start\\\\\n\\\\\nFull-stack Framework powered by TanStack Router for React and Solid\\\\\nExplore Start →](https://tanstack.com/start)\n\nTanStack OSS\n\n## Frequently Asked Questions\n\nHow are npm download statistics calculated?▼\n\nNPM download statistics are sourced from the official npm registry API. Downloads are counted each time a package is installed via npm, yarn, or pnpm. These numbers include downloads from CI/CD pipelines, development machines, and production deployments.\n\nWhat's the difference between weekly and daily downloads?▼\n\nDaily downloads show the exact number of downloads per day, useful for spotting short-term trends and anomalies. Weekly downloads aggregate 7 days of data, smoothing out day-to-day variations and making it easier to identify long-term growth patterns.\n\nHow does TanStack NPM Stats compare to npmtrends?▼\n\nTanStack NPM Stats offers faster load times with cached data, flexible time ranges up to all-time history, advanced features like baseline comparisons and relative growth charts, plus the ability to combine multiple packages into a single trend line for tracking package migrations (e.g., react-query to @tanstack/react-query).\n\nWhy do some packages show zero downloads before a certain date?▼\n\nNPM download statistics are only available from January 10, 2015 onwards. Additionally, packages will show zero downloads before their initial publish date. Some packages may also be renamed or scoped (e.g., react-query became @tanstack/react-query), so historical data may appear under different package names.\n\nCan I compare any npm package?▼\n\nYes! You can compare any public package on the npm registry. Simply search for packages by name and add them to your comparison. You can compare multiple packages simultaneously and even group related packages together (like combining legacy and new package names) for accurate historical tracking.","metadata":{"title":"zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox - NPM Download Stats & Trends | Compare Packages","ogDescription":"Compare zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox npm downloads side-by-side. View download trends, weekly stats, and historical data. Free npm package comparison tool - faster than npmtrends.","twitter:card":"summary_large_image","og:title":"zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox - NPM Download Stats & Trends | Compare Packages","og:image":"https://tanstack.com/assets/og-C0HGjoLl.png","description":"Compare zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox npm downloads side-by-side. View download trends, weekly stats, and historical data. Free npm package comparison tool - faster than npmtrends.","keywords":"zod, io-ts, arktype, valibot, yup, @sinclair/typebox, npm downloads, npm stats, package comparison, npm trends, download statistics","twitter:title":"zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox - NPM Download Stats & Trends | Compare Packages","viewport":"width=device-width, initial-scale=1","twitter:image":"https://tanstack.com/assets/og-C0HGjoLl.png","twitter:description":"Compare zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox npm downloads side-by-side. View download trends, weekly stats, and historical data. Free npm package comparison tool - faster than npmtrends.","twitter:creator":"@tannerlinsley","og:description":"Compare zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox npm downloads side-by-side. View download trends, weekly stats, and historical data. Free npm package comparison tool - faster than npmtrends.","twitter:site":"@tannerlinsley","ogTitle":"zod vs io-ts vs arktype vs valibot vs yup vs @sinclair/typebox - NPM Download Stats & Trends | Compare Packages","og:type":"website","ogImage":"https://tanstack.com/assets/og-C0HGjoLl.png","language":"en","theme-color":"#101828","favicon":"https://tanstack.com/favicon-32x32.png","scrapeId":"019d3953-131b-74ab-ab20-e170bb58adb8","sourceURL":"https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22zod%22%7D%5D%2C%22color%22%3A%22%23ef4444%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22io-ts%22%7D%5D%2C%22color%22%3A%22%233b82f6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22arktype%22%7D%5D%2C%22color%22%3A%22%2310b981%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22valibot%22%7D%5D%2C%22color%22%3A%22%23f97316%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22yup%22%7D%5D%2C%22color%22%3A%22%2306b6d4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40sinclair%2Ftypebox%22%7D%5D%2C%22color%22%3A%22%23d946ef%22%7D%5D&transform=none&binType=weekly&showDataMode=all","url":"https://tanstack.com/stats/npm?range=365-days&viewMode=absolute&binningOption=weekly&packages=%5B%7B%22packages%22%3A%5B%22react-hook-form%22%5D%2C%22color%22%3A%22%23EC5990%22%7D%2C%7B%22packages%22%3A%5B%22%40tanstack%2Fform-core%22%5D%2C%22color%22%3A%22%23FFD700%22%7D%2C%7B%22packages%22%3A%5B%22conform%22%5D%2C%22color%22%3A%22%23FF5733%22%7D%5D&alignStartDates=false&height=400&packageGroups=%5B%7B%22packages%22%3A%5B%7B%22name%22%3A%22zod%22%7D%5D%2C%22color%22%3A%22%23ef4444%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22io-ts%22%7D%5D%2C%22color%22%3A%22%233b82f6%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22arktype%22%7D%5D%2C%22color%22%3A%22%2310b981%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22valibot%22%7D%5D%2C%22color%22%3A%22%23f97316%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22yup%22%7D%5D%2C%22color%22%3A%22%2306b6d4%22%7D%2C%7B%22packages%22%3A%5B%7B%22name%22%3A%22%40sinclair%2Ftypebox%22%7D%5D%2C%22color%22%3A%22%23d946ef%22%7D%5D&transform=none&binType=weekly&showDataMode=all","statusCode":200,"contentType":"text/html; charset=utf-8","timezone":"America/New_York","proxyUsed":"basic","cacheState":"miss","indexId":"c2a52562-a74e-419e-a3b9-864724cd1422","creditsUsed":1}}]}}