vee-validate-skilld
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.
How do I install this agent skill?
npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill vee-validate-skilldIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The vee-validate-skilld skill is a comprehensive documentation and reference suite for the vee-validate Vue.js form library. It contains API details, best practices, tutorials, and community discussions. No security risks or malicious behaviors were detected during analysis.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
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). Requiresvue ^3.4.26as peer (package.json:42). - ESM + CJS,
sideEffects: false, single entryvee-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
- Bind fields with
defineField(path, config?). It returns[model, props]; spread the props withv-bindand the model withv-model(dist/vee-validate.d.ts:443, https://vee-validate.logaretm.com/v4/api/use-form/#definefield). - Never write directly to
values.field; use thedefineFieldmodel,setFieldValue, oruseSetFieldValue. useFieldModel,defineComponentBinds, anddefineInputBindsare deprecated in favor ofdefineField(dist/vee-validate.d.ts:444-459).- Show errors only after interaction, e.g.
v-if="errorMessage && meta.touched", to avoid aggressive validation UX (https://vee-validate.logaretm.com/v4/guide/best-practices/#avoiding-aggressive-validation). - For TypeScript, wrap yup/zod/valibot schemas with
toTypedSchemafrom the matching@vee-validate/*package. Passing a raw schema without it fails with "No such validator 'VVTypedSchema' exists" (https://vee-validate.logaretm.com/v4/guide/composition-api/typed-schema/, https://github.com/logaretm/vee-validate/discussions/4819). useFieldinside a custom component must not sync its v-model by default (syncVModeldefaults tofalse, breaking change in 4.10.0). Opt in per field withsyncVModel: trueor a model prop name string (dist/vee-validate.mjs:1862).- Field names are paths. Dots nest objects,
[0]indexes arrays; wrap the name in brackets, e.g.[user.name], to treat dots as literal (https://vee-validate.logaretm.com/v4/guide/composition-api/nested-objects-and-arrays/). - The
errorsobject is always flat: reference the exact path string used as the field name, brackets included (https://vee-validate.logaretm.com/v4/guide/composition-api/nested-objects-and-arrays/). - Iterate array fields with
fieldsfromuseFieldArrayand keyv-forbyentry.key(a stable id, never the index) (https://vee-validate.logaretm.com/v4/guide/composition-api/nested-objects-and-arrays/). - Pass reactive field names as getters (
useField(() => props.name)) so vee-validate tracks name changes (https://vee-validate.logaretm.com/v4/guide/composition-api/caveats/). - Keep schemas non-reactive: declare them outside
ref/reactiveor wrap withmarkRawto avoid deep reactivity overhead (https://vee-validate.logaretm.com/v4/guide/best-practices/#reactive-schemas). handleSubmit.withControlled(cb)submits only fields registered withuseField/defineField(dist/vee-validate.d.ts:430-432); note typed schemas can still surface all initial values (open issue: https://github.com/logaretm/vee-validate/issues/4960).
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,ErrorMessageprops, slots, rendering, v-model rules. - Validation: validator functions, object schemas, typed schemas, global rules, i18n, standalone
validateutils. - 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.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/skilld-dev/vue-ecosystem-skills/vee-validate-skilld">View vee-validate-skilld on skillZs</a>