Build forms that just work.

Dynamic React forms powered by JSON schemas, modifiers, and subforms. Create complex, adaptive form systems without boilerplate.

App.jsx
package.json
import { useState } from "react";
import { FastForm, createFormHandler } from "@reactfast/forms";
const fields = [
{ name: "firstName", title: "First Name", type: "string", width: 50 },
{ name: "lastName", title: "Last Name", type: "string", width: 50 },
{ name: "email", title: "Email", type: "email", width: 100 },
{ name: "subscribe", title: "Subscribe?", type: "boolean", width: 100 },
];
export default function App() {
const [formData, setFormData] = useState({});
const handleChange = createFormHandler({
fields,
setState: setFormData,
});
return (
<FastForm
fields={fields}
onChange={handleChange}
formData={formData}
/>
);
}

Getting Started

Getting started

Build dynamic React forms powered by JSON schemas, modifiers, and subforms. Create complex, adaptive form systems without boilerplate β€” designed for scale, simplicity, and composability.

Installation

Step-by-step guides to setting up ReactFast Forms in your project.

Quick Start

Get up and running with your first ReactFast Form in minutes.

Field Types

Explore 20+ built‑in field types from text to file uploads.

Custom Fields

Extend ReactFast Forms with your own field components.

ReactFast Forms makes building complex forms simple. Define your fields as JSON, add conditional logic with rules and triggers, and let ReactFast Forms handle the rest. Perfect for surveys, applications, data collection, and any form‑heavy application.


Quick start

Get ReactFast Forms running in your project in under 5 minutes.

Installing dependencies

Install ReactFast Forms and its peer dependencies:

npm install @reactfast/forms react react-dom

ReactFast Forms requires React 18+ and React DOM 18+ as peer dependencies.

React Version Requirement

Make sure you're using React 18 or higher. ReactFast Forms uses modern React features that aren't available in older versions.

Your first form

Create a simple form with just a few lines of code:

import { useState } from "react";
import { FastForm, createFormHandler } from "@reactfast/forms";

const fields = [
  { name: "firstName", title: "First Name", type: "string", width: 50 },
  { name: "lastName", title: "Last Name", type: "string", width: 50 },
  { name: "email", title: "Email", type: "email", width: 100 },
  { name: "subscribe", title: "Subscribe?", type: "boolean", width: 100 },
];

export default function App() {
  const [formData, setFormData] = useState({});

  const handleChange = createFormHandler({
    fields,
    setState: setFormData,
  });

  return (
    <FastForm
      fields={fields}
      onChange={handleChange}
      formData={formData}
    />
  );
}

That's it! You now have a fully functional form with validation, responsive layout, and state management.

Pro Tip

The createFormHandler function automatically handles form state updates and applies any rules or modifiers you define. It's the heart of ReactFast Forms' power.


Key features

ReactFast Forms comes packed with features that make form building effortless:

⚑ Controlled forms

Simple value/onChange pattern like React inputs, but with automatic state management.

🧩 Composable architecture

Each field is a reusable React component that you can customize or extend.

πŸ”„ Advanced conditional logic

Dynamic show/hide, disable, and field dependencies with a powerful rules system.

πŸ“± Responsive layout

Automatic width handling with Tailwind classes β€” no CSS required.

🧱 Subforms & arrays

Nested or repeated field groups are first-class citizens.

🎨 Theming-ready

Customize UI with Tailwind or your own design system.

πŸ”Œ Extensible

Register your own field components via registerField().


Built-in field types

ReactFast Forms includes 20+ field types ready to use:

TypeDescriptionExample
stringText input{ type: "string", title: "Name" }
emailEmail input with validation{ type: "email", title: "Email" }
booleanCheckbox{ type: "boolean", title: "Subscribe" }
selectSingle select dropdown{ type: "select", options: [...] }
arrayDynamic subform/array{ type: "array", fields: [...] }
fileFile upload{ type: "file", title: "Upload" }
signatureSignature pad{ type: "signature", title: "Signature" }

And many more! See the Field Types documentation for the complete list.


Getting help

Need help getting started or have questions about ReactFast Forms?

Submit an issue

Found a bug or have a feature request? We'd love to hear from you:

Join the community

Connect with other ReactFast Forms users and contributors:

ReactFast Forms is maintained by Jonathon McClendon and the open source community. We welcome contributions and feedback!