Getting Started
Welcome to Formitiva! This guide gets you productive in under 5 minutes by walking through installation, the smallest “render a form” example, and how to handle submission.
You’ll quickly learn how to:
- Install the library
- Define forms as JSON
- Render a form at runtime (no JSX per field)
- Handle submissions via
onSubmitor a registered handler
By the end, you’ll have a working form rendering from a JSON definition.
Installation
Choose the package for your framework:
# React
npm install @formitiva/react
# Vue
npm install @formitiva/vue
# Angular
npm install @formitiva/angular
# Vanilla JS / TypeScript
npm install @formitiva/vanilla
Quick Start
Render a form from a JSON definition
- Define your form as JSON.
- (Optional) Provide an instance (values) if you want to load/edit existing data.
- Render it with
Formitiva.
The form definition is the same across all frameworks:
const definition = {
name: 'contactForm',
version: '1.0.0',
displayName: 'Contact Form',
properties: [
{ name: 'name', type: 'text', displayName: 'Name', required: true },
{ name: 'email', type: 'email', displayName: 'Email', required: true },
{ name: 'message', type: 'multiline', displayName: 'Message', minHeight: '80px' }
]
};
React
import * as React from 'react';
import { Formitiva } from '@formitiva/react';
export function App() {
return <Formitiva definitionData={definition} />;
}
Vue
<script setup lang="ts">
import { Formitiva } from '@formitiva/vue';
</script>
<template>
<Formitiva :definition-data="definition" />
</template>
Angular
import { Component } from '@angular/core';
import { FormitivaComponent } from '@formitiva/angular';
@Component({
selector: 'app-root',
standalone: true,
imports: [FormitivaComponent],
template: `<fv-formitiva [definitionData]="definition"></fv-formitiva>`,
})
export class AppComponent {
definition = definition;
}
Vanilla JS
import { Formitiva } from '@formitiva/vanilla';
const form = new Formitiva({ definitionData: definition });
await form.mount(document.getElementById('app')!);
Handle submission
In the above examples, users can see the forms and edit inputs. The next step is getting the input values and submitting them.
Formitiva provides two approaches for value submission:
- Pass an
onSubmitform submission function directly toFormitiva(simplest). - Use the submission registration system so each definition can reference a handler by name.
In the following examples, the first approach is used. For the second approach, please check Submission
The submission handler signature is the same across all frameworks:
import type { FormSubmissionHandler } from '@formitiva/react'; // or /vue, /angular, /vanilla
const alertSubmission: FormSubmissionHandler = (
definition, instanceName, valuesMap, t
): string[] | undefined => {
const instance = {
name: instanceName || 'Unnamed Instance',
version: (definition as any)?.version || '',
definition: (definition as any)?.name || '',
values: valuesMap,
};
alert(JSON.stringify(instance, null, 2));
return undefined;
};
React
import * as React from 'react';
import { Formitiva } from '@formitiva/react';
export function App() {
return (
<Formitiva
definitionData={definition}
onSubmit={alertSubmission}
/>
);
}
Vue
<script setup lang="ts">
import { Formitiva } from '@formitiva/vue';
</script>
<template>
<Formitiva :definition-data="definition" :on-submit="alertSubmission" />
</template>
Angular
import { Component } from '@angular/core';
import { FormitivaComponent } from '@formitiva/angular';
@Component({
selector: 'app-root',
standalone: true,
imports: [FormitivaComponent],
template: `<fv-formitiva [definitionData]="definition" [onSubmit]="alertSubmission"></fv-formitiva>`,
})
export class AppComponent {
definition = definition;
alertSubmission = alertSubmission;
}
Vanilla JS
import { Formitiva } from '@formitiva/vanilla';
const form = new Formitiva({
definitionData: definition,
onSubmit: alertSubmission,
});
await form.mount(document.getElementById('app')!);
Core Concepts
- Definition: the JSON schema describing fields, labels, defaults, and behavior.
- Instance: existing values for editing (optional).
- Field: a rendered input (text, select, date, etc.) described by the definition.
- Validation: built-in rules plus custom validators.
- Submission: send the current values map to your handler (
onSubmitor a registered handler).
Next Steps
- Learn the mental model: Fundamentals
- Configure your own form style: Style & Theming
- Define custom component: Custom Components
- Define field and form validation logics: Validation
- Advanced Usage
- Formitiva Builder
- Theme & Styling