Formidable for ExpressionEngine
Build a form in the control panel and render it with one tag. Then take over as much of the markup as you like, one layer at a time. Validation, spam protection, storage and workflows keep working underneath.
ExpressionEngine 7.5+PHP 8.2+Version 1.1
Sold and downloaded through the ExpressionEngine add-on store.
{exp:formidable:form
form_handle="contact"
return="contact/thanks"
}
Everything a form needs
Formidable handles everything between the Submit button and your inbox, so your templates can be about design.
Pages, sections and a grid. Drag fields in, resize them, and read every condition as a sentence.
Show, hide or require fields and skip whole pages, in the browser and again on the server.
"Add another" rows for dependants or line items, with sums and counts across them.
Filters, saved views, statuses, encryption at rest, and exports to CSV, JSON, XML or text.
Long forms saved part-way, finished on any device, with a reminder for anyone who wanders off.
Signed form data, CSRF, honeypots and rate limits on day one. Turnstile and hCaptcha when you want them.
Your markup, your way
Every step keeps everything from the step before it that you didn't replace. Stop wherever the theme stops suiting you.
The whole form, from your theme: fields, pages, errors, success, buttons.
{exp:formidable:form form_handle="contact"}
Write the <form> and its layout. Formidable fills in the fields.
<form {form_attributes}>
{form_meta}
{fields}{field_template}{/fields}
</form>
Every label, input and error by hand. Values, ids and ARIA are still handled.
{fields}
<label for="{field_handle}">{field_name}</label>
<input {field_attributes}>
{/fields}
Already wrote it? Capture it. Your markup stays exactly as it is.
{exp:formidable:capture form_handle="contact"}
<form method="post">…</form>
{/exp:formidable:capture}
After the submit
Send email, call a signed webhook or push to your CRM, each with its own conditions. Every run is logged with what it sent and what came back, and one click runs it again.
For developers
A JSON API with the same validation as a posted form, eighteen extension hooks, your own fieldtypes and providers, and every command runnable from cron or the control panel.
public function formidable_workflow_email(array $message, $workflow): array
{
return $message;
}
Get Formidable from the ExpressionEngine add-on store, build a contact form, and put it on a page with one tag.