// the find
logaretm/vee-validate
✅ Painless Vue forms
vee-validate is the standard form validation library for Vue 3, with 11k stars and years of production use behind it. It handles the genuinely annoying parts of forms — validation timing, nested field state, array fields, submission lifecycle — and gets out of the way for everything else. The composition API style fits naturally into modern Vue codebases.
First-class support for Zod, Yup, and Valibot schemas via typed adapters means you don't write validation logic twice — your schema IS your form contract. The `useForm` + `defineField` pattern gives you precise control over which native input attributes are set and when, without the library fighting your UI components. Field arrays (`useFieldArray`) handle dynamic form rows correctly, including proper error indexing and move/swap operations. The i18n package covers 45+ locales with community-maintained translations, which is genuinely useful for non-English apps.
Version history is a problem in practice: v2, v3, v4, and v5 all exist with meaningfully different APIs, and StackOverflow is full of v3-era answers that will mislead you if you're on v4+. The declarative components API (`<Form>`, `<Field>`) and the composition API have overlapping but not identical feature sets, and the docs don't always make clear which approach works where. Cross-field validation with Zod schemas requires jumping through hoops because vee-validate maps schema errors by field path, and Zod's `refine` at the object level produces errors that don't always land where you expect. Performance with very large forms (100+ fields) has been a recurring complaint in issues — the reactivity graph gets expensive.