Formulate is a
Relieve the tedium of clicking around a GUI to define conditional form logic.
Formulate lets you build forms with conditionals, loops, variables, remote data fetching and more.
Directly in code.

You build forms with code

export default async function() {
  let name = await form.short("**Welcome!** First off, your name?", {banner: true});

  await form.statement(`Nice to meet you, ${name} 👋`, {banner: true});

  let { value: category } = await form.multi('What can I help with?', [
    {label: "I want an invite to the beta", value: "beta"},
    {label: "I have questions about the product", value: "questions"},
    {label: "I need help with something", value: "help"},

  if (category !== 'beta') {
    await form.long('Please type in your message below');

  await form.short('Thanks! Finally, we need your email address', {
    description: "This is just so we're able to contact you. No spam.",
    email: true,

  await form.statement("That's it! Hit _Submit_ below and you're good to go.", {
    description: "You should hear back from us later today",
    buttonText: "Submit",
We bring your forms to life ✨

This is a live form generated using the code on the left. Try it above, or create a copy that you can modify.

Read the docs
Start at the top, read about the API, or the features we've got planned.
Be inspired
Look at some example forms in the gallery, or get involved in our community.
Stay in touch

Join our mailing list to receive monthly updates about Formulate as we build towards a beta and onwards.

We'll also send you a special discount when we eventually introduce paid plans.

We won't send you more than one email a month.