@formisch/vue

The lightweight, schema-first, and fully type-safe form library for Vue
32,816 1,208
Install
npm install @formisch/vue
Latest Version:1.1.0
Vue:3
License:MIT
Last Updated:Oct 19, 2026
Links: GitHub  ·  npm
Maintainer: fabian-hiller

Formisch for Vue

Formisch is a schema-based, headless form library for Vue. It manages form state and validation. It is type-safe, fast by default and its bundle size is small due to its modular design. Try it out in our playground!

Formisch is also available for Angular, Preact, Qwik, React, React Native, SolidJS and Svelte.

Highlights

  • Small bundle size starting at 2.5 kB
  • Schema-based validation with Valibot
  • Type safety with autocompletion in editor
  • Open source and fully tested with 100 % coverage
  • It's fast – DOM updates are fine-grained
  • Minimal, readable and well thought out API
  • Supports all native HTML form fields

Example

Every form starts with the useForm composable. It initializes your form's store based on the provided Valibot schema and infers its types. Next, wrap your form in the <Form /> component. It's a thin layer around the native <form /> element that handles form validation and submission. Then, you can access the state of a field with the useField composable or the <Field /> component to connect your inputs.

<script setup lang="ts">
import { Field, Form, useForm } from '@formisch/vue';
import * as v from 'valibot';

const LoginSchema = v.object({
  email: v.pipe(v.string(), v.email()),
  password: v.pipe(v.string(), v.minLength(8)),
});

const loginForm = useForm({ schema: LoginSchema });
</script>

<template>
  <Form :of="loginForm" @submit="(output, event) => console.log(output)">
    <Field :of="loginForm" :path="['email']" v-slot="field">
      <div>
        <input v-model="field.input" v-bind="field.props" type="email" />
        <div v-if="field.errors">{{ field.errors[0] }}</div>
      </div>
    </Field>
    <Field :of="loginForm" :path="['password']" v-slot="field">
      <div>
        <input v-model="field.input" v-bind="field.props" type="password" />
        <div v-if="field.errors">{{ field.errors[0] }}</div>
      </div>
    </Field>
    <button type="submit">Login</button>
  </Form>
</template>

In addition, Formisch offers several functions (we call them "methods") that can be used to read and manipulate the form state. These include focus, getDeepErrorEntries, getDeepErrors, getDirtyInput, getDirtyPaths, getErrors, getInput, handleSubmit, insert, isDirty, isEdited, isTouched, isValid, move, pickDirty, remove, replace, reset, setErrors, setInput, submit, swap and validate. These methods allow you to control the form programmatically.

Comparison

What makes Formisch unique is its framework-agnostic core, which is fully native to the framework you are using. It works by inserting framework-specific reactivity blocks when the core package is built, giving you native performance for any UI update. A modular methods API keeps bundles starting at just ~2.5 kB by only including the methods you import, and end-to-end type safety covers deeply nested paths and field arrays with TypeScript inference that stays fast even as forms grow.

For a side-by-side look at how Formisch compares to VeeValidate, FormKit, and TanStack Form, see the comparison guide.

Vision

My vision for Formisch is to create a framework-agnostic platform similar to Vite, but for forms — a shared core that lets the same mental model and codebase work natively across every modern UI framework.

Partners

Thanks to our partners who support the development! Join them and contribute to the sustainability of open source software!

Partners of Formisch

Feedback

Find a bug or have an idea how to improve the library? Please fill out an issue. Together we can make forms even better!

License

This project is available free of charge and licensed under the MIT license.

Related Packages

vue-formor

Form validation for Vue in composition functions with Valibot.

1,485 5
attaform

A type-safe, schema-driven form library for Vue 3 and Nuxt with first-class Zod...

9,755 6
@vueform/core

Headless, schema-driven form framework core for Vue 3 — elements, validation, co...

136 0
@maroonedog/waypoint

A field's address exists before the component that draws it: typed paths the com...

308 1
@vue-formily/formily

Simple, lightweight, and flexible schema-based form for Vue.js

3,654 29

Version History

Version Released License
1.1.0 MIT
1.0.0 MIT
0.11.0 MIT
0.10.0 MIT
0.9.0 MIT
Pre-releases (2)
Version Released License
1.0.0-rc.1 MIT
1.0.0-rc.0 MIT