{"full_name":"react-hook-form/react-hook-form","owner":"react-hook-form","name":"react-hook-form","url":"https://github.com/react-hook-form/react-hook-form","description":"📋 React Hooks for form state management and validation (Web + React Native)","homepage":"https://react-hook-form.com","topics":[],"language":"TypeScript","license":"MIT","avatar":"https://avatars.githubusercontent.com/u/53986236?v=4","created_at":"2019-03-05T23:47:10Z","pushed_at":"2026-11-09T03:59:26Z","metrics":{"stars":44914,"forks":2524,"watchers":177,"issues":5044,"prs":3275,"releases":626,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":4596},"growth":{"day":{"stars":2,"forks":1,"base_day":"2026-11-09"}},"history":{"dates":["2026-11-09","2026-11-10"],"stars":[44912,44914],"forks":[2523,2524],"watchers":[177,177],"issues_open":[null,null],"prs_open":[null,null]},"boards":{},"same_owner":[],"issues":[{"number":14010,"title":"handleSubmit throws TypeError: Cannot delete property '0' of [object String] when resolver returns transformed primitive with disabled field","comments":1,"created_at":"2026-11-08T05:46:58Z"}],"discussions":[{"number":13947,"title":"External createFormControl traces for validation, reset and submit","comments":0,"category":"Show and tell","created_at":"2026-10-25T18:31:34Z"},{"number":13920,"title":"Expose `subscribe` and `clearErrors` on `Control`","comments":1,"category":"Ideas","created_at":"2026-10-21T14:48:41Z"},{"number":13856,"title":"Why does form level validate errors not propagate down to fieldState.error for given field","comments":5,"category":"Q&A","created_at":"2026-10-13T15:50:09Z"},{"number":13818,"title":"React Hook Form + Zod in a localized magic-link form","comments":0,"category":"Show and tell","created_at":"2026-10-02T14:32:24Z"},{"number":13804,"title":"Suggestions for a custom hook called useResetField that I created","comments":1,"category":"Q&A","created_at":"2026-09-29T09:20:16Z"},{"number":13717,"title":"A11yKit: 15 Free, Zero-Upload Accessibility & WCAG 2.2 Tools for React Hook Form Workflows","comments":0,"category":"Show and tell","created_at":"2026-09-08T05:16:05Z"},{"number":13666,"title":"Version 8 release.","comments":0,"category":"General","created_at":"2026-08-19T11:22:56Z"},{"number":13663,"title":"What makes a React project production-ready beyond just making it work?","comments":1,"category":"Q&A","created_at":"2026-08-17T19:14:13Z"}],"latest_release":{"name":"Version 7.91.0","tag":"v7.91.0","published_at":"2026-10-23T21:19:22Z","body":"## 🐞 Fixes\r\n\r\n- Fix `useFieldArray` not updating rows when using `setValue` or `setValues` (#13842, #13939)\r\n- Fix `useFieldArray` not unregistering values correctly on unmount (#13843)\r\n- Fix field registration without a value incorrectly adding array rows (#13846, #13849)\r\n- Fix `useFieldArray` reindexing fields incorrectly when array rules are registered (#13873)\r\n- Fix `useFieldArray` losing validation rules after `reset()` (#13940)\r\n- Fix stale field array validation results after array changes (#13888)\r\n- Fix `useFieldArray` validation after submission in `onBlur` mode (#13867)\r\n- Fix dirty state updates when `setValues` changes field arrays (#13870)\r\n- Fix stale asynchronous validation results after `reset()` and `unregister()` (#13908, #13912, #13934)\r\n- Fix `Controller` validation using stale DOM values (#13880)\r\n- Fix `isValid` not updating correctly after `reset()` and subsequent changes (#13847, #13930)\r\n- Fix `handleSubmit` leaving `isSubmitting` active when validation throws (#13905)\r\n- Fix empty validation message arrays being treated as errors (#13937)\r\n- Fix delayed validation errors not being flushed on blur (#13861)\r\n- Fix form state subscriptions and validity updates (#13866, #13877, #13906)\r\n- Fix dirty state tracking and `resetField()` with falsy values (#13868, #13900)\r\n- Fix `unregister` retaining validation rules when using `keepValue` (#13891)\r\n- Fix `<Form />` handling of JSON, URL-encoded, multipart and plain-text submissions (#13848, #13854, #13874, #13893, #13907, #13915, #13926)\r\n- Fix `useWatch` not updating default values when the watched name changes (#13859)\r\n- Fix select options being lost before the form is ready (#13872)\r\n- Fix `useForm` retaining removed options and disabled state (#13882, #13883, #13889, #13898)\r\n- Fix progressive required attributes (#13924)\r\n- Fix numeric zero `maxLength` validation (#13851)\r\n- Fix object comparison for null-prototype objects and sparse arrays (#13853, #13855, #13857)\r\n- Fix `cloneObject` handling objects with a `constructor` key (#13875)\r\n- Fix `setValue` handling null-prototype objects (#13916)\r\n- Fix form-level validation error types (#13860)\r\n- Fix `useForm` mutating the externally provided `errors` object (#13896)\r\n- Fix stale `NaN` and invalid date validation results (#13910)\r\n\r\n## ⚡ Performance Improvements\r\n\r\n- Avoid unnecessary copies when calling `getValues()` (#13894)\r\n- Reduce unnecessary `<Form />` re-renders (#13899)\r\n\r\n## 🧹 Refactors\r\n\r\n- Simplify multipart Content-Type handling (#13926)\r\n- Improve internal types and remove unnecessary type assertions (#13871, #13886)\r\n- Clean up memoized component display names (#13897)\r\n- Fix JSDoc examples (#13895)\r\n\r\n## 🧪 Tests\r\n\r\n- Add coverage for disabled field array operations (#13841)\r\n- Expand regression coverage for `useFieldArray`, `reset`, validation and form state\r\n\r\n## 📦 Dependencies\r\n\r\n- Bump `joi` from 18.2.6 to 18.2.9 (#13836)\r\n- Update `browserslist` and `baseline-browser-mapping` (#13837, #13838, #13839)\r\n- Bump `follow-redirects` from 1.16.0 to 1.16.1 (#13913)\r\n- Bump `vite` from 6.4.3 to 6.4.4 (#13914)\r\n\r\n## ❤️ Thank You\r\n\r\nThanks to @vicuts, @maxymlyskov, @ahamsel, @dasjideepak, @feritcemkahraman, @DahanItamar, @arba-octo, @dfedoryshchev, @jeremiah-white, @TiagoGranelli, @zigzagdev, @nandyx, @hardikkaurani, @Marve10s, @candymask0712, @saaahilhussain, @itisrmk, @Enesuygurs and @bluebill1049 for their contributions! 🎉\r\n\r\nSpecial thanks to the **Pennylane team** for their incredible support! ❤️"},"readme":true,"readme_zh":false,"news":[],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}