Ninja Forms – The Contact Form Builder That Grows With You

ninja-forms · by kstover · wordpress.org ↗ · SVN ↗
Active installs
600k+
Current version
3.15.3
Added
2011-12-21
Last updated
2026-09-07 (13d ago)
First seen by beacon
5mo ago
Total downloads

Statistics

2024-06-17 → 2026-09-10 · 816 days
Downloads today
10,869
7-day total 259,061
Week over week
▼ -4%
vs prior 7 days
30-day trend
declining
▲ +0% MoM
Abandonment
○○○○○
healthy
Downloads/day Linear trend
209k157k105k52k02024-062024-102025-032025-072025-122026-04
173k130k87k43k02026-062026-062026-072026-072026-082026-08
173k130k87k43k02026-082026-082026-082026-082026-092026-09

Active versions

3.15other3.14
3.15 · 45.1%other · 23.3%3.14 · 17.4%3.6 · 7.4%3.8 · 6.8%

Ratings

5★
1,097
4★
67
3★
41
2★
40
1★
150

Support: 11/15 resolved

Alerts (0)

No open alerts.

Show 4 resolved alerts
High code_scan_match Resolved · code_scan_fp_class_vendor_cdn_enqueue 2026-05-05 11:22:51 (4mo ago)
Slugninja-forms
Finding count3
Findings
PatternKindFileLineSnippetConfidenceDetails
remote_enqueuebuiltinincludes/Display/Render.php848wp_enqueue_script('nf-google-recaptcha', 'https://www.google.com/recaptcha/api.js?hl=' . $recaptcha_lang . '&onload=nfRenderRecaptcha&render=explicit', array( 'jquery', 'nf-front-end-deps'medium
Url
https://www.google.com/recaptcha/api.js?hl=
Url host
www.google.com
remote_enqueuebuiltinincludes/Display/Render.php856wp_enqueue_script('nf-hcaptcha', 'https://js.hcaptcha.com/1/api.js?render=explicit', array( 'jquery', 'nf-front-end-deps' ), null, TRUE );medium
Url
https://js.hcaptcha.com/1/api.js?render=explicit
Url host
js.hcaptcha.com
remote_enqueuebuiltinincludes/Actions/Recaptcha.php306wp_enqueue_script('nf-google-recaptcha', 'https://www.google.com/recaptcha/api.js?hl=' . $recaptcha_lang . '&render=' . $this->site_key, array('jquery'), '3.0', true);medium
Url
https://www.google.com/recaptcha/api.js?hl=
Url host
www.google.com
Resolved sha856dd54305420a550a8a0aee0f62a442431e1a80
View raw JSON
{
    "slug": "ninja-forms",
    "finding_count": 3,
    "findings": [
        {
            "pattern": "remote_enqueue",
            "kind": "builtin",
            "file": "includes/Display/Render.php",
            "line": 848,
            "snippet": "wp_enqueue_script('nf-google-recaptcha', 'https://www.google.com/recaptcha/api.js?hl=' . $recaptcha_lang . '&onload=nfRenderRecaptcha&render=explicit', array( 'jquery', 'nf-front-end-deps'",
            "confidence": "medium",
            "details": {
                "url": "https://www.google.com/recaptcha/api.js?hl=",
                "url_host": "www.google.com"
            }
        },
        {
            "pattern": "remote_enqueue",
            "kind": "builtin",
            "file": "includes/Display/Render.php",
            "line": 856,
            "snippet": "wp_enqueue_script('nf-hcaptcha', 'https://js.hcaptcha.com/1/api.js?render=explicit', array( 'jquery', 'nf-front-end-deps' ), null, TRUE );",
            "confidence": "medium",
            "details": {
                "url": "https://js.hcaptcha.com/1/api.js?render=explicit",
                "url_host": "js.hcaptcha.com"
            }
        },
        {
            "pattern": "remote_enqueue",
            "kind": "builtin",
            "file": "includes/Actions/Recaptcha.php",
            "line": 306,
            "snippet": "wp_enqueue_script('nf-google-recaptcha', 'https://www.google.com/recaptcha/api.js?hl=' . $recaptcha_lang . '&render=' . $this->site_key, array('jquery'), '3.0', true);",
            "confidence": "medium",
            "details": {
                "url": "https://www.google.com/recaptcha/api.js?hl=",
                "url_host": "www.google.com"
            }
        }
    ],
    "resolved_sha": "856dd54305420a550a8a0aee0f62a442431e1a80"
}
High committer_younger_than_plugin Resolved · benign_company_employee 2026-04-27 10:32:30 (4mo ago)
Slugninja-forms
Committer slugericwindhamsd
Committer display nameericwindhamsd
Committer employer
Committer member since2017-12-12
Committer first commit2018-07-31 16:12:04
Committer commit count3
Plugin listed authorkstover
Earliest plugin commit2015-03-03 18:25:22
Plugin age at join days1,245
Committer age at join days231
Active installs600,000
View raw JSON
{
    "slug": "ninja-forms",
    "committer_slug": "ericwindhamsd",
    "committer_display_name": "ericwindhamsd",
    "committer_employer": null,
    "committer_member_since": "2017-12-12",
    "committer_first_commit": "2018-07-31 16:12:04",
    "committer_commit_count": 3,
    "plugin_listed_author": "kstover",
    "earliest_plugin_commit": "2015-03-03 18:25:22",
    "plugin_age_at_join_days": 1245,
    "committer_age_at_join_days": 231,
    "active_installs": 600000
}
Critical code_pattern Resolved · no_longer_matches 2026-04-24 17:01:47 (4mo ago)
Slugninja-forms
Patternunserialize_after_remote_call
Kindbuiltin
Version3.14.2
Hit count5
First hit
File
includes/Admin/Menus/ImportExport.php
Line
128
Snippet
L111: $import = file_get_contents( $_FILES[ 'nf_import_fields' ][ 'tmp_name' ] ); → L128: $return = unserialize($serializedValue,['allowed_classes'=>false]);
Explanationa remote HTTP fetch (`wp_remote_*`/`curl_exec`/`file_get_contents`) is followed by `@unserialize` within the same file — classic PHP Object Injection C2 gadget used by EP and most WP supply-chain backdoors. The error-suppressed form is the tell: legit code wants to know when deserialize fails; attackers suppress so malformed gadgets do not leak.
View raw JSON
{
    "slug": "ninja-forms",
    "pattern": "unserialize_after_remote_call",
    "kind": "builtin",
    "version": "3.14.2",
    "hit_count": 5,
    "first_hit": {
        "file": "includes/Admin/Menus/ImportExport.php",
        "line": 128,
        "snippet": "L111: $import = file_get_contents( $_FILES[ 'nf_import_fields' ][ 'tmp_name' ] );  \u2192  L128: $return = unserialize($serializedValue,['allowed_classes'=>false]);"
    },
    "explanation": "a remote HTTP fetch (`wp_remote_*`/`curl_exec`/`file_get_contents`) is followed by `@unserialize` within the same file \u2014 classic PHP Object Injection C2 gadget used by EP and most WP supply-chain backdoors. The error-suppressed form is the tell: legit code wants to know when deserialize fails; attackers suppress so malformed gadgets do not leak."
}
Critical code_scan_delta Resolved · fp_edd_updater_library 2026-04-24 15:47:34 (4mo ago)
Slugninja-forms
Previous version3.14.2
Current version3.14.2
New findings
PatternKindFileLineSnippetConfidence
unserialize_after_remote_callbuiltinincludes/Admin/Menus/ImportExport.php128L111: $import = file_get_contents( $_FILES[ 'nf_import_fields' ][ 'tmp_name' ] ); → L128: $return = unserialize($serializedValue,['allowed_classes'=>false]);high
unserialize_after_remote_callbuiltinincludes/Integrations/EDD/EDD_SL_Plugin_Updater.php426L419: $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $ve → L426: $request->sections = maybe_unserialize( $request->sections );high
unserialize_after_remote_callbuiltinincludes/Integrations/EDD/EDD_SL_Plugin_Updater.php432L419: $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $ve → L432: $request->banners = maybe_unserialize( $request->banners );high
unserialize_after_remote_callbuiltinincludes/Integrations/EDD/EDD_SL_Plugin_Updater.php436L419: $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $ve → L436: $request->icons = maybe_unserialize( $request->icons );high
unserialize_after_remote_callbuiltinincludes/Integrations/EDD/EDD_SL_Plugin_Updater.php494L486: $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $v → L494: $version_info->sections = maybe_unserialize( $version_info->sections );high
New finding count5
View raw JSON
{
    "slug": "ninja-forms",
    "previous_version": "3.14.2",
    "current_version": "3.14.2",
    "new_findings": [
        {
            "pattern": "unserialize_after_remote_call",
            "kind": "builtin",
            "file": "includes/Admin/Menus/ImportExport.php",
            "line": 128,
            "snippet": "L111: $import = file_get_contents( $_FILES[ 'nf_import_fields' ][ 'tmp_name' ] );  \u2192  L128: $return = unserialize($serializedValue,['allowed_classes'=>false]);",
            "confidence": "high"
        },
        {
            "pattern": "unserialize_after_remote_call",
            "kind": "builtin",
            "file": "includes/Integrations/EDD/EDD_SL_Plugin_Updater.php",
            "line": 426,
            "snippet": "L419: $request    = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $ve  \u2192  L426: $request->sections = maybe_unserialize( $request->sections );",
            "confidence": "high"
        },
        {
            "pattern": "unserialize_after_remote_call",
            "kind": "builtin",
            "file": "includes/Integrations/EDD/EDD_SL_Plugin_Updater.php",
            "line": 432,
            "snippet": "L419: $request    = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $ve  \u2192  L432: $request->banners = maybe_unserialize( $request->banners );",
            "confidence": "high"
        },
        {
            "pattern": "unserialize_after_remote_call",
            "kind": "builtin",
            "file": "includes/Integrations/EDD/EDD_SL_Plugin_Updater.php",
            "line": 436,
            "snippet": "L419: $request    = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $ve  \u2192  L436: $request->icons = maybe_unserialize( $request->icons );",
            "confidence": "high"
        },
        {
            "pattern": "unserialize_after_remote_call",
            "kind": "builtin",
            "file": "includes/Integrations/EDD/EDD_SL_Plugin_Updater.php",
            "line": 494,
            "snippet": "L486: $request    = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $v  \u2192  L494: $version_info->sections = maybe_unserialize( $version_info->sections );",
            "confidence": "high"
        }
    ],
    "new_finding_count": 5
}

SVN committers (7)

Accounts with actual commit access to ninja-forms on plugins.svn.wordpress.org, reconstructed from svn log. This is the list that matters for ownership changes — not the readme contributors.

Committer Member since Commits First commit Latest commit
Kevin Stover 2010-07-27 440 2011-12-21 · r478290 2021-06-07 · r2543837
krmoorhouse 2017-03-06 155 2017-12-13 · r1786386 2026-01-07 · r3434576
Nicolas Figueira 2013-07-16 116 2021-08-17 · r2583990 2026-09-07 · r3685242
Kyle B. Johnson 2015-01-09 23 2016-07-26 · r1460918 2016-11-21 · r1537910
James Laws 2010-03-04 16 2011-12-28 · r481638 2013-10-25 · r793630
ericwindhamsd 2017-12-12 3 2018-07-31 · r1917743 2018-08-31 · r1933883
plugin-master 2007-03-09 1 2011-12-20 · r478275 2011-12-20 · r478275

Readme contributors (12)

Names the plugin's readme declares as contributors. A soft signal — anyone can be listed. The SVN access column is the ground-truth cross-reference: does this contributor actually commit code?

Contributor Member since SVN access Status
Kevin Stover 2010-07-27 440 commits Active
krmoorhouse 2017-03-06 155 commits Active
Nicolas Figueira 2013-07-16 116 commits Active
Kyle B. Johnson 2015-01-09 23 commits Active
James Laws 2010-03-04 16 commits Active
ericwindhamsd 2017-12-12 3 commits Active
Justin McElhaney 2016-08-29 Active
klhall1987 2014-12-03 Active
Matt Pritchett 2011-06-14 Active
Stuart Sequeira 2011-12-22 Active
wpninjasllc 2015-02-05 Active
Zach Skaggs 2014-09-16 Active

Versions (46 most recent)

Version Released Download
3.15.3 zip
3.15.2 zip
3.15.0 zip
3.15.1 zip
3.14.11 zip
3.14.12 zip
3.14.9 zip
3.14.10 zip
3.14.8 zip
3.14.7 zip
3.14.6 zip
3.14.5 2026-05-26 · 3mo ago zip
3.14.4 2026-05-12 · 4mo ago zip
3.14.3 2026-04-29 · 4mo ago zip
3.14.2 2026-03-23 · 6mo ago zip
3.14.1 2026-02-05 · 7mo ago zip
3.14.0 2026-01-26 · 7mo ago zip
3.13.4 2026-01-15 · 8mo ago zip
3.12.2.1 2026-01-07 · 8mo ago zip
3.11.1.1 2026-01-07 · 8mo ago zip
3.10.4.1 2026-01-07 · 8mo ago zip
3.9.2.1 2026-01-07 · 8mo ago zip
3.8.25.1 2026-01-07 · 8mo ago zip
3.7.3.1 2026-01-07 · 8mo ago zip
3.6.34.1 2026-01-07 · 8mo ago zip
3.5.8.5 2026-01-07 · 8mo ago zip
3.4.34.3 2026-01-07 · 8mo ago zip
3.13.3 2025-12-09 · 9mo ago zip
3.13.2 2025-12-02 · 9mo ago zip
3.13.1 2025-11-12 · 10mo ago zip
3.13.0 2025-11-06 · 10mo ago zip
3.12.2 2025-10-13 · 11mo ago zip
3.11.1 2025-08-21 · 1y ago zip
3.10.4 2025-07-07 · 1y ago zip
3.9.2 2025-03-12 · 1y ago zip
3.8.25 2025-01-27 · 1y ago zip
3.7.3 2024-02-12 · 2y ago zip
3.6.34 2023-10-11 · 2y ago zip
3.2.28 2022-06-15 · 4y ago zip
3.5.8.4 2022-06-15 · 4y ago zip
3.3.21.4 2022-06-15 · 4y ago zip
3.4.34.2 2022-06-15 · 4y ago zip
3.1.10 2022-06-15 · 4y ago zip
3.0.34.2 2022-06-15 · 4y ago zip
3.0 2016-09-06 · 10y ago zip
2.9.58 2016-08-30 · 10y ago zip