Skip to content
All templates

Registration 1 step · 4 fields

Waitlist signup

Email plus three questions that help you decide who gets access first.

Get a hosted link and a responses inbox in a minute. No backend, no credit card.

Or set it up yourself

Live preview

Form definition JSON · 49 lines
{  "id": "waitlist-signup",  "title": "Join the waitlist",  "submit": { "label": "Join waitlist" },  "fields": [    {      "key": "email",      "type": "email",      "label": "Email",      "inputMode": "email",      "validation": { "required": true }    },    {      "key": "role",      "type": "select",      "label": "What best describes your role?",      "options": [        { "value": "engineering", "label": "Engineering" },        { "value": "product", "label": "Product" },        { "value": "design", "label": "Design" },        { "value": "marketing", "label": "Marketing" },        { "value": "sales", "label": "Sales" },        { "value": "support", "label": "Customer support" },        { "value": "operations", "label": "Operations" },        { "value": "executive", "label": "Founder or executive" },        { "value": "other", "label": "Other" }      ]    },    {      "key": "companySize",      "type": "radio",      "label": "Company size",      "options": [        { "value": "solo", "label": "Just me" },        { "value": "2-10", "label": "2 to 10" },        { "value": "11-50", "label": "11 to 50" },        { "value": "51-200", "label": "51 to 200" },        { "value": "201-1000", "label": "201 to 1,000" },        { "value": "1000-plus", "label": "More than 1,000" }      ]    },    {      "key": "useCase",      "type": "textarea",      "label": "What would you use it for?",      "rows": 3    }  ]}

Use it with the npm packages ​

Copy the JSON into a file in your app, install the renderer and pass the definition to it. The same JSON works with @formhaus/vue.

sh
npm i @formhaus/core @formhaus/react
tsx
import { FormRenderer } from '@formhaus/react';
import '@formhaus/core/style.css';
import definition from './form.json';

export function Form() {
  return (
    <FormRenderer
      definition={definition}
      onSubmit={(values) => console.log(values)}
    />
  );
}

See Getting started for validation, steps and custom components.

Formhaus is MIT licensed. Legal