<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://nerdgency.github.io/blog</id>
    <title>Nerdgency blog</title>
    <updated>2026-10-14T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://nerdgency.github.io/blog"/>
    <subtitle>Release announcements for the Nerdgency ExpressionEngine add-ons.</subtitle>
    <icon>https://nerdgency.github.io/img/favicon.png</icon>
    <rights>Copyright © 2026 Nerdgency.</rights>
    <entry>
        <title type="html"><![CDATA[Introducing Formidable 1.0: forms, finally done properly]]></title>
        <id>https://nerdgency.github.io/blog/introducing-formidable-1-0</id>
        <link href="https://nerdgency.github.io/blog/introducing-formidable-1-0"/>
        <updated>2026-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Formidable 1.0 is here. A visual form builder for ExpressionEngine 7.5+ with 38 fieldtypes, nine ready-made blueprints, multi-page forms that save and resume, quiet spam protection, and workflows that email, call webhooks and update your CRM.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Formidable 1.0: forms for ExpressionEngine" src="https://nerdgency.github.io/assets/images/formidable-1-0-hero-345272134f1d689d8b39b93d9a06b406.png" width="3200" height="1280" class="img_ev3q"></p>
<p>Every ExpressionEngine site has forms. And every ExpressionEngine developer has rebuilt the same contact form, the same job application, the same "add another attendee" registration, more times than they'd like to admit, along with the same chores: validation, spam, storing what people send, emailing the right person, and keeping the markup the designer actually drew.</p>
<p><strong>Today, that ends. Formidable 1.0 is here.</strong></p>
<p>It's the forms add-on we always wanted for ExpressionEngine: a visual builder your editors can use, markup you stay in charge of, and everything after <strong>Submit</strong> handled for you.</p>
<ul>
<li class=""><strong>Start in seconds</strong> from nine ready-made blueprints, or build from scratch with 38 fieldtypes.</li>
<li class=""><strong>Drop it on a page</strong> with one tag, in a Default, Tailwind or Bootstrap 5 theme.</li>
<li class=""><strong>Keep long forms alive</strong> with multiple pages, conditions, "Add another" rows and save-and-resume.</li>
<li class=""><strong>Stop spam quietly</strong>, with no puzzles for real people.</li>
<li class=""><strong>Send answers anywhere</strong>: email, webhooks, Mailchimp, HubSpot, Salesforce and more.</li>
<li class=""><strong>Run your process</strong> with statuses and one-click actions like Approve or Reject.</li>
</ul>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="one-tag-your-markup">One tag. Your markup.<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#one-tag-your-markup" class="hash-link" aria-label="Direct link to One tag. Your markup." title="Direct link to One tag. Your markup." translate="no">​</a></h2>
<p>Most form builders make you choose: either the builder owns your HTML, or you own it and write all the plumbing yourself. Formidable doesn't make you pick.</p>
<p>Build a form in the control panel, then put it on a page:</p>
<div class="window_QysB"><div class="windowBar_N19d"><span class="dots_eALc" aria-hidden="true"><i></i><i></i><i></i></span><span class="windowTitle_EFlP">templates/default_site/contact.group/index.html</span></div><div class="language-ee codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#e9e6dd;--prism-background-color:#16181d"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ee codeBlock_bY9V thin-scrollbar" style="color:#e9e6dd;background-color:#16181d"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#e9e6dd"><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">{</span><span class="token ee-module-tag tag keyword" style="color:#fbbd5c">exp:formidable:form</span><span class="token ee-module-tag tag" style="color:#fbbd5c"> form_handle</span><span class="token ee-module-tag tag attr-value punctuation" style="color:#a8a49a">=</span><span class="token ee-module-tag tag attr-value" style="color:#b5d38f">"contact_us"</span><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">}</span><br></div></code></pre></div></div></div>
<p>That's the whole template. You get a complete, accessible form, styled by the theme you choose. When a design needs more, take over any layer you like, from your own <code>&lt;form&gt;</code> element down to every label and input. Formidable keeps supplying the fiddly parts: names and ids, the answer a visitor typed before an error, <code>required</code>, and the ARIA wiring that makes instructions and errors readable to screen readers.</p>
<figure class="example_wYKp"><div class="exampleHeader_wdWT"><p class="exampleTitle_GSlg">Your markup, Formidable's attributes</p><span class="label_rIbG labelTemplate_m2lw">Example</span></div><div class="exampleBody_xNxr"><div class="language-ee codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#e9e6dd;--prism-background-color:#16181d"><div class="codeBlockTitle_OeMC">templates/default_site/contact.group/index.html</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ee codeBlock_bY9V thin-scrollbar" style="color:#e9e6dd;background-color:#16181d"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#e9e6dd"><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">{</span><span class="token ee-module-tag tag keyword" style="color:#fbbd5c">exp:formidable:form</span><span class="token ee-module-tag tag" style="color:#fbbd5c"> form_handle</span><span class="token ee-module-tag tag attr-value punctuation" style="color:#a8a49a">=</span><span class="token ee-module-tag tag attr-value" style="color:#b5d38f">"contact_us"</span><span class="token ee-module-tag tag" style="color:#fbbd5c"> only</span><span class="token ee-module-tag tag attr-value punctuation" style="color:#a8a49a">=</span><span class="token ee-module-tag tag attr-value" style="color:#b5d38f">"first_name|email_address"</span><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">    </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">form</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag ee-variable variable punctuation" style="color:#a8a49a">{</span><span class="token tag ee-variable variable" style="color:#c9b3f5">form_attributes</span><span class="token tag ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">stack</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">        </span><span class="token ee-variable variable punctuation" style="color:#a8a49a">{</span><span class="token ee-variable variable" style="color:#c9b3f5">form_meta</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">        </span><span class="token ee-variable variable punctuation" style="color:#a8a49a">{</span><span class="token ee-variable variable" style="color:#c9b3f5">fields</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">            </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">div</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">field</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">label</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">for</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">{field_handle}</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">{</span><span class="token ee-variable variable" style="color:#c9b3f5">field_name</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">label</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">{</span><span class="token ee-conditional keyword" style="color:#fbbd5c">if</span><span class="token ee-conditional keyword" style="color:#fbbd5c"> </span><span class="token ee-conditional keyword variable" style="color:#c9b3f5">field_instructions</span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                    </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">p</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">hint</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">{field_handle}-instructions</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">{</span><span class="token ee-variable variable" style="color:#c9b3f5">field_instructions</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">p</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">{/</span><span class="token ee-conditional keyword" style="color:#fbbd5c">if</span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">input</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag ee-variable variable punctuation" style="color:#a8a49a">{</span><span class="token tag ee-variable variable" style="color:#c9b3f5">field_attributes</span><span class="token tag ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">{</span><span class="token ee-conditional keyword" style="color:#fbbd5c">if</span><span class="token ee-conditional keyword" style="color:#fbbd5c"> </span><span class="token ee-conditional keyword variable" style="color:#c9b3f5">field_has_error</span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">}</span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">p</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">field-error</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">{</span><span class="token ee-variable variable" style="color:#c9b3f5">field_error</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">p</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">{/</span><span class="token ee-conditional keyword" style="color:#fbbd5c">if</span><span class="token ee-conditional keyword punctuation" style="color:#a8a49a">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">            </span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">div</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">        </span><span class="token ee-variable variable punctuation" style="color:#a8a49a">{/</span><span class="token ee-variable variable" style="color:#c9b3f5">fields</span><span class="token ee-variable variable punctuation" style="color:#a8a49a">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">        </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">button</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">submit</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain">Send</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">button</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">    </span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">form</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain"></span><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">{/</span><span class="token ee-module-tag tag keyword" style="color:#fbbd5c">exp:formidable:form</span><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">}</span><br></div></code></pre></div></div><div class="output_kWFF"><div class="outputHeader_FjpE"><span class="label_rIbG labelCaptured_Fvy9">Rendered output (excerpt)</span><span class="outputSource_NFZ3">Captured from ExpressionEngine 7.5.26 on 2026-10-11. Signed values and the CSRF token shown as “…”, host replaced with example.com, blank lines collapsed.</span></div><div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#e9e6dd;--prism-background-color:#16181d"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#e9e6dd;background-color:#16181d"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#e9e6dd"><span class="token plain">…</span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain"></span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">div</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">field</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">label</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">for</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">first_name</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain">First Name</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">label</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                    </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">p</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">hint</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">first_name-instructions</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain">We prefer your legal name</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">p</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">input</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">first_name</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">first_name</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">value</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">text</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">aria-describedby</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">first_name-instructions</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">            </span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">div</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">            </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">div</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">field</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">label</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">for</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">email_address</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain">Email Address</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">label</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">                </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">input</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">email_address</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">email_address</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">value</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">email</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">            </span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">div</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">        </span><span class="token tag punctuation" style="color:#a8a49a">&lt;</span><span class="token tag" style="color:#fbbd5c">button</span><span class="token tag" style="color:#fbbd5c"> </span><span class="token tag attr-name" style="color:#f4a3a0">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#a8a49a">=</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag attr-value" style="color:#b5d38f">submit</span><span class="token tag attr-value punctuation" style="color:#a8a49a">"</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain">Send</span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">button</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#e9e6dd"><span class="token plain">    </span><span class="token tag punctuation" style="color:#a8a49a">&lt;/</span><span class="token tag" style="color:#fbbd5c">form</span><span class="token tag punctuation" style="color:#a8a49a">&gt;</span><br></div></code></pre></div></div></div></div></figure>
<p>Already have forms written by hand? Wrap one in <code>{exp:formidable:capture}</code> and Formidable builds the form behind it, leaving your markup exactly as you wrote it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="never-start-from-a-blank-page">Never start from a blank page<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#never-start-from-a-blank-page" class="hash-link" aria-label="Direct link to Never start from a blank page" title="Direct link to Never start from a blank page" translate="no">​</a></h2>
<p>Formidable 1.0 ships with <strong>nine blueprints</strong>: complete forms with their fields, statuses, buttons and emails already set up. Pick one, name it, and it opens in the builder ready to adjust.</p>
<table><thead><tr><th>Blueprint</th><th>Comes with</th></tr></thead><tbody><tr><td><strong>Contact Us</strong></td><td>A message to your team, with a copy to the visitor</td></tr><tr><td><strong>Newsletter Signup</strong></td><td>Consent to be emailed, recorded with what was agreed</td></tr><tr><td><strong>Support Request</strong></td><td>Urgency, screenshots, and New → In progress → Resolved</td></tr><tr><td><strong>Quote Request</strong></td><td>Services, budget and timeline</td></tr><tr><td><strong>Appointment Request</strong></td><td>Preferred dates and times, with Confirm and Decline buttons</td></tr><tr><td><strong>Event Registration</strong></td><td>Tickets, guests, dietary needs and a confirmation email</td></tr><tr><td><strong>Feedback Survey</strong></td><td>Star rating, an agree/disagree grid and a 0–10 "would you recommend us"</td></tr><tr><td><strong>Job Application</strong></td><td>Three pages, a CV upload, past employers as "Add another" rows, and Shortlist → Hire</td></tr><tr><td><strong>Volunteer Sign-up</strong></td><td>Availability, interests and experience</td></tr></tbody></table>
<p>Built a form you're proud of? <strong>Save it as a blueprint</strong> for every site in your install. Need it on another site entirely? <strong>Export</strong> it as a file and <strong>import</strong> it there: channels, roles and connections are matched by name, and nothing private (addresses, webhook secrets, API keys) ever travels with it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="38-fieldtypes-and-some-you-wont-find-anywhere-else">38 fieldtypes, and some you won't find anywhere else<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#38-fieldtypes-and-some-you-wont-find-anywhere-else" class="hash-link" aria-label="Direct link to 38 fieldtypes, and some you won't find anywhere else" title="Direct link to 38 fieldtypes, and some you won't find anywhere else" translate="no">​</a></h2>
<p>Text, email, numbers, dates and times with native pickers, selects, checkboxes and radios are all here, of course. Then there are the ones that usually need another plugin:</p>
<div class="features_g6uk cols2_YDJB"><div class="feature_KBi3"><h3 class="featureTitle_cchA">Signatures</h3><p class="featureBody_hAn8"></p><p>A pad to sign with a mouse, trackpad or finger, kept as an image in the submission or as a file in your upload destination. Waivers and sign-offs, sorted.</p><p></p></div><div class="feature_KBi3"><h3 class="featureTitle_cchA">File uploads</h3><p class="featureBody_hAn8"></p><p>Straight into ExpressionEngine's own file manager, one file or several. If a submission fails validation, the files are held, so nobody picks them twice.</p><p></p></div><div class="feature_KBi3"><h3 class="featureTitle_cchA">Computed fields</h3><p class="featureBody_hAn8"></p><p>Totals, ages, full names and due dates, worked out as the visitor types and again on the server. Change a formula, and Formidable offers to recalculate every stored answer.</p><p></p></div><div class="feature_KBi3"><h3 class="featureTitle_cchA">Ratings, scales and grids</h3><p class="featureBody_hAn8"></p><p>Stars, a 0–10 Net Promoter scale, picture cards to choose from, and a Likert matrix ("The staff were helpful: Agree").</p><p></p></div><div class="feature_KBi3"><h3 class="featureTitle_cchA">Name, address and consent</h3><p class="featureBody_hAn8"></p><p>Names and addresses in parts, with the parts you choose required. Consent records exactly what was agreed to, and when.</p><p></p></div><div class="feature_KBi3"><h3 class="featureTitle_cchA">Choices that think for themselves</h3><p class="featureBody_hAn8"></p><p>Countries, states and provinces built in, or choices built from your own entries, categories and members. Pick a country and the next field offers only its states.</p><p></p></div></div>
<figure class="screenshot_BOS2"><div class="screenshotFrame_iTdN"><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAIAAABSnclZAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA9klEQVR4nE2Qa07DMBCEc/+zwSkoAgKlbr3vlysnaVX/sHb1aTQ7s/ysbV0vSAaoiNtP1jsxi6ovRMLMYwz3kH2IIlJmFtGF2UQks8zczGuUefZOmZFZExNxRJq5mmaGeSJJVUXUAsiIRMRVo8aoKo8C4ENNxO5WNSKrajy85VC/veu6OrECCqC2q3RwADzUp8/r1/fl/M/rr7Sr3LogGiJHbLh3bK39ne3j5ESRmWbz8gMzq5ltlu7uZmaexFqV01vUt1SpGu65z2YeEVVjAeBtqY3Na81yjzDGWFq77aU+nz8jjqkmYp6FPHC84g4IALOyB3/Fd+vMtpoAwuG+AAAAAElFTkSuQmCC&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="969"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/builder.7b18d8e.640.png" srcset="/assets/ideal-img/builder.7b18d8e.640.png 640w,/assets/ideal-img/builder.eeb754a.1120.png 1120w,/assets/ideal-img/builder.9809021.1600.png 1600w" alt="The Formidable form builder: a palette of fieldtypes on the left, the form&#x27;s pages and sections laid out on a grid on the right" width="640" height="969"></noscript></div></div><figcaption>The form builder<!-- --> · <!-- -->Screenshot: <!-- -->ExpressionEngine 7.5.26, demo data</figcaption></figure>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="long-forms-people-actually-finish">Long forms people actually finish<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#long-forms-people-actually-finish" class="hash-link" aria-label="Direct link to Long forms people actually finish" title="Direct link to Long forms people actually finish" translate="no">​</a></h2>
<p>Applications, intake forms and grant forms lose people halfway. Formidable is built to keep them.</p>
<ul>
<li class=""><strong>Multiple pages</strong> with a step indicator and Back / Next, and no template changes. <strong>Next</strong> checks the page before moving on, and the server checks everything again when it's sent.</li>
<li class=""><strong>Conditions</strong> show, hide or require any field, hide whole sections, and <strong>skip pages</strong>. The builder reads every condition back to you as a sentence.</li>
<li class=""><strong>Repeating sections</strong> add "Add another" rows for dependants, employers or line items, with <code>sum()</code>, <code>count()</code> and <code>average()</code> across the rows.</li>
<li class=""><strong>Save and resume</strong> gives every page a <strong>Save and continue later</strong> button, with a link straight back to where they left off, files included. Members just open the form again on any device. Add a reminder, and anyone who wanders off gets a friendly nudge by email.</li>
</ul>
<div class="window_QysB"><div class="windowBar_N19d"><span class="dots_eALc" aria-hidden="true"><i></i><i></i><i></i></span><span class="windowTitle_EFlP">templates/default_site/apply.group/index.html</span></div><div class="language-ee codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#e9e6dd;--prism-background-color:#16181d"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ee codeBlock_bY9V thin-scrollbar" style="color:#e9e6dd;background-color:#16181d"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#e9e6dd"><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">{</span><span class="token ee-module-tag tag keyword" style="color:#fbbd5c">exp:formidable:form</span><span class="token ee-module-tag tag" style="color:#fbbd5c"> form_handle</span><span class="token ee-module-tag tag attr-value punctuation" style="color:#a8a49a">=</span><span class="token ee-module-tag tag attr-value" style="color:#b5d38f">"application"</span><span class="token ee-module-tag tag" style="color:#fbbd5c"> drafts</span><span class="token ee-module-tag tag attr-value punctuation" style="color:#a8a49a">=</span><span class="token ee-module-tag tag attr-value" style="color:#b5d38f">"yes"</span><span class="token ee-module-tag tag punctuation" style="color:#a8a49a">}</span><br></div></code></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="everything-after-submit">Everything after Submit<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#everything-after-submit" class="hash-link" aria-label="Direct link to Everything after Submit" title="Direct link to Everything after Submit" translate="no">​</a></h2>
<p>A form is only as good as what happens next. Formidable's <strong>workflows</strong> run when a submission is created, edited or changes status, and when a draft is saved or due a reminder, each with its own conditions.</p>
<div class="features_g6uk cols3_NjCV"><div class="feature_KBi3"><span class="featureIcon_ZJdl"><svg width="24" height="24" aria-hidden="true" viewBox="0 0 24 24" stroke-width="1.5" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 16.5V3M18 3L21.5 6.5M18 3L14.5 6.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M18 16.5C18 18.433 16.433 20 14.5 20C12.567 20 11 18.433 11 16.5V7.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M11 7.5C11 5.567 9.433 4 7.5 4C5.567 4 4 5.567 4 7.5V19.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><h3 class="featureTitle_cchA">Email that looks like you</h3><p class="featureBody_hAn8"></p><p>Notifications from your own email theme, to typed addresses, members, roles or the address the visitor chose. Reply-to the visitor, attach their files.</p><p></p></div><div class="feature_KBi3"><span class="featureIcon_ZJdl"><svg width="24" height="24" aria-hidden="true" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="2" width="7" height="5" rx="0.6" stroke="currentColor" stroke-width="1.5"></rect><rect x="8.5" y="17" width="7" height="5" rx="0.6" stroke="currentColor" stroke-width="1.5"></rect><rect x="14" y="2" width="7" height="5" rx="0.6" stroke="currentColor" stroke-width="1.5"></rect><path d="M6.5 7V10.5C6.5 11.6046 7.39543 12.5 8.5 12.5H15.5C16.6046 12.5 17.5 11.6046 17.5 10.5V7" stroke="currentColor" stroke-width="1.5"></path><path d="M12 12.5V17" stroke="currentColor" stroke-width="1.5"></path></svg></span><h3 class="featureTitle_cchA">Your CRM, connected</h3><p class="featureBody_hAn8"></p><p>Push straight into Mailchimp, HubSpot, Salesforce, Campaign Monitor, Constant Contact, Dotdigital or Mailjet. Or call any webhook, signed so the receiver can trust it.</p><p></p></div><div class="feature_KBi3"><span class="featureIcon_ZJdl"><svg width="24" height="24" aria-hidden="true" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 21H15M9 21V16M9 21H3.6C3.26863 21 3 20.7314 3 20.4V16.6C3 16.2686 3.26863 16 3.6 16H9M15 21V9M15 21H20.4C20.7314 21 21 20.7314 21 20.4V3.6C21 3.26863 20.7314 3 20.4 3H15.6C15.2686 3 15 3.26863 15 3.6V9M15 9H9.6C9.26863 9 9 9.26863 9 9.6V16" stroke="currentColor" stroke-width="1.5"></path></svg></span><h3 class="featureTitle_cchA">A log you can replay</h3><p class="featureBody_hAn8"></p><p>Every run recorded: what was sent and what came back. When a CRM has a bad day, fix it and press Run again. Add a queue for background sending and retries.</p><p></p></div></div>
<p><strong>Submission actions</strong> turn a form into a process. Add buttons like <strong>Approve</strong>, <strong>Reject</strong> or <strong>Mark as paid</strong> to every submission: each one can change the status, fill in answers, ask for a note, and start workflows. Run them one at a time, on a whole selection at once, or through the API, with every decision kept in the submission's activity.</p>
<figure class="screenshot_BOS2"><div class="screenshotFrame_iTdN"><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAANCAIAAAAfVWhSAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA7klEQVR4nEWQ224CQQxD9/8/sepLUQUsgtnL5OZMZgcFquJX6zh2pnWlUrj33lqPOCJ6RB/jWNf+KH3aNsw3mEE1mB0IUbTmPyf/+sZkL6mqu8NhI+73cjr9MvMYx6RqIsYsZjC49LZu2zzfiCSip61qrbWIgDtGfzySJuLjOCYAIok6PNXbXmlZVgBJMwuzAA64ivaIbdtLWVTtE569Xvz79vU6E3HaIlorZbg3VR0RtVKt5N7+6Vzl7gboiFKW8/lClL9Km4hVLcMVozUi/tDMIqI5CVCD9laW9XK+1kp/t1/NU6bZfN9rKct72BOSWneomLbIAwAAAABJRU5ErkJggg==&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="838"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/workflow-log.99f7832.640.png" srcset="/assets/ideal-img/workflow-log.99f7832.640.png 640w,/assets/ideal-img/workflow-log.48011b4.1120.png 1120w,/assets/ideal-img/workflow-log.cfb5b4f.1600.png 1600w" alt="The workflow log: each run with its workflow, form, status and time, with failed runs marked" width="640" height="838"></noscript></div></div><figcaption>Formidable › Workflow Log<!-- --> · <!-- -->Screenshot: <!-- -->ExpressionEngine 7.5.26, demo data</figcaption></figure>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="spam-stopped-quietly">Spam, stopped quietly<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#spam-stopped-quietly" class="hash-link" aria-label="Direct link to Spam, stopped quietly" title="Direct link to Spam, stopped quietly" translate="no">​</a></h2>
<p>Real people never see a puzzle. Out of the box, every form has a honeypot, a JavaScript check, a per-IP rate limit and duplicate detection. A caught bot gets the same polite reply as a real person, so it learns nothing. When you do want a visible challenge, add <strong>Cloudflare Turnstile</strong>, <strong>hCaptcha</strong> or ExpressionEngine's own CAPTCHA as a field.</p>
<p>Underneath it all: signed, encrypted form meta that can't be tampered with, CSRF protection on every post, checked return URLs, and optional <strong>encryption at rest</strong> for sensitive answers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="accessible-from-the-first-field">Accessible from the first field<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#accessible-from-the-first-field" class="hash-link" aria-label="Direct link to Accessible from the first field" title="Direct link to Accessible from the first field" translate="no">​</a></h2>
<p>Every shipped theme is built toward <strong>WCAG 2.1 AA</strong>. Checkboxes and radios sit inside their labels. Groups of options are named for screen readers. Instructions and errors are wired to their inputs. Required fields are marked, and the error summary is announced, focused, and links to each field that needs fixing. Formidable's own colours for stars, scales, picture cards and switches meet contrast, too. Accessibility is part of the markup Formidable writes, not homework it leaves you.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-control-panel-your-team-will-actually-enjoy">A control panel your team will actually enjoy<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#a-control-panel-your-team-will-actually-enjoy" class="hash-link" aria-label="Direct link to A control panel your team will actually enjoy" title="Direct link to A control panel your team will actually enjoy" translate="no">​</a></h2>
<ul>
<li class="">A <strong>dashboard</strong> with what came in, a fourteen-day chart, how workflows are doing, and anything that needs a look.</li>
<li class=""><strong>Guided tours</strong> on every screen, and a <strong>setup wizard</strong> that gets a new site ready in minutes.</li>
<li class="">Submissions you can filter, save as views, colour by status, edit, and export to CSV, JSON, XML or text.</li>
<li class=""><strong>Nine permissions</strong>, so each role sees exactly what it should, right down to the sidebar.</li>
<li class="">A <strong>Themes</strong> screen that shows which parts of your theme you've changed, and what's changed upstream since.</li>
</ul>
<figure class="screenshot_BOS2"><div class="screenshotFrame_iTdN"><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAw0lEQVR4nDXOSW7EMAxEUd3/ksk23bZsk5SKoxw46AC1e7X47fVmIhUB88hcmeVeE4to7b3acbAIzGpOB9wszNK9RJJlteOQMcysAI2I+76B9fMKwDJX652ZNbOqVtW673Ve9fUdmMC0JqKAAyEy3SOzInLCt85EaECoJtHY94MutudSdMm59/T48HXJ+72dJ6k9zBdzP1f8M9HYtp1ZzMM9VEOHVuaHmUc/zjFmREakajGjqh7+mwNq9qRlltlyv6vWLy1VIaK5ZclQAAAAAElFTkSuQmCC&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="640" height="634"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/assets/ideal-img/dashboard.08bf2c5.640.png" srcset="/assets/ideal-img/dashboard.08bf2c5.640.png 640w,/assets/ideal-img/dashboard.9a1e83d.1120.png 1120w,/assets/ideal-img/dashboard.2d16794.1600.png 1600w" alt="The Formidable dashboard: totals across the top, a fourteen-day chart, workflow results, the latest submissions and links to the documentation" width="640" height="634"></noscript></div></div><figcaption>Formidable › Dashboard<!-- --> · <!-- -->Screenshot: <!-- -->ExpressionEngine 7.5.26, demo data</figcaption></figure>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="built-for-developers-too">Built for developers, too<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#built-for-developers-too" class="hash-link" aria-label="Direct link to Built for developers, too" title="Direct link to Built for developers, too" translate="no">​</a></h2>
<div class="features_g6uk cols3_NjCV"><div class="feature_KBi3"><span class="featureIcon_ZJdl"><svg width="24" height="24" aria-hidden="true" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 5.99999L20 18C20 19.1046 19.1046 20 18 20H6C4.89543 20 4 19.1046 4 18V6C4 4.89543 4.89543 4 6 4H18C19.1045 4 19.9999 4.89543 20 5.99999Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 9V4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><h3 class="featureTitle_cchA">A JSON API</h3><p class="featureBody_hAn8"></p><p>Serve forms and accept submissions from any front end, with exactly the same validation as a posted form.</p><p></p></div><div class="feature_KBi3"><span class="featureIcon_ZJdl"><svg width="24" height="24" aria-hidden="true" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7 10.5L4.99591 13.1721C4.41845 13.9421 4.47127 15.0141 5.1216 15.7236L8.9055 19.8515C9.28432 20.2647 9.81826 20.5 10.3789 20.5C11.4651 20.5 13.2415 20.5 15 20.5C17.4 20.5 19 19 19 16.5C19 16.5 19 16.5 19 16.5C19 16.5 19 9.64287 19 7.92859" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 8.49995C16 8.49995 16 8.37483 16 7.92852C16 5.6428 19 5.6428 19 7.92852" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M13 8.50008C13 8.50008 13 7.91978 13 7.02715M13 6.50008C13 6.50008 13 6.804 13 7.02715M16 8.50008C16 8.50008 16 8.37496 16 7.92865C16 7.70549 16 7.25031 16 7.02715C16 4.74144 13 4.74144 13 7.02715" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M13 8.50008C13 8.50008 13 7.91978 13 7.02715C13 4.74144 16 4.74144 16 7.02715C16 7.25031 16 7.70549 16 7.92865C16 8.37496 16 8.50008 16 8.50008" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M10 8.50005C10 8.50005 10 7.85719 10 6.50005C10 4.21434 13 4.21434 13 6.50005C13 6.50005 13 6.50005 13 6.50005C13 6.50005 13 6.80397 13 7.02713C13 7.91975 13 8.50005 13 8.50005" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M7 13.5001V6.50006C7 5.67164 7.67157 5.00006 8.5 5.00006V5.00006C9.32843 5.00006 10 5.55527 10 6.38369C10 6.42151 10 6.4603 10 6.50006C10 7.85721 10 8.50006 10 8.50006" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><h3 class="featureTitle_cchA">Extend everything</h3><p class="featureBody_hAn8"></p><p>Twenty extension hooks, plus your own fieldtypes and connection providers, one PHP class each.</p><p></p></div><div class="feature_KBi3"><span class="featureIcon_ZJdl"><svg width="24" height="24" aria-hidden="true" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 17L9.33334 17C8.22877 17 7.33334 16.1047 7.33334 15.0002C7.33334 14.3284 7.33334 13.6211 7.33333 13.1111C7.33333 12.5556 6 12 6 12C6 12 7.33333 11.4444 7.33334 10.8889C7.33334 10.4359 7.33334 9.70586 7.33334 8.99998C7.33334 7.89541 8.22877 7 9.33334 7L10 7" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M14 17L14.6667 17C15.7712 17 16.6667 16.1047 16.6667 15.0002C16.6667 14.3284 16.6667 13.6211 16.6667 13.1111C16.6667 12.5556 18 12 18 12C18 12 16.6667 11.4444 16.6667 10.8889C16.6667 10.4359 16.6667 9.70586 16.6667 8.99998C16.6667 7.89541 15.7712 7 14.6667 7L14 7" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M21 3.6V20.4C21 20.7314 20.7314 21 20.4 21H3.6C3.26863 21 3 20.7314 3 20.4V3.6C3 3.26863 3.26863 3 3.6 3H20.4C20.7314 3 21 3.26863 21 3.6Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><h3 class="featureTitle_cchA">Scripts and deploys</h3><p class="featureBody_hAn8"></p><p>Fifteen commands for cron and deploy scripts, all runnable from the control panel. Blueprints in PHP, forms in version control.</p><p></p></div></div>
<p>And for content editors: the <strong>Formidable Form</strong> channel field puts a form on any entry, even inside Grid and Fluid.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="formidable-10-by-the-numbers">Formidable 1.0, by the numbers<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#formidable-10-by-the-numbers" class="hash-link" aria-label="Direct link to Formidable 1.0, by the numbers" title="Direct link to Formidable 1.0, by the numbers" translate="no">​</a></h2>
<table><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>38</strong></td><td>fieldtypes</td></tr><tr><td><strong>9</strong></td><td>ready-made blueprints</td></tr><tr><td><strong>3</strong></td><td>themes: Default, Tailwind and Bootstrap 5</td></tr><tr><td><strong>7</strong></td><td>email marketing and CRM integrations, plus any webhook</td></tr><tr><td><strong>20</strong></td><td>extension hooks</td></tr><tr><td><strong>15</strong></td><td>commands</td></tr><tr><td><strong>0</strong></td><td>puzzles for your visitors to solve</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="documented-to-the-parameter">Documented to the parameter<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#documented-to-the-parameter" class="hash-link" aria-label="Direct link to Documented to the parameter" title="Direct link to Documented to the parameter" translate="no">​</a></h2>
<p>The documentation was written alongside the code, and it's checked against Formidable's source every time this site builds. If you read about a parameter, it exists. Where the docs show the HTML Formidable produces, it was captured from a real install, not typed by hand.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changelog">Changelog<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#changelog" class="hash-link" aria-label="Direct link to Changelog" title="Direct link to Changelog" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="100-14-october-2026">1.0.0, 14 October 2026<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#100-14-october-2026" class="hash-link" aria-label="Direct link to 1.0.0, 14 October 2026" title="Direct link to 1.0.0, 14 October 2026" translate="no">​</a></h3>
<p>The first public release. Everything is new, so in brief:</p>
<ul>
<li class=""><strong>Building:</strong> a visual builder with pages, sections and a twelve-column grid; 38 fieldtypes; conditions that show, hide or require fields and skip pages; repeating sections; computed fields; a Field Library; nine blueprints, plus import and export.</li>
<li class=""><strong>Displaying:</strong> one <code>{exp:formidable:form}</code> tag; Default, Tailwind and Bootstrap 5 themes; classes and attributes for every part; capture from your own markup; the Formidable Form channel field.</li>
<li class=""><strong>Submissions:</strong> a listing with filters, saved views and statuses; editing, including signatures, names and addresses, and repeating rows; exports to CSV, JSON, XML and text; per-field encryption; save and resume; front-end editing; submission actions such as Approve and Reject.</li>
<li class=""><strong>Automation:</strong> workflows that email, call signed webhooks or push to seven CRM and email services, with a background queue, retries and a replayable log.</li>
<li class=""><strong>Control panel:</strong> a dashboard, health checks with their fixes, eight permissions, Jump Menu commands, guided tours and Utilities.</li>
<li class=""><strong>For developers:</strong> a JSON API with scoped keys, forms as JSON, 20 extension hooks, your own fieldtypes and connections, and fifteen commands.</li>
<li class=""><strong>Requirements:</strong> ExpressionEngine 7.5+ and PHP 8.2+.</li>
</ul>
<p>The full list is in the <a class="" href="https://nerdgency.github.io/docs/formidable/prologue/release-notes">release notes</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get started<a href="https://nerdgency.github.io/blog/introducing-formidable-1-0#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">​</a></h2>
<p>Formidable 1.0 needs <strong>ExpressionEngine 7.5</strong> or later and <strong>PHP 8.2</strong> or later. Copy two folders, choose <strong>Install</strong>, and your first form is about five minutes away. Faster, if you start from a blueprint.</p>
<div class="cards_zfiI"><a class="card_TANB" href="https://nerdgency.github.io/docs/formidable/getting-started/installation"><span class="cardTitle_RYDh">Install Formidable</span><span class="cardBody_IgTq"><p>Requirements, and the two folders to copy.</p></span></a><a class="card_TANB" href="https://nerdgency.github.io/docs/formidable/getting-started/your-first-form"><span class="cardTitle_RYDh">Build your first form</span><span class="cardBody_IgTq"><p>A contact form, on a page, in about five minutes.</p></span></a><a class="card_TANB" href="https://nerdgency.github.io/docs/formidable/building-forms/blueprints"><span class="cardTitle_RYDh">Start from a blueprint</span><span class="cardBody_IgTq"><p>Nine ready-made forms, and your own.</p></span></a><a class="card_TANB" href="https://nerdgency.github.io/docs/formidable/automation/workflows"><span class="cardTitle_RYDh">Workflows</span><span class="cardBody_IgTq"><p>Email, webhooks and CRMs, with a replayable log.</p></span></a></div>
<p>Forms are the front door of every site. Let's make yours a good one. <strong>We can't wait to see what you build.</strong></p>]]></content>
        <author>
            <name>Nerdgency</name>
            <uri>https://github.com/nerdgency</uri>
        </author>
        <category label="Formidable" term="Formidable"/>
        <category label="Release" term="Release"/>
    </entry>
</feed>