Title: Essential Form &#8211; The lightest plugin for contact forms, ultra lightweight and no spam
Author: Jose Mortellaro
Published: <strong>February 28, 2023</strong>
Last modified: December 4, 2025

---

Search plugins

![](https://ps.w.org/essential-form/assets/banner-772x250.png?rev=2872333)

![](https://ps.w.org/essential-form/assets/icon-256x256.png?rev=2872333)

# Essential Form – The lightest plugin for contact forms, ultra lightweight and no spam

 By [Jose Mortellaro](https://profiles.wordpress.org/giuse/)

[Download](https://downloads.wordpress.org/plugin/essential-form.1.0.2.zip)

 * [Details](https://srd.wordpress.org/plugins/essential-form/#description)
 * [Reviews](https://srd.wordpress.org/plugins/essential-form/#reviews)
 *  [Installation](https://srd.wordpress.org/plugins/essential-form/#installation)
 * [Development](https://srd.wordpress.org/plugins/essential-form/#developers)

 [Support](https://wordpress.org/support/plugin/essential-form/)

## Description

Looking for a no-fuss, ultra-lightweight contact form that just works? **Essential
Form** gives you exactly what you need — no more, no less.

Use the shortcode `[essential_form]` wherever you want a simple contact form with
the following fields:

 * Name
 * Email
 * Message
 * Agreement checkbox

That’s it. No extra fluff, no performance hit.

#### ⚡ Zero Bloat. Zero Requests. Zero Spam.

Essential Form adds **no HTTP requests**, loads **no external libraries**, and runs
on **pure Vanilla JavaScript** — only **1 kB of inline script**, injected **only
on pages with a form**. When we say it’s the lightest contact form ever made, we
mean it. The entire plugin zip is just **14 kB**.

#### 🛡️ Anti-Spam, Reinvented (No Captchas, Ever)

Our **invisible anti-spam system** blocks all automated bots — no annoying captchas,
no puzzles, no headaches. Here’s how it works:

 * Each form submission uses a **unique, random token**
 * **20 random security keys** are generated per site
 * AJAX actions have **unpredictable names** like `essential_form_fbe52b696`
 * Robots can’t guess or simulate a valid submission

The result? **Only real humans** get through. Bots don’t stand a chance.

#### 🧘‍♀️ Keep It Simple

Most of the time, all you need is a name, email, message, and a simple checkbox.
That’s exactly what Essential Form gives you. If you need complex forms with extra
fields or logic, this plugin isn’t for you — try Contact Form 7 instead.

But if you want something fast, clean, and incredibly secure, **Essential Form**
is for you.

**Try Essential Form today — and enjoy a faster, cleaner contact form experience.**

### How to add a contact form on the page

 * Add the shortcode [essential_form]
 * Done!

### Features of the Contact Form

 * **Extremely lightweight** – The plugin inlines about 1 kB of pure Vanilla JavaScript(
   even smaller when compressed) only on the page where you use the shortcode — 
   and **never above the fold**. On all other pages, it doesn’t exist at all. You
   could say it only “exists” on a page because the form is visible — otherwise,
   you’d never know the plugin is there. No tool will be able to measure any meaningful
   resource usage caused by this plugin.
 * The **contact form** includes only four fields: name, email, message, and an 
   agreement checkbox. Nothing else. If you need more fields, this plugin isn’t 
   for you. But if that’s all you need — you’ll love how simple and fast it is.
 * It **inherits your theme’s styles** automatically. If you want custom styling,
   you can add your own CSS — or use a different plugin if you need more built-in
   design options.
 * It includes a **powerful, invisible anti-spam system**. Bots won’t be able to
   send messages through your form. Only real humans can submit it — and if you 
   ever get spam, it will be from a human doing it manually.
 * **No captchas, no puzzles, no user frustration.** The anti-spam system works 
   entirely behind the scenes — quietly and effectively.

### Shortcode Parameters

You can customize the form labels and messages using these shortcode parameters:

 * `label_email`
 * `label_message`
 * `button_text`
 * `agreement_text`
 * `success_message`

**Example usage:**

    ```
    [essential_form label_email="Your email" label_message="Your message" button_text="Send" agreement_text="You agree with our privacy policy" success_message="Thank you for your message!"]
    ```

If you don’t provide these parameters, the plugin will use the default values.

### How to customize the contact forms

You can also customize the contact forms throught the filter hook ‘essential_form_settings’.

Here an example.

    ```
    add_filter( 'essential_form_settings',function( $options ){
        return array(
            'email_from' => 'youremail@mail.com',
            'email_to' => 'youremail@mail.com',
            'email_subject' => sprintf( esc_html__( 'Message from %s','your-domain' ),get_bloginfo( 'name' ) ),
            'label_name' => __( 'Name','your-domain' ),
            'label_email' => __( 'Email','your-domain' ),
            'label_message' => __( 'Message','your-domain' ),
            'button_text' => __( 'Send','your-domain' ),
            'agreement_text' => __( 'By submitting this form I agree with the privacy policy','your-domain' ),
            'success_message' => __( 'Form submitted successfully! Thank you for your message!','your-domain' ),
            'name_missing_error' => __( 'Name is a required field!','your-domain' ),
            'email_missing_error' => __( 'Email is a required field!','your-domain' ),
            'email_not_valid_error' => __( 'Email not valid!','your-domain' ),
            'message_missing_error' => __( 'Message is a required field!','your-domain' ),
            'message_too_long_error' => __( 'This message is too long! Please, write not more than 50000 characters.','your-domain' ),
            'missing_agreement_error' => __( 'You have to agree with our privacy policy to submit the form.','your-domain' )
        );
    } );
    ```

If you need to do a custom action after the sending of the email, you can use the
action hook ‘essential_form_after_sending’.

Here an example.

    ```
    add_action( 'essential_form_after_sending',function( $name,$email,$message,$post_id ){

        //$name is the name of the user who submitted the contant form
        //$message is the message which is sent through the contact form
        //$post_id is the ID of the page where is included the contact form

        //Your code here

    },10,4 );
    ```

If you need to customize the message that is included in the email, use the filter
hook ‘essential_form_message’.

Here you have an example.

    ```
    add_filter('essential_form_message',function( $message,$name,$email,$post_id ){
        if( isset( $_SERVER['REMOTE_ADDR'] ) ){
            $message .= '<p>IP: '.sanitize_text_field( $_SERVER['REMOTE_ADDR'] ).'</p>';
        }
        return $message;
    },10,4 );
    ```

If you need to customize the agreement text, use the filter hook ‘essential_form_agreement_text’.

Here you have an example.

    ```
    add_filter( 'essential_form_agreement_text',function( $text ){
        return 'By submitting this form I agree with the <a href="https://yourdomain.com/privacy-policy/">Privacy Policy</a>';
    } );
    ```

### Limitations

The limits of [Essential Form](https://wordpress.org/plugins/essential-form/) are
many, but they are what make this plugin the best if you need a ultra-lightweight
contact form with just name, email, comment, and privacy agreement.
 If you need
more, you can always install more complete but also heavier contact forms like:

[Contact Form 7](https://wordpress.org/plugins/contact-form-7/)
 [WPForms](https://wordpress.org/plugins/wpforms-lite/)
[Forminator](https://wordpress.org/plugins/forminator/) [Formidable Forms](https://wordpress.org/plugins/formidable/)
[Ninja Forms](https://wordpress.org/plugins/ninja-forms/)

and many other amazing plugins for contact forms.

### How to speed up the form submission and avoid conflicts with other plugins

 * Install and activate [Freesoul Deactivate Plugins](https://wordpress.org/plugins/freesoul-deactivate-plugins/)
 * Go to Freesoul Deactivate Plugins => Plugin Manger => Actions => Essential Form
 * Deactivate all the plugins for the actions “Getting secret key during submission”
   and “Form submission”

By using [Freesoul Deactivate Plugins](https://wordpress.org/plugins/freesoul-deactivate-plugins/)
to clean up all the other plugins, the form submission will be faster and without
any conflict with third plugins.

### Demo

You can see [Essential Form](https://wordpress.org/plugins/essential-form/) in action
on my blog post [The Lightest Contact Form Plugin Ever](https://josemortellaro.com/the-lightest-contact-form-plugin-ever/)

You don’t need any demo for the backend, because there are no settings for this 
plugin. Just use the shortcode [essential_form] where you want to add the form, 
and customized as mentioned in the description.

#### I need this plugin to do something custom

If you want to integrate this plugin with other tools or workflows, I offer a custom
development service for WordPress plugin integrations and feature extensions.
 Learn
more about [advanced custom functionality for WordPress](https://josemortellaro.com/advanced-functionality-for-wordpress/).

## Installation

 1. Upload the plugin files to the `/wp-content/plugins/essential-form` directory, 
    or install the plugin through the WordPress plugins screen directly.
 2. Activate the plugin through the ‘Plugins’ screen in WordPress.
 3. Add the shortcode `[essential_form]` to any post, page, or widget where you want
    the contact form to appear.

## FAQ

### Can I add more fields?

No. Essential Form is intentionally minimal. It includes only name, email, message,
and agreement checkbox.

### Does it work with caching plugins?

Yes, it’s compatible with most caching setups because the form token is dynamically
handled.

### Does it support AJAX submissions?

Yes, form submissions use AJAX to send messages without reloading the page.

### Is it GDPR-compliant?

Yes. No data is stored on your server. Everything is handled via email, and the 
agreement checkbox helps you get user consent.

## Reviews

![](https://secure.gravatar.com/avatar/8e4a8c5cac93ffbc34301e51e4c6540a953573af6bdd53a6d33daebf72ada301?
s=60&d=retro&r=g)

### 󠀁[Wonderful](https://wordpress.org/support/topic/wonderful-1108/)󠁿

 [myjosephines](https://profiles.wordpress.org/myjosephines/) January 30, 2026 1
reply

Simple and no bloat, love it

![](https://secure.gravatar.com/avatar/7130a18795b70d383df56c4c94551286a153a0ade74158a65ab1f34a3b0d24f2?
s=60&d=retro&r=g)

### 󠀁[Can’t send mail](https://wordpress.org/support/topic/cant-send-mail-3/)󠁿

 [eleventyseventy](https://profiles.wordpress.org/eleventyseventy/) January 24, 
2026

Sorry, I removed the text as I should have posted in “Support Threads” instead

![](https://secure.gravatar.com/avatar/307766eb54bca9c928d5a7514b55c3316a6128618c0fc07943ed3ebfa1972a50?
s=60&d=retro&r=g)

### 󠀁[Perfect, Sometimes](https://wordpress.org/support/topic/perfect-sometimes/)󠁿

 [sybydesign](https://profiles.wordpress.org/sybydesign/) January 13, 2026

Like you say, love it or hate it. This is perfect for one of my sites, and I love
it. Not enough form for my other site, but that’s OK. It works great for what it
works for. Thank you for making this light easy form plugin.

![](https://secure.gravatar.com/avatar/1d0d6bd27d03348b9b53a873d4fa66fe894ff94b2212f091d4754167961ad86e?
s=60&d=retro&r=g)

### 󠀁[Excellent](https://wordpress.org/support/topic/excellent-13954/)󠁿

 [N.g](https://profiles.wordpress.org/loralora/) June 10, 2025 1 reply

Very fast, thank you!

![](https://secure.gravatar.com/avatar/8e05289a0fdb71bccf1671bc67e6da474f3457b08c922fd860ff253bb5d32073?
s=60&d=retro&r=g)

### 󠀁[Simply best contact form for wordpress](https://wordpress.org/support/topic/simply-best-contact-form-for-wordpress/)󠁿

 [mcdeth](https://profiles.wordpress.org/mcdeth/) April 20, 2025 1 reply

Got rid of contact form and wpform, no more bloats. Hands down to Jose

![](https://secure.gravatar.com/avatar/8c753b92f15f47835aee8922cf945ef47bfcb816bb081d727c86684d09df469a?
s=60&d=retro&r=g)

### 󠀁[I want to believe, but it’s not there yet](https://wordpress.org/support/topic/i-want-to-believe-but-its-not-there-yet/)󠁿

 [Gabriel R.](https://profiles.wordpress.org/gabrielradic/) March 26, 2025 1 reply

It should use the theme style, but it’s not, fields and buttons are tiny and HTML
defaulty looking.

 [ Read all 19 reviews ](https://wordpress.org/support/plugin/essential-form/reviews/)

## Contributors & Developers

“Essential Form – The lightest plugin for contact forms, ultra lightweight and no
spam” is open source software. The following people have contributed to this plugin.

Contributors

 *   [ Jose Mortellaro ](https://profiles.wordpress.org/giuse/)

“Essential Form – The lightest plugin for contact forms, ultra lightweight and no
spam” has been translated into 6 locales. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/essential-form/contributors)
for their contributions.

[Translate “Essential Form – The lightest plugin for contact forms, ultra lightweight and no spam” into your language.](https://translate.wordpress.org/projects/wp-plugins/essential-form)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/essential-form/), check
out the [SVN repository](https://plugins.svn.wordpress.org/essential-form/), or 
subscribe to the [development log](https://plugins.trac.wordpress.org/log/essential-form/)
by [RSS](https://plugins.trac.wordpress.org/log/essential-form/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.2

 * Added: filter hook ‘essential_form_include_source_in_email’ to include or not
   the source page info in the email.
 * Fix: mispelled words in the text before the main message.

#### 1.0.1

 * Added: filter hook ‘essential_form_submit_style’ to customize the submit button
   style.
 * Fix: privacy policy page not taken on multisites.

#### 1.0.0

 * Added: label of the checkbox agreement is now clickable.

#### 0.0.9

 * Fix: line spaces removed in the email message.

#### 0.0.8

 * Added: translated in French. Many thanks to @queertimes for the translation.
 * Fixed: translation files not loaded from the WordPress language directory.

#### 0.0.7

 * Added: translated in German. Many thanks to @cutu234 for the translation.
 * Added: possibility to remove only the agreement checkbox without removing the
   text by using the filter add_filter( ‘essential_form_agreement_checkbox_required’,‘
   __return_empty_string’ );

#### 0.0.6

 * Added: possibility to remove the agreement checkbox by adding define( ‘ESSENTIAL_FORM_ASK_FOR_AGREEMENT’,
   false ); in wp-config.php

#### 0.0.5

 * Improved: increased the expiration time of the random key

#### 0.0.4

 * Added: integration with Freesoul Deactivate Plugins to unload all the other plugins
   during the form submission

#### 0.0.3

 * Fix: warning on activation

#### 0.0.2

 * Added: allowed link in the privacy aggreement chcekbox
 * Translated in Italian

#### 0.0.1

 * Initial release

## Meta

 *  Version **1.0.2**
 *  Last updated **4 months ago**
 *  Active installations **500+**
 *  WordPress version ** 4.6 or higher **
 *  Tested up to **6.9.4**
 *  PHP version ** 7.2 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/essential-form/), [Greek](https://el.wordpress.org/plugins/essential-form/),
   [Italian](https://it.wordpress.org/plugins/essential-form/), [Russian](https://ru.wordpress.org/plugins/essential-form/),
   [Spanish (Chile)](https://cl.wordpress.org/plugins/essential-form/), [Spanish (Spain)](https://es.wordpress.org/plugins/essential-form/),
   and [Ukrainian](https://uk.wordpress.org/plugins/essential-form/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/essential-form)
 * Tags
 * [anti-spam](https://srd.wordpress.org/plugins/tags/anti-spam/)[contact form](https://srd.wordpress.org/plugins/tags/contact-form/)
   [email](https://srd.wordpress.org/plugins/tags/email/)[light](https://srd.wordpress.org/plugins/tags/light/)
 *  [Advanced View](https://srd.wordpress.org/plugins/essential-form/advanced/)

## Ratings

 4.9 out of 5 stars.

 *  [  18 5-star reviews     ](https://wordpress.org/support/plugin/essential-form/reviews/?filter=5)
 *  [  1 4-star review     ](https://wordpress.org/support/plugin/essential-form/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/essential-form/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/essential-form/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/essential-form/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/essential-form/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/essential-form/reviews/)

## Contributors

 *   [ Jose Mortellaro ](https://profiles.wordpress.org/giuse/)

## Support

Issues resolved in last two months:

     0 out of 2

 [View support forum](https://wordpress.org/support/plugin/essential-form/)