Struggled with React Hook Form, Formik, or TanStack Form? Youβre not alone. Itβs time to use something better. Forms shouldnβt be this hard!
Thatβs why we built Formengine Core β a JSON-first React Form Renderer and open-source form engine for React. Describe your form in JSON and render it across your apps. No hooks. No context. No boilerplate. No pain.
{
"version": "1",
"errorType": "RsErrorMessage",
"form": {
"key": "Screen",
"type": "Screen",
"props": {},
"children": [
{
"key": "name",
"type": "RsInput",
"props": {
"label": {
"value": "Name"
}
}
},
{
"key": "email",
"type": "RsInput",
"props": {
"label": {
"value": "Email"
}
},
"schema": {
"validations": [
{
"key": "email"
}
]
}
},
{
"key": "submit",
"type": "RsButton",
"props": {
"appearance": {
"value": "primary"
},
"children": {
"value": "Submit"
}
},
"events": {
"onClick": [
{
"name": "validate",
"type": "common",
"args": {
"failOnError": true
}
},
{
"name": "onSubmit",
"type": "custom"
}
]
}
}
]
},
"localization": {},
"languages": [
{
"code": "en",
"dialect": "US",
"name": "English",
"description": "American English",
"bidi": "ltr"
}
],
"defaultLanguage": "en-US"
}Click to see how you can define your entire form in JSON and render it with Formengine Core.
import {viewWithCss} from '@react-form-builder/components-rsuite'
import {FormViewer} from '@react-form-builder/core'
const simpleForm = {
version: '1',
errorType: 'RsErrorMessage',
form: {
key: 'Screen',
type: 'Screen',
props: {},
children: [
{
key: 'name',
type: 'RsInput',
props: {
label: {
value: 'Name'
}
}
},
{
key: 'email',
type: 'RsInput',
props: {
label: {
value: 'Email'
}
},
schema: {
validations: [
{
key: 'email'
}
]
}
},
{
key: 'submit',
type: 'RsButton',
props: {
appearance: {
value: 'primary'
},
children: {
value: 'Submit'
}
},
events: {
onClick: [
{
name: 'validate',
type: 'common',
args: {
failOnError: true
}
},
{
name: 'onSubmit',
type: 'custom'
}
],
}
}
]
},
localization: {},
languages: [
{
code: 'en',
dialect: 'US',
name: 'English',
description: 'American English',
bidi: 'ltr'
}
],
defaultLanguage: 'en-US'
}
export const App = () => (
<FormViewer
view={viewWithCss}
getForm={() => JSON.stringify(simpleForm)}
actions={{
onSubmit: (e) => {
alert('Form data: ' + JSON.stringify(e.data))
},
}}
/>
)Itβs time to use something better. Install the core package and RSuite free form components:
npm install @react-form-builder/core @react-form-builder/components-rsuite - Open Source & Free Forever β No vendor lock-in, no nonsense.
- Less Code, Fewer Bugs β Logic and UI stay separate.
- JSON-First Architecture β Define, render, and validate without touching React internals.
- UI-Agnostic Components β Works seamlessly with any UI library (MUI, Ant Design, shadcn/ui, and others).
- Framework-Agnostic β Can also be used without any framework via CDN.
- Multi-Database Support β Compatible with MySQL, PostgreSQL, MongoDB, SQLite, and more.
- Built-in Validation with Zod β Pre-configured validation powered by Zod.
- Extensible Validation Support β Works with Yup, AJV, Zod, Superstruct, Joi, and other libraries.
- Responsive Layouts β Build forms that automatically adapt to all screen sizes.
- Custom Actions β Enhance forms with interactive logic through custom JavaScript.
- Dynamic Properties β Enable real-time component updates with MobX-powered reactivity.
- Pre-Built RSuite Integration β Includes a ready-to-use component library:
@react-form-builder/components-rsuite. - Flexible Storage Options
- Store complete form definitions as JSON.
- Programmatically generate forms via code.
- Community: Formengine Core source code and examples for FormEngine Community (MIT license).
- Premium: Examples for Premium On-Premise Drag-and-Drop React Form Builder (Commercial license). Premium On-Premise Drag-and-Drop React Form Builder
- Source Code
- Built-in Validation with Zod β Pre-configured validation powered by Zod
- Extensible Validation Support β Works with Yup, AJV, Zod, Superstruct, Joi, and other libraries
npm install @react-form-builder/components-rsuite Component description consists of defining meta-information about the component - component name, component type, component properties. Meta-information on component properties in Formengine is called an annotation.
Well, let's describe some existing component from the popular MUI library. As an example, let's take a Button:
import {Button} from '@mui/material'
import {define, disabled, event, oneOf, string} from '@react-form-builder/core'
// Let's call our component matButton, using the prefix 'mat' to make it easy to understand
// from the name that the component belongs to the MUI library.
//
// Here we call the define function and pass it two parameters - the Button component
// and the unique name of the component type.
export const matButton = define(Button, 'MatButton')
// component name displayed in the component panel in the designer
.name('Button')
// define the component properties that we want to edit in the designer
.props({
// button text
children: string.named('Caption').default('Button'),
// button color
color: oneOf('inherit', 'primary', 'secondary', 'success', 'error', 'info', 'warning'),
// button disable flag
disabled: disabled,
// callback fired when the button is clicked.
onClick: event,
})- Community Forum β Best for: help with building, discussion about React form best practices.
- GitHub Issues β Best for: bugs and errors you encounter using Formengine.
- Email Support β Best for: issues with Formengine libraries or environment.
A premium on-premise React Form Builder with drag-and-drop, built for SaaS and enterprise teams β backed by Optimajet Premium Support
A powerful commercial drag-and-drop form builder for React, built on top of the free, MIT-licensed FormEngine Core. Advanced form logic, UI controls, export, and integrations.
npm install @react-form-builder/designerItβs time to use something better. Install the core package and RSuite free form components:
npm install @react-form-builder/core @react-form-builder/components-rsuite 


