@hookform/resolvers

Official React Hook Form adapters that plug 20+ schema-validation libraries — Zod, Yup, Joi, Valibot, ArkType and more — straight into useForm's resolver.

Library
npm
v5.9.1
2,260stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
86/100Excellent
Development Activity88
Maintenance96
Community60
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
78/100Good
Architecture80
Code Quality82
Innovation70
Learning Curve78

@hookform/resolvers is the official bridge between React Hook Form and the schema-validation ecosystem. Rather than writing custom validation logic by hand, you write your schema once in the validation library of your choice and pass a matching resolver — zodResolver, yupResolver, joiResolver, valibotResolver, and more — into useForm. Each resolver normalizes that library’s parse/validate output into React Hook Form’s internal FieldErrors shape, including nested paths, field arrays, and native browser validation.

The package is a monorepo of ~20 small, independently-published sub-packages (one per validation library) that all share the same two core utilities — toNestErrors and validateFieldsNatively — so behavior is consistent regardless of which schema library a team standardizes on. This makes it the default choice for TypeScript-first form validation in the React ecosystem, especially for teams already using Zod, Yup, or Valibot elsewhere in their codebase.

What You Get

  • One resolver function per supported validation library (zodResolver, yupResolver, joiResolver, valibotResolver, arktypeResolver, ajvResolver, and 15+ others), each importable from its own sub-path (@hookform/resolvers/zod, @hookform/resolvers/yup, etc.) to keep bundles small
  • Automatic error-shape translation via the shared toNestErrors utility, converting each library’s native error format into React Hook Form’s nested FieldErrors structure, including array and object paths
  • Built-in support for native HTML5 validation via validateFieldsNatively, which calls setCustomValidity/reportValidity on form fields when shouldUseNativeValidation is enabled
  • TypeScript type inference end-to-end — most resolvers infer both input and output types directly from the schema, so useForm<Input, Context, Output>() reflects transforms and coercions declared in the schema
  • Sync and async validation modes plus a raw option to return the original form values instead of the schema-parsed/coerced output

Common Use Cases

  • Validating a signup or checkout form where the schema (e.g. Zod) is already shared between client and server for consistent validation rules
  • Migrating a codebase from one schema library to another (e.g. Yup to Zod) without rewriting form-handling logic, since only the resolver import changes
  • Building design-system form components that need to support whichever validation library a consuming team already uses, by accepting any @hookform/resolvers-compatible resolver as a prop
  • Enforcing native browser validation UI (tooltips, :invalid styling) while still driving validation logic from a typed schema instead of raw HTML validation attributes

Under The Hood

Architecture The repo is a monorepo of ~20 sibling packages (zod/, yup/, joi/, valibot/, ajv/, arktype/, etc.), each with its own src/, tests/, package.json, and export map, plus a root src/ containing the two utilities every resolver shares: toNestErrors.ts and validateFieldsNatively.ts. A resolver’s job is narrow and consistent across libraries: call the target library’s parse/validate function, and on failure map its native error shape into React Hook Form’s FieldErrors via toNestErrors, which walks each error path with react-hook-form’s own get/set helpers so nested objects and field-array roots resolve identically regardless of which schema library produced the error. config/node-13-exports.js post-processes the build output to copy each sub-package’s .module.js to .mjs for older Node resolution, and check-export-map (postbuild) verifies every sub-path in package.json’s exports map actually resolves to real build artifacts. Tech Stack Written entirely in TypeScript (98.7% of the codebase) and built with microbundle, producing ESM (.mjs), CJS (.js), and UMD bundles per sub-package so each resolver can be imported standalone (@hookform/resolvers/zod) without pulling in the other 19 validation libraries. The only runtime dependency is @standard-schema/utils; every validation library (zod, yup, joi, ajv, valibot, etc.) is a peerDependency-like devDependency used only for building/testing that specific resolver, and react-hook-form itself is a peer dependency. Biome handles linting/formatting, vitest with jsdom runs tests, and lefthook manages git hooks. Code Quality Each resolver sub-package carries its own tests directory (21 test directories total across the monorepo) exercising success paths, validation-error shapes, sync/async modes, and the raw option; the shared toNestErrors/validateFieldsNatively utilities are exercised indirectly through every resolver’s test suite. The zod resolver in particular handles both Zod 3 and Zod 4 schema/error shapes via runtime type guards (isZod3Schema/isZod4Schema), showing deliberate attention to backward compatibility as the underlying ecosystem library evolves. Naming is consistent (each resolver exported as <lib>Resolver), and TypeScript overloads are used extensively to keep input/output type inference correct across each schema library’s own generic conventions. API Design The API surface is minimal by design: import one resolver function matching your schema library, pass it to useForm({ resolver }), done — no additional configuration objects beyond the schema itself and an optional {mode, raw} pair. This uniformity is the library’s core value: switching validation libraries (or supporting several in one design system) requires changing only the resolver import and the schema definition, not any form-handling code. The trade-off is that some resolvers carry sizable TypeScript overload sets (e.g. zodResolver has 4+ overloads to support Zod 3, Zod 4, and the raw option) which the type-inference benefit largely justifies, but adds surface complexity for anyone diving into the source rather than just consuming the published types.

Used by 86 apps in this directory

TypeScript
99%
Other

Activepieces

Automation · AI Assistants

23,887

Open-source AI automation platform that converts 280+ workflow integrations into MCP servers for LLMs, with no-code builders and TypeScript extensibility.

View details
92
Repo Health
85
Technical
65
Dependency
Built with
TypeScript99%
Updated today
TypeScript
84%
MIT

Amical

Note Taking · AI Assistants

1,495

Local-first AI dictation that understands your active app — private, offline, and built for speed.

View details
79
Repo Health
82
Technical
67
Dependency
Built with
TypeScript84%
Updated 3 weeks ago
Python
68%
Other

AutoGPT

Automation · Productivity · AI Assistants

186,687

Build, deploy, and run autonomous AI agents that automate complex multi-step workflows using a visual block-based graph editor.

View details
93
Repo Health
78
Technical
67
Dependency
Built with
Python68%
TypeScript31%
Updated today
JavaScript
100%
Other

Automatisch

Automation · No Code Platforms

13,936

Self-hosted, no-code workflow automation that keeps your data on your own servers—a privacy-first alternative to Zapier with 90+ integrations.

View details
49
Repo Health
78
Technical
64
Dependency
Built with
JavaScript100%
Updated 6 months ago
TypeScript
100%
AGPL 3.0

BaseBuddy

CMS

7

A self-hosted content editor for existing Postgres or Supabase schemas — maps the tables you already have into a WordPress-like TipTap editor instead of requiring you to reshape your database around a CMS.

View details
46
Repo Health
64
Technical
76
Dependency
Built with
TypeScript100%
Updated 1 weeks ago
TypeScript
49%
AGPL 3.0

BrowserOS

Browser · AI Assistants

13,248

The open-source agentic Chromium browser with native AI agents, MCP server, and visual workflow automation — your data never leaves your machine.

View details
87
Repo Health
82
Technical
69
Dependency
Built with
TypeScript49%
Rust22%
Python16%
Updated today
Rust
67%
MIT

Bun

Developer Tools

95,452

An all-in-one JavaScript and TypeScript toolkit — one Rust-and-JavaScriptCore binary that replaces Node.js, npm, a bundler, and a test runner with faster equivalents.

View details
92
Repo Health
91
Technical
66
Dependency
Built with
Rust67%
C++19%
Updated today
Java
73%
Other

ByteChef

Automation · AI Agents

990

Unified open-source platform for AI agent orchestration and workflow automation with 180+ connectors, MCP support, and durable execution.

View details
81
Repo Health
82
Technical
73
Dependency
Built with
Java73%
TypeScript26%
Updated 2 days ago
TypeScript
96%
Other

Cal.diy

Scheduling

47,796

The 100% MIT-licensed, community-driven scheduling platform — self-host your own booking infrastructure with no enterprise strings attached.

View details
93
Repo Health
86
Technical
66
Dependency
Built with
TypeScript96%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search