@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
v6.0.0
2,265 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
83 /100 Excellent
Development Activity 84
Maintenance 88
Community 60
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
78 /100 Good
Architecture 80
Code Quality 82
Innovation 70
Learning Curve 78

@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 94 apps in this directory

TypeScript
96%
Other

Dyad

AI Assistants · AI Code Assistants · AI Development

22,046

Build AI-powered apps locally with your own keys, your own models, and zero cloud lock-in.

View details
87
Repo Health
83
Technical
69
Dependency
Built with
TypeScript 96%
Updated 1 weeks ago
Java
34%
Apache 2.0

Enso

Analytics · Data Engineering · Low Code Platforms

7,443

A visual and textual programming platform for data prep and analysis where the node graph and the underlying Enso code are always perfectly in sync, built by an Alteryx co-founder on a GraalVM engine.

View details
57
Repo Health
90
Technical
61
Dependency
Built with
Java 34%
TypeScript 27%
Scala 26%
Updated 2 months ago
TypeScript
76%
MIT

faved

Bookmarks Archiving · Knowledge Management · Note Taking

1,337

A private, self-hosted bookmark manager built for large collections—nested tags, PWA support, and zero cloud dependency.

View details
70
Repo Health
60
Technical
77
Dependency
Built with
TypeScript 76%
PHP 22%
Updated 1 weeks ago
TypeScript
53%
Apache 2.0

Flowsint

Automation · Developer Tools

9,911

A privacy-first, graph-based OSINT investigation platform with 30+ automated enrichers for mapping relationships between domains, IPs, people, and organizations.

View details
85
Repo Health
71
Technical
67
Dependency
Built with
TypeScript 53%
Python 45%
Updated 1 weeks ago
TypeScript
97%
Other

Formbricks

Analytics · Design Tools · Forms Surveys

13,138

Open-source experience management platform for in-app, website, email, and link surveys — privacy-first and fully self-hostable.

View details
93
Repo Health
81
Technical
66
Dependency
Built with
TypeScript 97%
Updated 6 days ago
MDX
50%
Apache 2.0

Formizee

Forms Surveys

184

An open-source form backend and builder platform — design forms, collect submissions, and get analytics without hosting your own server, positioned as an alternative to Formspree and Typeform.

View details
30
Repo Health
59
Technical
67
Dependency
Built with
MDX 50%
TypeScript 49%
Updated 1 years ago
TypeScript
99%
AGPL 3.0

fountain-ink

Blogging

64

A self-hostable, decentralized blogging platform built on Lens Protocol — own your content, audience, and distribution forever.

View details
26
Repo Health
66
Technical
63
Dependency
Built with
TypeScript 99%
Updated 8 months ago
TypeScript
63%
MIT

Ghost

Blogging · CMS

55,598

Open source headless Node.js CMS for professional publishing, paid memberships, and newsletters with a fully owned audience.

View details
96
Repo Health
85
Technical
64
Dependency
Built with
TypeScript 63%
JavaScript 35%
Updated 6 days ago
TypeScript
51%
AGPL 3.0

Glean

Bookmarks Archiving · Knowledge Management

872

Self-hosted RSS reader and personal knowledge management tool with MCP server integration for AI assistant connectivity.

View details
73
Repo Health
75
Technical
70
Dependency
Built with
TypeScript 51%
Python 45%
Updated 6 days 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