react-hook-form
7.91.0 · 23 Oct 2026MIT42M / weekRepositoryHomepagenpmAtom feed
Where each line stands
Plan an upgradeLatest releases
All 595 releases7.91.0
23 Oct 2026Improve performance of
Formby reading control from context to avoid unnecessary re-rendersImprove performance of
getValuesby avoiding unnecessary shallow copiesSimplify multipart content-type header filtering
Changed
Improve performance of
Formby reading control from context to avoid unnecessary re-rendersImprove performance of
getValuesby avoiding unnecessary shallow copiesSimplify multipart content-type header filtering
Align form-level validation error types
Fixed
useFieldArraynot registering array rules again afterresetsetValuenot updating field array rows when a parent object is setcreateFormControlkeeping a newer change's error when an olderisValidpass settlesvalidatetreating an empty message array as validresetreleasingkeepIsValidon the next field change or field array operationregisteronly emitting the progressiverequiredattribute when the rule is oncreateFormControldropping the async result of a field unregistered while it validatescreateFormControlsupporting null-prototype objects insetValueFormhandling case-insensitive and parameterized multipartencTypecreateFormControlignoring a staleNaNorInvalid Datevalidation resultSettle submit state when validation throws
Formletting fetch set the multipart boundary for a multipart content-type headercreateFormControlignoring a stale built-in validity result afterresetuseFormrunning the initial validity check when a child subscribed firstFormsending atext/plainbody for atext/plaincontent typecreateFormControlcopying theerrorsprop instead of writing into ituseFormresettingresetOptionswhen removed from propscreateFormControlhandling falsy values correctly in_getDirtyandresetFieldunregisterdropping the field's rules whenkeepValuekeeps only its valueuseFormclearing errors when theerrorsoption is removed or set toundefineduseFieldArraydropping a validation result once the array has changedresetkeeping retained fields disableduseFormre-enabling the form when thedisabledoption is removedformStateproducing a newvalidatingFieldsreference when it changesvalidateFieldvalidating the stored value ofControllerfields with a DOM refuseFormresettingprogressiveoption when removed from propscloneObjectcopying plain objects that have aconstructorkeyuseFieldArrayreindexing row fields when the array has rulesFormmatching JSON content types case-insensitivelydeepEqualcomparing keys as own properties instead of viainregisterkeeping select options picked before the form is readyReport
isReadytouseFormStatemounted with the formuseFieldArrayrevalidating array operations after submit inonBlurmodegetDirtyFieldshandlingnullorundefinedform values when clearing a fieldsetValueupdatingisDirtywhenshouldDirtyfills a field arraydelayErrorflushing the delayed error on blur when blur also validatesuseWatchusing the newdefaultValuewhen the watched name changesdeepEqualcomparing sparse array lengthsFormsending a url-encoded body for a url-encoded content typedeepEqualcomparing empty null-prototype objects by contentEnforce numeric zero
maxLengthregisternot adding an array row when registered without a valueFormmatchingContent-Typeheader names case-insensitivelytriggerrecomputing preservedisValidafterresetuseFieldArrayunregistering on unmount unless a parent array is reindexingsetValuenotifying field arrays so their rows follow the new values
7.90.0
11 Oct 2026Improve performance of
watch,subscribe, scoped subscriptions, dirty field checks and form state fan-outReduce bundle size
Fields named after
Object.prototypemembers not being marked as touched on blur andsetValue
Changed
Improve performance of
watch,subscribe, scoped subscriptions, dirty field checks and form state fan-outReduce bundle size
Fixed
Fields named after
Object.prototypemembers not being marked as touched on blur andsetValueDirty values extraction for fields named
hasOwnPropertycloneObjectdropping the length of sparse arrayscloneObjectfailing on objects with a null prototypeForm options removed from props on re-render not being reset
remove()mishandling duplicated indexes and mutating the indexes passed inuseFieldArrayunregistering fields while a parent array reindexesInput edited before the form is ready being overwritten
useWatchnot updating watched objects after an<Activity>subtree reconnectsuseWatchpreferring its owndefaultValueover formdefaultValuesfor array namesresetwithout values andkeepDefaultValuessettingisDirtyto trueControllerblur validation not working afterresetwatchreading a staleshouldUnregisteroption when a field registersNative validation reading a stale
shouldUseNativeValidationoption when stopping at the first errorForm values stored under a
refkey not being compared correctlysetError,clearErrorsand remaining error updates not producing a newerrorsreference
7.89.0
26 Sep 2026Add optional
@types/reactpeer dependencyvalidateFieldcallingsetCustomValidityon refs that don't implement it under native validationForm-level
validaterunning a stale function instead of the latest one
Changed
Add optional
@types/reactpeer dependency
Fixed
validateFieldcallingsetCustomValidityon refs that don't implement it under native validationForm-level
validaterunning a stale function instead of the latest oneForm-level validation leaving stale errors after a successful re-validation
Form-level validation running more than once per traversal
Stale validation results (resolver, built-in, form-level
validate) being applied afterresetinonChangeandhandleSubmitPending
delayErrortimers for nested paths not being cancelled when a parent validates clean or is reset viaresetFieldgetValues(names, { dirtyFields })returning every row of a field array instead of only the marked entriesField array touched state not being re-indexed when
touchedFieldsis not subscribeduseFieldArrayemittingtouchedFieldsin form state updates when unnecessaryStale field array root error not clearing once an array operation satisfies the rule
useFieldArraymarking the form dirty when the array default isnullDirty state lingering for rows removed from a field array
setValuewithshouldValidatenot revalidatingdepssetValuewithshouldValidatenot triggering validation for a field array rootValidation rules removed from
registeroptions at runtime still being applieduseControllervalidatingrequiredagainst the input value instead of the controlled valueisValidnot recomputing when theerrorsprop is emptiedgetFieldState(name, formState)with a resolver afterreset()
Dependency tracking · free for 3 projects
Know when your own dependencies move
react-hook-form published 32 releases in the last 12 months. Inlinr folds the routine ones into a line and keeps the few that need you.
Advisories reach you
An email when a critical or high advisory affects a project, before the next install.
Upgrades checked first
Peer ranges, Node, ESM-only and types changes read before you bump.
Only what matters
Majors and breaking notes stay; patches and sibling bumps fold into one line.
Registry facts last checked 28 Oct 2026. Releases and advisories last read 28 Oct 2026.