Craft CMS 5 plugin

Forms your clients run.
Freedom you keep.

Easy Form is the Craft form plugin built for convenience, speed and developer freedom. Multilingual out of the box, so clients manage forms in every language themselves — while you get a one-line render, hooks front and back, and lean non-element storage that stays fast at any volume.

{{ easyForm('contact') }}
Render any form with a single Twig function.

Craft CMS 5.8+ · PHP 8.2+ · One year of updates & support

Contact us — we usually reply within a day.

A working preview — try sending it.

Features

Convenience, speed and freedom — in one plugin.

Easy Form covers the whole lifecycle of a submission: effortless for the client who manages it, fast under load, and open to the developer who wants control.

  • Multilingual

    Every language, client-managed

    Per-site labels, success and error messages, and translated frontend validation come built in — so a client can run the same form in every language without calling a developer.

  • Convenience

    A control panel clients get

    A refined builder with conditional logic, multi-page steps and URL pre-fill. Editors add fields, tweak copy and read submissions on their own — no template edits required.

  • Freedom

    Yours to shape, front and back

    Render with one easyForm() call, or build your own markup with easyFormLayout(). Hook the JS submit lifecycle in the browser and PHP events on the server.

  • Speed

    Fast, non-element storage

    Forms and submissions live in their own tables (easyform_forms, easyform_submissions), skipping element and content-table overhead so volume stays fast.

  • Defense

    Spam protection built in

    Honeypot, blocked keywords and domains, per-IP rate limits, and Turnstile / reCAPTCHA v2 & v3 — enforced on the server, not just in the browser.

  • Export

    Advanced CSV export

    Choose your columns and filter by site, status, date and search — export everything or a precise subset. Runs in the background, batched so large datasets never blow up memory, with a UTF-8 BOM for Excel and copies you can save and re-download.

  • Portability

    Duplicate, import & export forms

    Clone a form in one click, or move form definitions between sites and environments as portable JSON — export a single form or a bundle, then import it anywhere.

  • Delivery & privacy

    Notifications, webhooks & GDPR

    Conditional emails with CC/BCC and attachments, queued signed webhooks, plus IP anonymization, per-email erase and scheduled retention pruning.

Multilingual

One form. Every language.
Managed by the client.

Most form plugins treat translation as an afterthought you wire up per project. Easy Form makes it the default — and hands the keys to the people who run the site.

  • Per-site content. Labels, success and error messages and the submit button all translate per Craft site, with a sensible default fallback.
  • Translated validation, automatically. Frontend messages follow the site language out of the box — shipped in six locales, with no custom message to write.
  • No developer round-trip. Editors adjust wording in every language from the control panel; you never touch a template to fix a typo.
Built for volume

Most form plugins make every submission a Craft element.
Easy Form doesn't.

Each submission is a row in a purpose-built table, with a deliberate JSON contract around the payload. That's what lets a contact form and a 100,000-entry campaign live in the same plugin without slowing down.

  • Custom tables, not elements

    No element or content-table joins per submission — just lean reads against indexed columns.

  • Queued, per-site exports

    Export every submission — or just the sites you pick — off the request cycle, in batches, without hydrating models. Big multi-site datasets never exhaust memory.

  • Promoted columns & snapshots

    Common fields are promoted to real columns for fast filtering, and a field snapshot keeps old submissions readable after a form changes.

Programmer freedom

Enough hooks to satisfy everyone.

Render it, rebuild the markup, or hook the lifecycle — front end and back end. Easy Form gives you the control other plugins hide, without making the simple case hard.

# One call renders the whole form, validation and AJAX submit included.
{{ easyForm('contact') }}

# …or pass options.
{{ easyForm('contact', {
  submitButtonText: 'Send',
  class: 'easy-form my-form',
}) }}
Custom fields

Fields the CMS never has to know about.

Declare a field on the form, then render and populate it however you like in Twig — a select whose options come from your entries, a computed value, or a whole custom payload the client dreamed up. Easy Form accepts it, validates it against your rules, and stores it. Non-scalar values are JSON-encoded automatically, so nothing is lost.

strict only defined fields allow-listed defined + declared (default) open anything goes
# 'productId' is a frontend field declared on the form —
# now drive its options from live Craft entries.
<select name="fields[productId]">
  {% for product in craft.entries.section('products').all() %}
    <option value="{{ product.id }}">{{ product.title }}</option>
  {% endfor %}
</select>

# Submitted, validated against your allow-list, and stored.
Compare

Different priorities, on purpose.

This isn't about out-featuring the big form plugins — they do more, and that's the point. Easy Form optimises for the three things they trade away: client convenience, raw speed, and developer freedom.

  Easy Form Element-based plugins
Submission storage Purpose-built tables Craft elements & content
Performance at volume Lean indexed reads Element/content overhead
Client-managed multilingual Built in, per-site Configurable, more setup
One-line render easyForm() Varies
Bring-your-own markup easyFormLayout() Sometimes
Hooks, front & back end JS events + PHP events Varies
Integrations & field breadth Focused + webhooks Extensive
Setup & learning curve Minimal Steeper

Need dozens of CRM integrations and every field type imaginable? A plugin like Formie is genuinely excellent — reach for it. Want forms that are fast, effortless for clients, and yours to bend? That's Easy Form.

Pricing

One plan. Everything included.

No editions, no add-ons, no per-form limits. Every feature, every language, one price.

$59 first year

then $29/year for continued updates & support

Your license never expires — the plugin keeps working whether or not you renew. Renewing just keeps the updates coming.

  • Unlimited forms & submissions
  • Multilingual, client-managed, 6 locales
  • Spam protection, notifications, webhooks & exports
  • GDPR retention, erase & anonymization
  • Full Twig & PHP/JS event API
Get Easy Form

Craft CMS 5.8+ · PHP 8.2+ · Proprietary license

Availability

Install in two commands.

Easy Form is live on the Craft Plugin Store for $59 (a year of updates included, then $29/year to keep updating). Add it with Composer, or install it straight from the Plugin Store in your control panel. The documentation covers everything else.

Craft CMS
5.8.0 or later
PHP
8.2 or later
$ composer require "yannkost/craft-easy-form:^1.1.0" -w
$ php craft plugin/install easy-form
View on the Craft Plugin Store

Give your clients forms they can run.

Multilingual, fast, and yours to shape — from $59.