OF-01Open-source form framework

Forms your agent writes.Responses you own.

Describe the form to your coding agent. It writes one React file, and Open Form turns that file into a working form: checked in the browser and on the server, with a submission API, storage and a dashboard for the answers.

Get started
localhost:3000/f/intake
Demo · nothing leaves your browser
02Data flow

The life of a response.

Every answer takes the same path, and every check along it comes from the one file your agent wrote.

Stop 1 of 5 · Browser

Checked as they type.

Required fields, formats and limits come from the form file, so mistakes are caught before anything is sent.

localhost:3000/f/meetup
Email *mei@example.comLooks good.
<Email name="email" label="Email" required />

The server reads this same line and runs the same check.

03Authoring

Written by your agent. Reviewed by you.

A form is one React component in your repo. Your agent drafts it, Studio previews it, and your notes go back into the file.

Fields docs
forms/beta/index.tsx
import { defineForm, Email, Form, Select, Submit, Text } from '@open-form-build/core';
 
export const config = defineForm({ title: 'Join the beta' });
 
export default function Beta() {
return (
<Form>
<Text name="name" label="Name" required />
<Email name="email" label="Work email" required />
<Select name="team" label="Team size" options={sizes} />
<Submit>Request access</Submit>
</Form>
);
}
live form

Each field brings its label, validation and ARIA. Submit it empty: the browser shows the same errors the server would return.

3.1

One file holds the whole form.

Fields, pages, conditions and submission rules are components in one .tsx file. Open Form renders it once on the server to learn its fields, so the browser and the API enforce the same rules.

/create-forma meetup registration, 100 seats
ClaudeCodexCursorGemini CLI...
3.2

/create-form writes the first draft.

It asks what it needs, proposes three visual directions for your audience, then writes the form and checks it.

forms/meetup/index.tsx
<Page title="About you">
<Text name="name" label="Name" required />
<Tel name="phone" label="Phone" description="Only if the venue changes." />
</Page>
AgentApplied · marker removed
3.4

Mark it up like a paper form.

Select anything in Studio's Edit mode and leave a note. It lands in the source as a comment, and /apply-comments makes the change.

04Fields

Thirteen fields. Then your own.

Each one is checked in the browser and on the server, and stored as its own column in Responses. Your theme can restyle or replace each one to match your design, and what it stores stays the same. When none fits, useField turns any React input into one.

<Text> · stored as stringDocs ↗
StoredSubmit to see the value.

Length limits and patterns, trimmed before it is checked.

<Text name="name" label="Name on your badge" required maxLength={40} />

Plus four layouts: the default card, StepperLayout, SplitLayout and FocusLayout. Layouts

05Looks

Same questions, five starting looks.

Each form's look is written for it from a theme, so restyling one never changes another. Start from a starter, or have /create-theme match your design system.

localhost:3000/f/meetup

The real runtime: validation, conditions and steps all work. Themes

06Compare

Not a builder. Not just a library.

Builders keep the form and the answers in their product. Libraries stop at the browser. Open Form keeps the form in your repo and brings the backend with it.

The form is

Open Form
Code in your repo
Hosted builders
A document in their app
Form libraries
Code in your repo

Who writes it

Open Form
Your agent, with built-in skills
Hosted builders
You, in their editor
Form libraries
You, in code

Validation

Open Form
One set of rules, run in the browser and on the server
Hosted builders
Theirs
Form libraries
In the browser; the server is yours to write

Submission API

Open Form
Included
Hosted builders
Theirs
Form libraries
You build it

Spam and limits

Open Form
Honeypot, timing token, rate limits, caps
Hosted builders
Theirs
Form libraries
You build it

Responses

Open Form
Studio, with Excel, CSV and JSON export
Hosted builders
Their dashboard
Form libraries
You build it

Where answers live

Open Form
A SQLite file on your server
Hosted builders
Their servers
Form libraries
Wherever you put them

Changes reviewed in

Open Form
Pull requests
Hosted builders
Their editor
Form libraries
Pull requests
07FAQ

What people ask first.

08Get started

Sign here.

Three steps from an empty folder to your first response. Free and open source under the MIT license.

  1. 01Scaffold a workspace

    forms/, themes/, the agent skills and Studio. No database to set up.

    npm create open-form@latest my-forms
  2. 02Ask your agent

    It proposes three visual directions, then writes the form as one small file.

    /create-form RSVP for our meetup
    ClaudeCodexCursorGemini CLI...
  3. 03Ship one server

    Build and start it. Responses land in SQLite; set OPEN_FORM_ADMIN_PASSWORD to read them in Studio.

    npm run build && npm start
Read the docs
OF-01 · MIT