vee-validate-skilld

v2026.09.25

Use when writing, reviewing, or debugging Vue.js forms that import vee-validate (useForm, defineField, useField, useFieldArray, Form, Field, FieldArray, ErrorMessage). Provides correct v4.15.x Composition API and component usage, validation schema patterns, typed-schema integration, version-specific API changes since 4.9, deprecations, and known pitfalls.

GitHub
Install command
npx skhub add skilld-dev/vee-validate-skilld
Markdown
SKILL.md

vee-validate 4.15.1

Form validation for Vue 3. Facts below come from the prepared source (dist/vee-validate.d.ts, dist/vee-validate.mjs, package.json) and official docs at https://vee-validate.logaretm.com/v4/.

Environment

  • Package vee-validate@4.15.1 (package.json:3). Requires vue ^3.4.26 as peer (package.json:42).
  • ESM + CJS, sideEffects: false, single entry vee-validate (package.json:11-26).
  • v4 supports Vue 3 only. Vue 2 needs vee-validate 2.x/3.x (README:69-72).
  • Schema adapters live in separate packages: @vee-validate/yup, @vee-validate/zod, @vee-validate/valibot; global rules in @vee-validate/rules; messages in @vee-validate/i18n.

Two API styles

Composition API (preferred for new code). useForm + defineField + handleSubmit:

<script setup>
import { useForm } from 'vee-validate';

function required(value) {
  return value ? true : 'This field is required';
}

const { defineField, handleSubmit, errors } = useForm({
  validationSchema: { field: required },
});

const [field, fieldProps] = defineField('field');

const onSubmit = handleSubmit(values => {
  console.log(values);
});
</script>

<template>
  <form @submit="onSubmit">
    <input v-model="field" v-bind="fieldProps" />
    <span>{{ errors.field }}</span>
    <button>Submit</button>
  </form>
</template>

Source: README:84-118, https://vee-validate.logaretm.com/v4/guide/composition-api/getting-started/

Declarative components. Form + Field with scoped slots:

<script setup>
import { Field, Form } from 'vee-validate';

function required(value) {
  return value ? true : 'This field is required';
}

function onSubmit(values) {
  console.log(values);
}
</script>

<template>
  <Form v-slot="{ errors }" @submit="onSubmit">
    <Field name="field" :rules="required" />
    <span>{{ errors.field }}</span>
    <button>Submit</button>
  </Form>
</template>

Source: README:122-153, https://vee-validate.logaretm.com/v4/guide/components/handling-forms/

Core rules

Validation modes

Global defaults: validateOnBlur: true, validateOnChange: true, validateOnInput: false, validateOnModelUpdate: true, bails: true. Change globally with configure(); note these four trigger flags only apply to the <Field> component, not useField (https://vee-validate.logaretm.com/v4/api/configuration/). To validate only on submit, disable input/change/blur triggers per field in defineField config or globally (https://github.com/logaretm/vee-validate/discussions/4903).

References

  • Composition API: useForm, defineField, useField, useFieldArray, state and setter composables, form context.
  • Components: Form, Field, FieldArray, ErrorMessage props, slots, rendering, v-model rules.
  • Validation: validator functions, object schemas, typed schemas, global rules, i18n, standalone validate utils.
  • API surface: every runtime export and notable type, cited to dist/vee-validate.d.ts.
  • Version changes: API additions, breaking changes, and deprecations from 4.9.0 to 4.15.1.
  • Pitfalls: composition caveats, nested path rules, array fields, known open issues.
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.25

Published

Sep 25, 2026

Category

Uncategorized

License

MIT

Source path

skills/vee-validate-skilld

Default branch

main

Latest commit

c8994af

Tree SHA

78224cb