Form Building Add-ons in ExpressionEngine

Recently we published a post that reviewed member profile add-ons in ExpressionEngine. At that time, we promised a similar review of form management add-ons as a complementary piece. This post will review three such forms add-ons that make HTML forms in ExpressionEngine easy, fun, powerful and beautiful. We couldn’t pack in every feature of every add-on but aimed to walk through high-level features and, ultimately, our recommendation of which to choose.

While ExpressionEngine is pretty solid out of the box, HTML forms have always been a bit of a bear. Both designing and processing forms has been limited to the basic forms used for login, contact, tell-a-friend, and few other options. Even ExpressionEngine 2, which comes with SafeCracker, offers a nice way to capture information into a Channel Entry, but lacks WYSIWYG customization and form processing features you would want in a full-featured, dedicated forms add-on.

Add-ons we’re reviewing

There are currently 3 HTML forms add-ons for EE that match up evenly on base features, so we chose those for this review.

Forms v3.1.2 - DevDemon

  • Single license: $55.00
  • Developer license: $275.00

Freeform Pro v4.0.6 - Solspace

  • Single license: $99.95
  • Developer license: n/a

ProForm v1.18 - MetaSushi

  • Single license: $65.00
  • 10-pack license: $580.00 (10% discount)

Note that all of these developers actively release hotfixes and new features. The versions we reviewed are listed above, but each add-on has a newer version already available. See the respective add-on’s change log for the latest features.


The installation process for each was a straightforward ExpressionEngine add-on installation. Place the module files in your third_party folder and the module’s theme files in themes/third_party. Visit Add-ons → Modules in the ExpressionEngine Control Panel and click the “Install” link for the add-on.


Each of the three add-ons offers a WYSIWYG form layout canvas. Each also offers support for multi-column forms, fieldset grouping and appropriate HTML elements such as horizontal rules. They also feature the ability to split forms across multiple “pages,” which makes breaking up long forms a cinch.

Forms layout canvas
Forms layout canvas (Full size)

Freeform Pro layout canvas
Freeform Pro layout canvas (Full size)

ProForm layout canvas
ProForm layout canvas (Full size)

Forms and Freeform Pro allow you to make changes to a field’s settings right in the layout canvas. ProForm requires a redirect to a separate view which can disrupt the form-building flow.

Field and Input Validation

Each of these add-ons give you the ability to mark fields as required while providing options for specifying data types that can be entered in a field. For instance, a text field can be told to only accept integer input or text. Despite these similarities, this is the first point where one add-on’s functionality rose above the others. ProForm uses CodeIgniter’s validation library to great effect and goes deeper than the others on data-type validation.

Forms layout canvas
ProForm validation rules (Full size)

ProForm also allows for rule-stacking so you can cascade. For instance, checking a valid email address-> encoding it. If you have the need for stringent data integrity checks, ProForm stands out.

Forms offers some conditional logic that reveals additional elements in your form based on input in previous fields. For instance, you can change the options available in one select menu to match an age-range selected in a prior menu.

The Toolboxes

Each add-on has the same basic tools for building forms with a layout canvas and a set of standard, pre-built, HTML form elements.

Forms and Freeform Pro allow for drag and drop placement of elements directly from a tools palette, while ProForm requires you to select the element, choose your settings and then it will place the element on the canvas. Once placed, each allows for rearranging items to get the layout you want.

Forms and Freeform Pro have special widgets for multi-column layouts including two, three and four columns, while ProForm intelligently rearranges on-the-fly as elements are dragged close together.


With any of the three add-ons, you can save presets for all form elements with multi-option fields. Selects and checkbox groups are obvious candidates for these presets. An area where Forms rises above the others is in its pre-built sets of field groups, like a typical Address form. Also, when building a select list, Forms offers a wide range of pre-defined options:

Forms options
Forms options

Forms options
Forms options

Freeform Pro offers Country, State and Province pre-built selects, and the ability to populate a select from Channel field, which is a nice treat when using Freeform Pro’s secret weapon (more on this in the next section).

Front-end Display

Each of the add-ons offer tags and parameters that make presenting your forms easy, yet with enough flexibility to give you complete control:

<h1>Contact Us - Forms</h1>
{exp:forms:form form_name='contact'}

<h1>Contact Us - Freeform Pro</h1>
{exp:channel:entries channel='stories'}



{exp:freeform:form form_name="contact"}
        <p><label>{freeform:field_label}</label> {freeform:field_output}</p>
<h1>Contact Us - ProForm</h1> 
{exp:proform:simple form="contact"}

<h1>Contact Us - ProForm</h1> 
{exp:proform:form form="contact"}
    {if field_type == 'string'}
        <p><label for="{field_name}">{field_label}</label>
        <input type="text" name="{field_name}">
    {if field_type == 'text'}
        <p><label for="{field_name}">{field_label}</label>
        <textarea name="{field_name}"></textarea>

When it comes to basic, dead-easy display, Freeform Pro takes the blue ribbon. With the new feature of a Freeform Pro ExpressionEngine Field-type (the secret weapon!), you can select and display any of your Freeform Pro forms right in a channel entry:

Freeform Pro field type
Freeform Pro field type (Full size)

In your template, simply use the field name of your Freeform Pro field as you would any other custom channel field.


All your fields are now set and ready for your visitors to use, there’s one thing left. The form needs to look and behave your way. Thankfully, each add-on gives us the ability to override default CSS and JavaScript. Forms allows you to disable CSS and JS, Freeform Pro gives you Composer and ProForm’s long form output give you complete control over presentation.

In addition to parameters, Freeform Pro offers a further step for taking complete control. Composer templates use the familiar ExpressionEngine tag syntax which allow you to craft your form’s CSS and display. This gives you a way to change the look and feel of your forms easily, especially if you use the Channel Field type.

Storage, Export & Reports

With each add-on, form submissions are available in the ExpressionEngine Control Panel. You can look over each entry to review what was captured.

Each one offers a means to export form submissions so you can work with the data outside of ExpressionEngine.

Freeform Pro export
Freeform Pro export

ProForm export
ProForm export

Forms export
Forms export

Forms offers a unique option to have the form submit to a 3rd Party service. Unfortunately the documentation on that is non-existent, which made implementing a test a no-go. Another feature unique to Forms is built-in print-to-PDF support in the Control Panel.


If you need a means to restrict access to your form, all of the candidates offer a way to set permissions.

Freeform Pro has controls for Multiple Site Manager and Control Panel access, but leaves front-end access restriction to the template.

Forms allows for front-end form availability based on Member Group as well as a date range. Date range would be useful for event registration, for instance.

ProForm relies on ExpressionEngine Member Group permissions for the Control Panel and template access restrictions for the front-end.

Each one allows for email notification when a form is submitted. ProForm accepts a list of addresses and can have multiple lists. Freeform Pro only notifies the site’s admin, but each form’s notification can be customized with Notification Templates.

Forms’ functionality falls somewhere between the others with the ability to set up several email notification templates, or customize directly in the form layout. It also has the ability to integrate with reCAPTCHA, MailChimp and Campaign Monitor - but again, unfortunately, the User Guide doesn’t document these features.


Software can only be as good as the documentation that helps you use it. Each of the three add-ons has a User Guide available, but the depth of information included varies between each.

Forms: The User Guide mimics the display style of the ExpressionEngine User Guide. Sadly, that’s where the similarities end.

It outlines Installation and Updates, how to implement Structure support and ExpressionEngine template tags for presenting your forms and entries. There are also some examples provided to get you started. Missing in Action from this guide is any documentation related to the Control Panel which is a real shame considering that’s where much of the action is.

Freeform Pro: This User Guide follows the Solspace style and covers every nook and cranny. Each tag, parameter and option are documented with several examples provided. Solspace also includes a Control Panel User Guide, which is great considering how much more there is in the new version of Freeform Pro compared to previous versions.

ProForm: Thorough. That’s the best way to describe ProForm’s User Guide. If you need to find the meaning of life, check this User Guide as it’s likely in there.


If you need to take the reigns at any point in your form’s processing, then you’ll need some hooks to work with.

Forms offers 4 undocumented extension hooks. Since they aren’t documented, you’ll have to dig into the code to see what they offer:

  • forms_submit_data_format_start
  • forms_submit_data_format_end
  • forms_submit_save_start
  • forms_submit_save_end

ProForm offers 16 documented hooks.

Freeform Pro has 6 documented hooks currently marked as being for Freeform 3.x, but they still appear to be active in Freeform 4.x. Freeform Pro also offers extensibility through Freeform Pro Field-types. Like ExpressionEngine, Freeform Pro offers an API to build custom field types.

  • freeform_module_admin_notification
  • freeform_module_form_end
  • freeform_module_insert_begin
  • freeform_module_insert_end
  • freeform_module_user_notification
  • freeform_module_validate_end

Final Thoughts

In summary here are the key features and attributes that define each of these add-ons:


  • Nice Control Panel interface but lacking documentation on what’s available there
  • Predefined lists are a quick timesaver
  • Limited notification options
  • Basic validation

Freeform Pro:

  • Beautiful new User Interface (which can be disabled to match native EE Control Panel)
  • Well documented both in templates and the Control Panel
  • Limited notification options
  • Basic validation


  • Uncluttered User Interface
  • Impressively documented
  • Robust notification options
  • Extensive validation options

The Recommendation

All three add-ons are worth the price of admission. Ultimately, your decision should be made based on which one best meets your needs and workflow.

For me? I’m going with ProForm for my own internal needs. The documentation, development hooks, and validation rules make it stand out as the best overall choice contextually. If the client is the end-user then I’d have to lean toward Freeform Pro or Forms.