Forms that feel natural.
notform brings schema-based validation to Vue 3 without the usual headaches. Connect your schemas, handle submissions, and track changes—all with the simplicity you'd expect.
What makes it different
Style it your way
notform works with your existing components and design system. Whether you're using Tailwind, shadcn/vue, or custom CSS, the validation layer adapts to your choices.
Validation on your terms
Choose when validation happens—on blur, change, or submit. Set field-level rules, form-wide constraints, or cross-field dependencies. You're in control of the validation flow.
Dynamic fields made easy
Add, remove, or reorder fields on the fly. Nest them as deep as you need. Each item gets validated with full type safety built in.
Built for Composition API
Designed from the ground up for Vue 3's Composition API. TypeScript inference works naturally, reactive state stays reactive, and composables actually compose.
Use your preferred schema
Works with Zod, Yup, Valibot, ArkType, and any library that follows the standard-schema pattern. Define your validation rules once and use them consistently across your app.
Native Vue patterns
v-model works just like you expect. No special bindings or custom directives required—just standard Vue with powerful form features underneath.
Why we built this
Forms shouldn't slow you down. NotForm lets you focus on building features instead of fighting with form state.
Types that flow naturally
Your schema types automatically propagate through field values, error states, and submission data. No manual type annotations needed.
Quick to learn, easy to use
Clear APIs and straightforward patterns mean you can be productive quickly. The documentation respects your time and gets you building fast.
Ready for real-world needs
Handle nested objects, async validation, conditional fields, multi-step forms, and file uploads. Build the forms your application needs without juggling multiple libraries.
Keep your options open
Built on standard schemas and Vue patterns. Your forms remain portable and you're free to switch approaches if your needs change.