Skip to main content

SchemaForms Data

React library for schema-driven dynamic forms.

Build complex multi-step forms without repeating JSX. Define the form as a JSON object (FormSchema), render it with <FormRenderer>, and let users create schemas visually with the drag-and-drop builder.

What is SchemaForms Data?

SchemaForms Data separates form design from form rendering:

  • Define the form as plain JSON (FormSchema)
  • Render it with <FormRenderer /> — multi-step navigation, 30+ field types, validation, conditionals, file upload, ZIP-code lookup and much more
  • Edit schemas visually with <BuilderWrapper /> — drag-and-drop builder that generates the same JSON

A schema always follows the same hierarchy:

FormSchema
└── FormStep[]
└── FormContainer[]
└── FormField[]

Packages

PackageDescription
@schema-forms-data/coreTypeScript types and enums — zero runtime dependencies
@schema-forms-data/uiInternal UI components (Radix UI + Tailwind)
@schema-forms-data/templatesVisual templates (CSS vars) and preset blocks
@schema-forms-data/renderer<FormRenderer> — renders a schema as a form
@schema-forms-data/builderDrag-and-drop builder for visual schema creation
@schema-forms-data/reactMeta-package re-exporting everything above

Quick Start

Create a local Studio with builder + live preview in one command:

npx @schema-forms-data/create my-app
cd my-app
npm install
npm run dev

Open http://localhost:5173, drag fields to the canvas and copy the generated JSON. See the Studio guide.

Option B — Add to an existing project

# Everything at once (recommended)
npm install @schema-forms-data/react react-hook-form lucide-react

# Or only what you need
npm install @schema-forms-data/renderer react-hook-form lucide-react
npm install @schema-forms-data/builder @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities

Key concepts

ConceptDescription
FormSchemaJSON object that defines the entire form structure (steps → containers → fields)
FieldTypeEnum with 30+ field types (texto, select, file, field_array, sub_form, …)
componentMapperMap of custom React components per FieldType — replaces any default field
validatorMapperMap of async validation functions registered by type — referenced in the schema
fieldResolversDynamic props per field loaded at render time
FormSpy / hooksuseFormApi(), useFormState(), useField(), useFieldApi() — form state access
TemplatesSets of CSS variables controlling colours, fonts and layout

What comes out of the box

  • 30+ field types — text, email, password, number, date, time, date range, select, autocomplete, radio, checkbox, switch, slider, rating, color picker, ZIP code, CPF, file, terms, field array, sub-form and more
  • Multi-step navigation with animated progress indicator (wizard, tabs, vertical)
  • Conditional visibility — per field and per container, with nested AND / OR groups
  • Custom validators — sync and async, cross-field, via validatorMapper
  • Non-blocking warnings (warn[]) — messages that don’t block submission
  • Component Mapper — swap the default component for any field type
  • Public hooksuseFormApi, useFormState, useField, useFieldApi, <FormSpy>
  • Variable interpolation{{evento.nome}} in any label, title or hint
  • 20+ visual templates — ready-made styles: modern, minimalist, glassmorphism, corporate, etc.
  • Visual builder — drag-and-drop, undo/redo, 12-column grid, field preset blocks

Peer dependencies

PackageUsage
react ^18Renderer and builder
react-hook-form ^7Form engine for the renderer
lucide-reactIcons in fields and builder
@dnd-kit/core >=6Drag-and-drop in the builder
@dnd-kit/sortable >=9Reordering in the builder
@dnd-kit/utilities >=3DnD utilities in the builder

Biblioteca React para formulários dinâmicos baseados em schema JSON.

Crie formulários complexos de múltiplos steps sem repetir JSX. Defina o formulário como um objeto JSON (FormSchema), renderize com <FormRenderer> e deixe usuários criarem schemas visualmente com o builder drag-and-drop.

O que é o SchemaForms?

O SchemaForms separa design do formulário de renderização do formulário:

  • Defina o formulário como um JSON puro (FormSchema)
  • Renderize com <FormRenderer /> — navegação multi-step, 30+ tipos de campo, validação, condicionais, upload de arquivos, busca de CEP e muito mais
  • Edite schemas visualmente com <BuilderWrapper /> — builder drag-and-drop que gera o mesmo JSON

A estrutura de um schema segue sempre a mesma hierarquia:

FormSchema
└── FormStep[]
└── FormContainer[]
└── FormField[]

Pacotes

PacoteDescrição
@schema-forms-data/coreTipos TypeScript e enums — zero dependências de runtime
@schema-forms-data/uiComponentes UI internos (Radix UI + Tailwind)
@schema-forms-data/templatesTemplates visuais (CSS vars) e preset blocks
@schema-forms-data/renderer<FormRenderer> — renderiza um schema como formulário
@schema-forms-data/builderBuilder drag-and-drop para criação visual de schemas
@schema-forms-data/reactMeta-pacote que re-exporta tudo acima

Quick Start

Opção A — Testar sem configuração (recomendado para início)

Crie um Studio local com builder + preview em um comando:

npx @schema-forms-data/create my-app
cd my-app
npm install
npm run dev

Acesse http://localhost:5173, arraste campos para o canvas e copie o JSON gerado. Veja o guia do Studio.

Opção B — Adicionar a um projeto existente

# Tudo em um (recomendado)
npm install @schema-forms-data/react react-hook-form lucide-react

# Ou apenas o que você precisa
npm install @schema-forms-data/renderer react-hook-form lucide-react
npm install @schema-forms-data/builder @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities

Conceitos principais

ConceitoDescrição
FormSchemaObjeto JSON que define toda a estrutura do formulário (steps → containers → fields)
FieldTypeEnum com 30+ tipos de campo (texto, select, file, field_array, sub_form, …)
componentMapperMapa de componentes React customizados por FieldType — substitui qualquer campo padrão
validatorMapperMapa de funções de validação async registradas por type — referenciadas no schema
fieldResolversProps dinâmicas por campo carregadas em tempo de render
FormSpy / hooksuseFormApi(), useFormState(), useField(), useFieldApi() — acesso ao estado do form
TemplatesConjuntos de CSS vars que controlam cores, fontes e layout

O que vem pronto

  • 30+ tipos de campo — texto, email, senha, número, data, hora, faixa de datas, select, autocomplete, radio, checkbox, switch, slider, rating, color picker, CEP, CPF, arquivo, termos, field array, sub-form e mais
  • Navegação multi-step com indicador de progresso animado (wizard, tabs, vertical)
  • Visibilidade condicional — por campo e por container, com grupos AND / OR aninhados
  • Validadores customizados — síncronos e assíncronos, cross-field, via validatorMapper
  • Avisos não-bloqueantes (warn[]) — mensagens que não impedem o submit
  • Component Mapper — substitua o componente padrão de qualquer tipo de campo
  • Hooks públicosuseFormApi, useFormState, useField, useFieldApi, <FormSpy>
  • Interpolação de variáveis{{evento.nome}} em qualquer label, título ou hint
  • 20+ templates visuais — estilos prontos: moderno, minimalista, glassmorphism, corporativo, etc.
  • Builder visual — drag-and-drop, undo/redo, grid de 12 colunas, preset blocks de campos

Dependências peer

PacoteUso
react ^18Renderer e builder
react-hook-form ^7Engine de formulário do renderer
lucide-reactÍcones nos campos e builder
@dnd-kit/core >=6Drag-and-drop no builder
@dnd-kit/sortable >=9Reordenação no builder
@dnd-kit/utilities >=3Utilitários do DnD no builder