Added
- Add conditional submission status rules in the form builder Settings → Submissions tab, evaluated on the front end during submission processing. (#508)
- Add repeater sub-field reference support with explicit row scope (
first,last,index,all,count, custom row expressions) for variable tokens, notifications, conditions, and integrations. Repeater nested fields now appear once in the variable picker, with row targeting configured in the variable settings popover. (#1728, #1255, #2099, #1888, #2338) - Add conditional redirect rules under Behaviour → After Submit, with an optional Enable Redirect Rules toggle that overrides the default submit action when conditions match. (#830)
- Add failed notification alert recipients by Craft user group and additional email addresses. (#2226)
- Add per-rule validation message overrides via a Validation form builder tab and the
validationMessagesfield setting, with legacyerrorMessagevalues migrated tovalidationMessages.required. (#1269) - Add plugin-wide default validation message templates under Settings → Defaults → Field Defaults.
- Add
ValidationMessagesHelperand clientdata-formie-validation-{key}-messageattributes for overridden validation copy on the front end. - Add unique-value, match-field, text-limit, number-limit, email-format, blocked-domain, options-limit, and file-upload validation message overrides on supported field types. (#1475)
Changed
- Move field validation settings from the Settings tab into the Validation tab across all field types.
- Standardize validation message placeholders to
{label}across PHP validators, front-end validators, and translations (legacy{name}/{attribute}aliases remain at runtime). - Replace text-limit counter
{startTag}{num}{endTag}translation strings with Craft plural syntax and wire translated counter copy on the front end. (#2526) - Show context-aware text-limit counter copy for empty (allowed), under-limit (left), and over-limit states on the front end and in control panel submissions.
- Add per-field validation error position on the Appearance tab, with form- and plugin-level defaults (
Above Input/Below Input). - Resolve nested Date/Name/Address sub-field validation messages from their parent field; stop copying legacy
errorMessageonto Date sub-fields. - Wire client-side validation message overrides for file-upload and checkbox/radio options-limit rules via
data-formie-validation-*-messageattributes. - Extend front-end
t()to resolve Craft-style{param, plural, …}and{param, number}message syntax.
Fixed
- Fix option field values appearing empty in notification “All Form Fields” summaries when options were overridden via Twig
setFieldSettings(), by applying persisted submission snapshots when loading forms for email/export and falling back to stored option values when labels cannot be resolved. (#2350) - Fix submission status filters in the control panel returning no results when submissions were saved without a persisted
statusId, and resolve status queries by display name as well as handle. (#2687) - Sanitize notification queue job debug data to valid UTF-8 before re-serializing failed jobs, preventing queue rows from becoming unreadable when submission content contains invalid byte sequences. (#2344)
- Improve notification mailer failure logging when Craft returns no transport error message, including CLI/queue context to help diagnose cron-only send failures. (#2610)