Added
- Add a Template default value source for Hidden fields using sandboxed Craft object templates. Resolved server-side on render and submit; posted values are ignored. Custom Value behaviour is unchanged. (#2605)
- Add rich text editing for field Instructions, including Craft entry links with
target="_blank", configurable viarich-text.jsonunderfields.instructions. Legacy plain-text and markdown instructions are normalized automatically without migration. (#724) - Add Craft-style attribute maps and merge helpers for
setFieldSettings()field overrides, includingmergeInputAttributesandmergeContainerAttributes. (#2510) - Add a Note builder field for form-builder guidance with Tip, Warning, Info, and Error styles. (#2498)
- Add a Rich Text cosmetic field for WYSIWYG content in the form builder, configurable via
rich-text.jsonunderfields.content. (#1028, #1709, Discussion #2070, Discussion #772) - Add a syntax-highlighted HTML code editor for HTML cosmetic fields in the form builder, with project config via
html.json. (#2181) - Add an Allow Twig setting to HTML fields, controlling whether Twig is parsed when rendering field content. Twig runs in Formie’s sandboxed template environment, not Craft’s full CP template stack.
- Add a Custom Field form-builder field backed by opt-in Craft field adapters. (#2208)
- Add a Google Maps plugin support for Custom Field field. (#625)
- Add a Maps plugin field support for Custom Field field. (#626)
- Add Craft Link field support for Custom Field field, covering URL, email, phone and SMS link values. (#718)
- Add dynamic Option Source settings for Dropdown, Radio and Checkboxes, allowing options to be populated from predefined option sets and other structured sources. (#2684)
- Add integration option sources, allowing integrations to opt in and expose selectable remote option lists to Dropdown, Radio and Checkboxes fields. (#512)
- Add Mailchimp option sources for Interest Categories and Tags, using cached integration form settings and manual refresh actions from the field settings UI. (#512)
- Add CRM integration option sources for HubSpot (forms and CRM properties), Salesforce, Zoho, and Microsoft Dynamics 365 picklists. (#512)
- Add Template option source mode for developer-owned option lists supplied at render time without persisting or strictly validating an authoritative option list.
- Add a Use Searchable Dropdown setting for Dropdown fields, element relation fields when Display type is Dropdown, and Recipients when shown as a dropdown. The front end loads Formie’s
comboboxbrowser module so users can filter predefined options. (#960) - Add support for changing compatible field types in the form builder, initially limited to simple string-like fields such as Single-Line Text and Email Address. Existing submissions are not rewritten. (Discussion #2110)
- Add Settings → Fields → Field Builder policy settings for Allow Multi-Select Dropdowns and Allow Phone Country Selector. When disabled, the corresponding field settings are hidden in the form builder and forced off on existing fields. (Discussion #2484, Discussion #2485)
- Expose the Allow Public Asset Volumes plugin setting in Settings → Fields, controlling whether File Upload fields can use public asset volumes and whether Public URL is available as an email summary value.
- Add Date Range collection to Date/Time fields when Display Type is Calendar (Advanced), using Flatpickr range mode to collect a start and end date/time. (#2011)
- Add an
includeFlatpickrCssplugin setting to disable Formie’s bundled Flatpickr stylesheet when your project already provides its own. (#2341) - Add notification variable selectors for date ranges, including Start Date/Time, End Date/Time, Start Date, Start Time, End Date, and End Time.
- Add GraphQL content types for date range submissions with
startandenddatetime values. - Add calendar date validation for Date/Time Text Inputs and Dropdowns, rejecting impossible dates (for example February 31), enforcing configured Min Date / Max Date settings on those display types, and surfacing validation errors on the offending sub-field. (#1458)
- Add smart State / Province behaviour for Address fields, with Text or Dropdown when available input modes, country-dependent subdivision loading, dynamic labels (State, Province, Prefecture, and so on), optional hiding when unused, searchable dropdowns, and datalist suggestions for text fallback. (#1416)
- Add a subdivisions endpoint (
formie/address/subdivisions) andModifyAddressSubdivisionsEventfor country-dependent state/province option data. - Add an
address-statebrowser module with lazy subdivision loading, loading UX (country spinner and state skeleton), and password-manager/browser autofill reconciliation via a persistentaddress-level1anchor input. - Add Allowed Countries and Preselect Country from IP settings to Address fields, mirroring Phone field country restrictions and using a shared
formie/address/country-from-ipendpoint (CDN geo headers such asCF-IPCountry). - Add Preselect Country from IP to Phone fields when the country selector is enabled, wiring
intl-tel-inputgeo lookup through the shared country-from-ip endpoint. - Add table column reference support for Calculations fields with explicit row scope (
first,last,index,all,count, custom row expressions). Table columns now appear in the Calculations variable picker, with row targeting configured in the variable settings popover. (#1284) - Add Settings → Synced Fields as a read-only audit page listing shared field definitions and the forms they appear on, with a View usage link from synced fields in the form builder. (#2377)
Changed
- Refactor predefined options to align with the new option sources system.
- Improve HTML and Rich Text cosmetic field builder previews and control panel submission views to show rendered output instead of raw source where appropriate. (#2182)
- Render HTML field builder previews inside a sandboxed iframe so control panel styles do not bleed into preview content.
- Render HTML field Twig through Formie’s sandboxed template service instead of Craft’s unrestricted
renderString(), and default Allow Twig to off for new HTML fields. - Respect Include in Email Field Summaries for cosmetic fields in
{allFields},{allContentFields}, and{allVisibleFields}instead of always excluding them. - Update
@verbb/plugin-kit-reactto 1.0.4 for the CodeMirror-based HTML editor,codeEditorSchemaForm field registration, and live Rich Text preview rendering viaTiptapContent. - Normalise Address sub-field browser selectors to the
data-formie-address-*namespace, with legacy short-selector fallbacks for older saved forms and address provider modules. - Default new Address field layouts to place Country before State / Province so dependent subdivision loading works out of the box.
- Map Freeform Rich Text fields to Formie Rich Text rather than HTML during migration.
- Replace the Dropdown, Radio and Checkboxes option-table Disabled column with a row-menu Visible / Hidden / Disabled availability control (#1816). Hidden removes an option from the front-end form while preserving stored submission values and labels; Disabled renders the option with HTML
disabledso it stays visible but cannot be selected. Legacydisabled: trueoption rows are treated as hidden. Non-default states are indicated in the options table with row background tints. - Centralise front-end option filtering in
OptionsField::getFieldOptions()so hidden options are excluded consistently (including Dropdown placeholders). - Format Date/Time values consistently for notifications, summaries, exports, and string output using the field's Date Format and Time Format settings. Casting a normalized date value object to string now matches
getFieldValueAsString(). - Update integration field mapping to accept Date/Time reference values with
text,date, andnumbertypes. - Move Agree field checked/unchecked display labels to the Settings tab and clarify that submissions store a boolean; use
getFieldValueAsString()for Yes/No-style output. (#2288) - Normalise submission values by trimming leading and trailing whitespace during field normalization for single-line text, email, plain multi-line text, hidden, phone, number, name, address, and custom string fields. Password fields and rich text content are unchanged; existing submissions keep their stored values until resaved.
Deprecated
- Deprecate the
PredefinedOptionsservice, predefined option class namespace (verbb\formie\options\*), andPredefinedOptions::EVENT_REGISTER_PREDEFINED_OPTIONSevent registration target. UseOptionSources, predefined option classes underverbb\formie\options\predefined\*, andOptionSources::EVENT_REGISTER_PREDEFINED_OPTIONSinstead. Legacy APIs remain available through the compatibility layer with deprecation notices.
Fixed
- Fix page-reload single-line and multi-line text limit validation rerenders so field error styling, form-level error messages, and scroll/focus behaviour match ajax submissions. (#1997)
- Fix Recipients fields preserving the selected option label when multiple recipient options send to the same email address, using encrypted row identity tokens while keeping recipient emails private in front-end markup. (#2382)
- Fix static Recipients option rows accepting invalid email targets by validating each comma-separated recipient address in the field settings.
- Fix Dropdown, Radio and Checkboxes Disabled option availability not outputting HTML
disabledon the front-end form. (#1816) - Fix Address and other fixed-parent sub-field settings being unavailable in the form builder by restoring on-demand field type config loading for nested sub-field types. (#1416)