NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #911 most downloaded on npm
React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types, TypeBox, arktype, Typanion, Effect-TS and VineJS
Last release 1 months ago
17 Aug 2026
Ships unpredictably
gaps range from 8 days to 8 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
151 releases · first in 2020
One column per quarter.
isNameInFieldArray fails to recognise bracket-notation array paths causing nested errors overwriting
5.8.0 (2026-08-13) Features support Vest 6
ata-validator peer dependency version
5.7.0 (2026-08-02) Features support vine v4
improve all resovlers drops validation errors for special root field names
Zod resolver drops validation errors for special root field names
npm install fails with ERESOLVE conflict between @hookform/resolvers@5.4.3 and valibot versions
module not found when importing zodResolver under Zod v3
yup resolver overrides ref property in errors object with validation metadata when using checkbox input
AJV Resolver - When ajv schema contains default for certain properties, getValues() returns the form data with properties overwritten
Conditional/dynamic schema resolution no longer working
Zod v4 locale and global error customization not picked up
[zod v4][zod resolver] error on nested discriminated unions
typescript 6 & upgrade lib dev deps
Zod resolver does not respect union error
preserve standard schema root errors
declare validation libraries as optional peerDependencies
feat: add ata-validator resolver
zod: fix output type for Zod 4 resolver
ajv: add ajv-formats for ajvResolver
## 5.1.1 (2025-06-09) ### Bug Fixes * zod peer dep issue
support Zod 4, Zod v4 mini, and retains compatibility with Zod v3.
relax version constraint for react-hook-form 7.55.0 → ^7.55.0
infer input/output types from schema
Before Prior to V5, some projects used manual types like
useForm<FormValues>();
After With V5, the correct approach is:
useForm<Input, Context, Output>();
useForm<FormInputValues, Context, FormOutputValues>();
This update enables distinct outputs when utilizing features like transform from validation libraries.
ℹ️ The best approach is to let the types be inferred from your schema, rather than manually defining them.
escape square brackets in field name regex pattern
standard-schema: move @standard-schema/utils to dependencies
standard-schema: Propertly handle object path segments
automatically infer values from schema
ajv: The AJV Resolver now unwraps the errorMessage object to return the original error types. This update may introduce breaking changes to your proje…
raw: true option to pass form submission values correctly (#733) (7807f95)errorMessage (#728) (5030a59)errorMessage object to return the original error types. This update may introduce breaking changes to your projects.# 3.10.0 (2025-01-06) ### Features * update to effect 3.10
Valibot peer dependency to support dist-tags
fluentvalidation-ts: add fluentvalidation-ts resolver
import { useForm } from 'react-hook-form';
import { fluentValidationResolver } from '@hookform/resolvers/fluentvalidation-ts';
import { Validator } from 'fluentvalidation-ts';
class FormDataValidator extends Validator<FormData> {
constructor() {
super();
this.ruleFor('username')
.notEmpty()
.withMessage('username is a required field');
this.ruleFor('password')
.notEmpty()
.withMessage('password is a required field');
}
}
const App = () => {
const { register, handleSubmit } = useForm({
resolver: fluentValidationResolver(new FormDataValidator()),
});
return (
<form onSubmit={handleSubmit((d) => console.log(d))}>
<input {...register('username')} />
{errors.username && <span role="alert">{errors.username.message}</span>}
<input {...register('password')} />
{errors.password && <span role="alert">{errors.password.message}</span>}
<button type="submit">submit</button>
</form>
);
};
zodResolver: cannot read properties of undefined (reading 'length')
import { useForm } from 'react-hook-form';
import { vineResolver } from '@hookform/resolvers/vine';
import vine from '@vinejs/vine';
const schema = vine.compile(
vine.object({
username: vine.string().minLength(1),
password: vine.string().minLength(1),
}),
);
const App = () => {
const { register, handleSubmit } = useForm({
resolver: vineResolver(schema),
});
return (
<form onSubmit={handleSubmit((d) => console.log(d))}>
<input {...register('username')} />
{errors.username && <span role="alert">{errors.username.message}</span>}
<input {...register('password')} />
{errors.password && <span role="alert">{errors.password.message}</span>}
<button type="submit">submit</button>
</form>
);
};
upgrade and migrate Valibot to v0.31.0
# 3.5.0 (2024-06-04) ### Features * migrate arktype resolver to v2
move back to in-build set and remove lodash.set
migrate set to lodash.set package
# 3.4.0 (2024-05-15) ### Features * effect-ts resolver
error handling for array errors with root error
## 3.3.3 (2023-12-26) ### Bug Fixes * valibotResolver: infinite loop
CVE by upgrading zod dependency
## 3.3.1 (2023-08-28) ### Bug Fixes * yup: fix ts error
# 3.2.0 (2023-08-06) ### Features * valibot: Add valibot resolver
Yup resolver: schema type error (#563) (420e862), closes #549
You don't need to explicitly provide the type when using the useForm function because it automatically infers the types from the Yup schema.
Before
const schema = Yup.shape({ name: string });
const { register } = useForm<{name: string}>({ resolver: yupResolver(schema) });
After
const schema = Yup.shape({ name: string });
const { register } = useForm({ resolver: yupResolver(schema) });
# 3.1.0 (2023-04-15) ### Features * arktype: add arktype resolver
## 3.0.1 (2023-04-05) ### Bug Fixes * typebox: errors iteration
classValidationResolver: schema options now includes validator and transformer options
rawValues option to rawBefore:
schemaOptions?: ValidatorOptions,
After:
schemaOptions?: {
validator?: ValidatorOptions;
transformer?: ClassTransformOptions;
}
import { useForm } from 'react-hook-form';
import { typeboxResolver } from '@hookform/resolvers/typebox';
import { Type } from '@sinclair/typebox';
const schema = Type.Object({
username: Type.String({ minLength: 1 }),
password: Type.String({ minLength: 1 }),
});
const App = () => {
const { register, handleSubmit } = useForm({
resolver: typeboxResolver(schema),
});
return (
<form onSubmit={handleSubmit((d) => console.log(d))}>
<input {...register('username')} />
<input type="password" {...register('password')} />
<input type="submit" />
</form>
);
};
## 2.9.11 (2023-02-08) ### Bug Fixes * vest: add types export
ajv: undefined props validate structure error
## 2.9.9 (2022-10-14) ### Bug Fixes * io-ts resolver: types
## 2.9.8 (2022-09-11) ### Bug Fixes * globals name
## 2.9.7 (2022-07-26) ### Bug Fixes * #396 remove unnecessary 'browser' exports to fix Jest integration
yup: yup wrong import statement assuming default export
renamed private packages to avoid ambiguity with existing official packages.
## 2.9.4 (2022-07-07) ### Bug Fixes * computed-types: nested schema
BREAKING CHANGE: This change will update package dependency with react-hook-form to 7.33.0 above
Your coding agent can read these notes before it upgrades. Set up the MCP server →