A new approach to form architecture

FormKit is an open-source form framework that radically simplifies your projects. Reduce boilerplate, improve accessibility, and easily access all your form's data at infinite depth without prop-drilling, event emitting, or complex data-stores.

ShippingForm
AddressInputGroup
<FormKit type="form">  <h1>Shipping Information</h1>  <FormKit    type="text"    name="full_name"    label="Full Name"    prefix-icon="avatar"    validation="required"    help="Please enter your first and last name"  />  <!-- 👀 No bindings -->  <AddressInputGroup /></FormKit>
<!-- 🪄 grouped inputs --><FormKit type="group" name="address">  <div class="flex gap-2">    <!-- 🤯 no data modeling -->    <FormKit label="Street Address" name="street" />    <FormKit label="Unit" name="unit" />  </div>  <div class="flex gap-2">    <FormKit label="City" name="city" />    <FormKit type="autocomplete" name="state" :options="states" />    <FormKit label="Zip Code" name="zip" />  </div></FormKit>
Shipping Information
Please enter your first and last name
Data
{
  full_name: '',
  address: {
    street: '',
    unit: '',
    city: '',
    state: '',
    zip: '',
  }
}

Trusted by leading teams

Structure your form data without any manual plumbing.

FormKit automatically creates connections between your inputs at infinite depth — allowing you to componentize your form elements and compose them without manual prop-drilling, event emitting, or complex modeling.

This architecture is designed to be simple, intuitive, and predictable. It allows you to focus on building your form, not managing its state.

Get started
UserProfile
UserAccount
UserNetworks
UserPreferences
<FormKit type="form">  <!-- 👀 No bindings, no modeling -->  <UserAccount />  <UserNetworks />  <UserPreferences /></FormKit>
<FormKit type="group" name="account">  <FormKit    type="text"    name="name"    label="Full Name"    validation="required"  />  <FormKit    type="email"    name="email"    label="Email Address"    validation="required|email"  />  <FormKit    type="textarea"    name="bio"    label="Bio"    :rows="3"  />  <FormKit    type="checkbox"    name="proSubscriber"    label="FormKit Pro subscriber"  /></FormKit>
<FormKit  type="repeater"  name="networks"  label="Connected Networks"  :min="1">  <FormKit type="text" name="name" label="Network" />  <FormKit type="text" name="username" label="Username" /></FormKit>
<FormKit  type="checkbox"  name="preferences"  label="Email Preferences"  :options="[    'marketing',    'updates',  ]"/>
Data
account: {
  name: 'John FormKit',
  email: '[email protected]',
  bio: 'I love building forms with FormKit!',
  proSubscriber: true
},
networks: [
  {
    name: 'twitter',
    username: '@FormKit'
  },
  {
    name: 'github',
    username: 'FormKit'
  }
],
preferences: [
  'marketing',
  'updates'
]
Data
{
  "recipe_name": "Pumpkin Pie",
  "cook_time": "1 hour",
  "description": "This is a delicious pumpkin pie recipe that is perfect for the holidays.",
  "ingredients": [
    {
      "name": "Pumpkin Puree",
      "quantity": 2,
      "unit": "cup"
    }
  ]
}
OneComponent
<FormKit type="form" @submit="handleSubmit" submit-label="Save Recipe">  <div class="grid grid-cols-2 gap-4">    <FormKit type="text" name="recipe_name" label="Recipe Name" />    <FormKit type="text" name="cook_time" label="Cook Time" />    <FormKit type="textarea" name="description" label="Description" outer-class="col-span-2 max-w-none" />  </div>  <FormKit type="repeater" name="ingredients" label="Ingredients" draggable add-label="Add Ingredient">    <div class="grid grid-cols-3 gap-4">      <FormKit type="text" name="name" label="Name" />      <FormKit type="number" name="quantity" label="Quantity" />      <FormKit type="dropdown" placeholder="Choose" name="unit" label="Unit" :options="['cup', 'lb', 'oz', 'tsp', 'tbsp']" />    </div>  </FormKit></FormKit>
Ingredients

One component. infinite possibilities.

All you need to get started is the FormKit component.

It handles everything from validation to submission and it's fully customizable with slots and props.

Scale form development across your team with a consistent input API and a single component name that identifies your form elements.

Get started

“Forms today remain fundamentally unsolved. We need a new low-level primitive to power the next generation of web applications. The FormKit node is that primitive.”

Justin Schroeder
Justin Schroeder
Creator of FormKit
@IsrealOrtuno
@IsrealOrtuno
VueJobs Co-Founder

After using @FormKit for a few weeks I just can't recommend it enough. Quality + Flexibility + Productivity 🚀

@adamdehaven
@adamdehaven
Staff Engineer at Kong Inc.

The team from @FormKit are awesome. If you're not working with them, you're doing it wrong.

@SuhailKakar
@SuhailKakar
Devrel at Livepeer

FormKit is probably the best way to handle forms :)

@hariscs_dev
@hariscs_dev
Software Developer

[...] @FormKit saves us a lot of time

@ChaseGiunta
@ChaseGiunta
Senior Software UI/UX Engineer

Congrats to @jpschroeder and the @FormKit team [...] These guys have absolutely nailed form authoring and the amazing DX fits right in with @vuejs. Glad this is part of the vue ecosystem.

@hamzahmd_
@hamzahmd_
Frontend Web Developer

[...] One thing is sure you'll like FormKit. [...]

Michał Kuncio
Michał Kuncio
Modern webdev

It's insane how good FormKit is!

@JoshDeltener
@JoshDeltener
Instructor @MasteringNuxt

Been there done that. Which is why we now use FormKit :)

@MichaelThiessen
@MichaelThiessen
Vue Tips & MasteringNuxt

[...] @FormKit is the clear favourite here.

@leemartin
@leemartin
Developer building novel web apps

New to @FormKit yesterday, rolling my own custom color picker for @turnaudio 2 today. The power of good docs.

@hotmeteor
@hotmeteor
Co-founder of @SolenoidStudios

Ok how come no one told me about Formkit? This has a bunch of the stuff I was looking for

csakiss
csakiss

My application has quite a few forms and FormKit saves my butt every time. [...] If I had to write those forms by hand from scratch, I'd consider quitting the job.

@Mokkapps
@Mokkapps
Weekly Vue & Nuxt Newsletter Curator

[...] FormKit will definitely be my choice the next time I need a form framework 💪🏻

@zoey_kaiser
@zoey_kaiser
Developer @sidebase_io

FormKit has allowed us to streamline the process of creating complicated forms and reusing these across several projects, saving us tons of development time!

@sam_odo
@sam_odo
Working on chatsome.co.

I just found out about @FormKit for Vue/Nuxt. Such a breeze.

@danielriversuk
@danielriversuk
Developer @heykinde

Been doing some great stuff with FormKit on the donation platform I am writing. Great framework!

@crutchcorn
@crutchcorn
@tan_stack Maintainer

[...] The @FormKit team doesn't miss!

@Alireza_Jahan
@Alireza_Jahan
co-creator @faculty_bio

For the last project which is a form-heavy project, I used @FormKit and I feel mentally healthier!

Trusted by teams that ship at scale