Skip to main content

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 onSubmit or 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​

  1. Define your form as JSON.
  2. (Optional) Provide an instance (values) if you want to load/edit existing data.
  3. 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:

  1. Pass an onSubmit form submission function directly to Formitiva (simplest).
  2. 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 (onSubmit or a registered handler).

Next Steps​