---
title: "NotForm - Vue Forms without the friction"
description: "Vue forms without the friction."
canonical_url: "https://notformdocs.vercel.app/"
meta:
  "og:description": "Vue forms without the friction."
  "og:image": "https://notformdocs.vercel.app/_og/s/o_65377eab73c456c4.png"
  "og:image:height": "600"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "NotForm - Vue Forms without the friction"
  "twitter:image": "https://notformdocs.vercel.app/_og/s/o_65377eab73c456c4.png"
---

> Index of every page on this site: [llms.txt](https://notformdocs.vercel.app/llms.txt)

# Vue Forms <br> without the friction.

Headless form state and validation library for Vue 3. Bring your own schema, keep your own components, and stay in control of every interaction.

[**Read the Docs **](https://notformdocs.vercel.app/docs/getting-started/introduction) [** Try the Playground **](https://notformdocs.vercel.app/playground)

- **Bring your own schema**

  Use Zod, Valibot, ArkType, or any Standard Schema validator. Your validation library stays completely separate from your form state.
- **Headless by design**

  Headless components and composables give you state, events, and validation without forcing a design system, markup structure, or styling approach.
- **Isolated form instances**

  Keep multiple independent forms on the same page. Every form owns its own values, errors, lifecycle, and submission state.
- **Granular validation**

  Validate everything or target a specific field, object, or array scope. Choose when validation runs with blur, change, input, or manually.
- **First-class arrays**

  Append, prepend, insert, update, remove, swap, and move array items while keeping their associated state in sync.
- **Stable dynamic fields**

  Stable array item keys keep reordered fields tied to the right item, avoiding the remount and state-shuffling problems of index-based keys.
- **Type-safe by default**

  Field paths, values, and schema input types are inferred from your schema, so invalid paths and incompatible values are caught before runtime.
- **Async-safe validation**

  Async validation stays predictable even when values change while validation is in flight. Stale results cannot overwrite newer form state.
- **Server error handling**

  Set server-side issues directly onto fields, render them through the same error system, and keep server errors alongside schema validation.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://notformdocs.vercel.app/#website","@type":"WebSite","description":"Vue forms without the friction.","name":"NotForm","url":"https://notformdocs.vercel.app/","publisher":{"@id":"https://notformdocs.vercel.app/#identity"}},{"@id":"https://notformdocs.vercel.app/#webpage","@type":"WebPage","description":"Vue forms without the friction.","url":"https://notformdocs.vercel.app/","about":{"@id":"https://notformdocs.vercel.app/#identity"},"isPartOf":{"@id":"https://notformdocs.vercel.app/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://notformdocs.vercel.app/"]}]},{"@id":"https://notformdocs.vercel.app/#identity","applicationCategory":"DeveloperApplication","description":"Vue forms without the friction.","name":"NotForm","operatingSystem":"Web","url":"https://notformdocs.vercel.app","@type":["Organization","SoftwareApplication"],"aggregateRating":{"@type":"AggregateRating","bestRating":"5","ratingValue":"4.9","reviewCount":"13","worstRating":"1"},"author":{"@type":"Person","name":"Favour Emeka","url":"https://favorodera.vercel.app"},"keywords":["Vue forms","Nuxt form validation","Vue 3 form library","TypeScript form validation","headless form components"],"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"sameAs":["https://www.npmjs.com/package/notform","https://www.npmjs.com/package/@notform/nuxt","https://github.com/favorodera/notform"]}]}
```

## Sitemap

See the full [sitemap](https://notformdocs.vercel.app/sitemap.md) for all pages.
