Release notes
Formidable 1.0 is the first public release of Formidable, a forms add-on for ExpressionEngine. This page covers what's in it. If you ran a pre-release build, read the upgrade guide too.
Requirements
Formidable 1.0 needs ExpressionEngine 7.5 or later and PHP 8.2 or later. The installer checks your PHP version and refuses to install on anything older. See Installation.
Building forms
- A visual builder with pages, sections and a twelve-column grid. Every drag has a keyboard equivalent, and an Overview draws the form's conditions as sentences, with lines to the fields they read. See Forms.
- 38 fieldtypes in four groups: inputs, dates and times, options, and special fields. Among them: name and address fields in parts, consent with a record of what was agreed, ratings, scales, image choices and a Likert matrix, a toggle, attribution, file uploads, a signature pad, computed values, ExpressionEngine's CAPTCHA, Cloudflare Turnstile and hCaptcha. See Fieldtypes.
- Conditions that show, hide or require fields, skip pages and hide sections, evaluated the same way in the browser and on the server. See Conditions.
- Repeating sections: "Add another" rows, conditions within a row or across rows, and
sum(),count()andaverage()for totals. See Repeating sections. - Computed fields that work out a value from other answers as the visitor types, and again on the server. See Computed fields.
- Default values with variables: the logged-in member, the current page, today's date, the site, and your own Template Variables. Insert variable lists them. See Fields.
- Built-in option lists: countries, languages, U.S. states, Canadian provinces and territories, days, weeks and months.
- A Field Library of reusable fields that forms link to and override, and Duplicate for whole forms.
- Limits and access: a closing date, a maximum number of submissions, and members-only forms.
- The Formidable Form channel field, so editors can put a form on an entry, including inside Grid, Fluid, Bloqs and Pro Variables.
Displaying forms
- One tag,
{exp:formidable:form}, renders a complete form from a theme, and every layer of it can be replaced with your own markup. See Rendering a form. - Three themes, Default, Tailwind and Bootstrap 5, plus an Email theme. Copy any of them into a template group and change it part by part. See Themes.
- Regions: classes and attributes for every part of a form, set in the control panel or on the tag. See Regions and attributes.
- Capture: build a form from existing hand-written markup with
{exp:formidable:capture}. See Capturing forms. - Accessible by default: instructions and errors are linked to their inputs with
aria-describedby, and fields with errors getaria-invalid.
Submissions
- A submissions listing with filters, chosen columns, saved views, statuses, editing and bulk deletion. Repeating sections are edited row by row. See Managing submissions.
- Exports to CSV, JSON, XML and plain text, matching the current filter and columns, with an option for one line per repeated row.
- Encryption at rest, per field.
- Save and resume: a Save and continue later button, autosave on each page, resume links, and reminders for people who didn't finish. See Save and resume.
- Front-end editing: let a visitor change their own answers with
submission_handle=. See Front-end editing.
Automation
- Workflows that send email, call a signed webhook or push to a connection, each with its own conditions. They run when a submission is created, updated or moved to another status, and when a draft is saved or due a reminder. See Workflows.
- A workflow queue that runs workflows in the background with retries, using BoldMinded's Queue add-on when it's installed. See The workflow log and queue.
- Connections for Mailchimp, Campaign Monitor, Constant Contact, Dotdigital, HubSpot, Salesforce and Mailjet. See Connections.
- A workflow log recording each run, what it sent and what came back, encrypted at rest, with Run again.
- Dynamic recipients: visitors choose who receives their message, and the addresses never reach the page.
The control panel
- A dashboard with your forms, the latest submissions, a fourteen-day chart, workflow health and what needs attention. See Dashboard.
- Utilities: manage API keys, and run any of Formidable's commands from the browser. See Utilities.
- Health checks on Configuration and the dashboard: missing tables or fieldtypes, the encryption key, the queue worker, failing workflows, CAPTCHA fields without a connection, and connections whose credentials stopped working. Each comes with its fix. See Configuration.
- Eight permissions to grant roles separately, with a sidebar that shows each member only the screens they can open. See Permissions.
- Jump Menu commands for every Formidable screen, picking a form to edit, view or export, and finding a submission by number.
For developers
- A JSON API for forms and submissions, with keyless access from your own pages and scoped, hashed keys for everything else. See JSON API.
- Forms as JSON with
output="json", for headless front ends. See Form JSON. - 20 extension hooks through submitting, workflows, exports, rendering and the API, plus ExpressionEngine's model hooks for every Formidable model. See Extension hooks.
- Your own fieldtypes and connection providers, registered from your add-on. See Custom fieldtypes and Custom connections.
- Fifteen commands for the command line, also runnable from Utilities. See Command line.
Security
Signed and encrypted form meta, CSRF protection on every submission (AJAX included), two honeypots, a per-IP rate limit, duplicate detection, a return-URL allow list, and escaped output throughout. See Spam and security.
Known limitations
- Multi-page forms submit once. Pages step in the browser and the whole form is submitted at the end. With
page=, each page renders in its own request as its own submission. - One level of repeating. A repeating section can't contain another, and can't span pages.