Skip to content

Vue Dynamic FormDefine your fields once. Render them your way.

A schema-driven form engine that handles groups, repeating sections, choices, and validation — so you only write the HTML.

What You Get

Vue Dynamic Form separates two things that usually get tangled together: what your form looks like and how it behaves.

You describe your form as metadata — a plain object tree that says which fields exist, whether they repeat, whether they're part of a group or a mutually exclusive choice, and what validation rules apply. The library reads that description and takes care of the rest: generating field paths, managing repeating sections, tracking which choice branch is active, and keeping everything in sync with vee-validate.

Your template layer stays completely under your control. You decide which field types your app supports, what extra properties they need, and what HTML gets rendered.

A Model Built for Real Complexity

The metadata model is inspired by XSD — one of the most battle-tested formats for describing structured data. That heritage means the model can express almost any form scenario you'll encounter: required fields, length limits, allowed values, repeating groups, conditional branches, and nested structures. You don't need to know anything about XSD to use it. The benefit is that the hard edge cases were already thought through.

Live Demo

Client Onboarding Planner

A concrete demo for a SaaS team collecting everything needed to onboard a new client. It highlights reusable templates, grouped sections, repeatable contacts, mutually exclusive launch paths, and computed fields that become required only when they matter.

Client Onboarding Planner

A realistic intake form that shows reusable templates, grouped fields, repeating sections, choices, and computed props reacting to live form values.

Company details *

A grouped section for the core account information.

Options are requested from an external source.

Choose an industry first to load the available team size options.

Turn this on when records need to be imported from another system.

Enable data migration to make this field active.

Project contacts *

Repeat this grouped section for each person who should be involved in the rollout.

Project contacts

Repeat this grouped section for each person who should be involved in the rollout.

Launch approach *

Choice fields keep mutually exclusive onboarding paths in the same metadata model.

Self-serve launch
Guided rollout

Enable team training to choose a format.

Systems to connect *

Repeat integration details without manually wiring FieldArray logic.

Systems to connect

Repeat integration details without manually wiring FieldArray logic.

IsDirty: false
Touched: false
Valid: true

// form values:
{
  "clientOnboarding": {
    "company": {},
    "projectContacts": [
      {}
    ],
    "launchApproach": {
      "selfServe": {},
      "guidedRollout": {}
    },
    "systems": [
      {}
    ]
  }
}
    

What You Will Find Here

  • README.md at the repository root for GitHub-friendly orientation
  • packages/core/README.md for the detailed package explanation
  • this VitePress manual for guided usage plus interactive demo forms

Next Steps

Built for schema-driven Vue forms.