A type-safe, schema-driven form library for Vue 3 and Nuxt with first-class Zod support.
Point a Zod schema at useForm — get fully-typed values, errors, validation, persistence, and undo/redo back.
- MIT licensed
- Vue 3 · Nuxt 3 / 4
- Zod 3 / 4
- Tree-shakable ESM
Why Attaform
Forms shouldn't fight you.
One schema. Inferred types end-to-end. Validation that runs where you want it. Persistence built in. Undo/redo when you need it. Everything else, out of your way.
Schema-driven types
Every path, value, and error is inferred from your Zod schema. No `any`, no manual type plumbing.
Live validation
Per-field validation on change, blur, or submit. Synchronous by default; async refinements await before submit dispatches.
Field arrays + undo/redo
Typed `append` / `insert` / `remove` / `swap`, plus a bounded undo stack you can opt into per-form.
SSR + persistence
Nuxt round-trips payload automatically. Per-field opt-in drafts to localStorage / sessionStorage / IndexedDB.
Live editor
A schema is the form.
Edit the schema, edit the template, watch it run. No backend, no build step — every change re-renders live. Inputs stay native — v-register is a Vue directive, not a wrapper component, so there's no field-component overhead between your <input> and the form.
Get started in 30 seconds.
One install, one schema, one composable. Read the quick start or jump straight into the playground.