WP Manifestindependent plugin directory
manifest / integrations / wp-graphql-gravity-forms

WPGraphQL for Gravity Forms WP Registry grade D+. High-severity findings · 3 findingsWP RegistryHigh-severity findings · 3 findingsOpen the reportD+ #2 in Integrations & APIs

GraphQL API for interacting with Gravity Forms.

★ 177stars
5.3krelease downloads
≈280active sites
109kcomposer installs
v0.13.4latest · 8mo ago

Install

Download wp-graphql-gravity-forms.zip From the v0.13.4 release on GitHub, Feb 14, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/axewp/wp-graphql-gravity-forms/releases/download/v0.13.4/wp-graphql-gravity-forms.zip

On Packagist as harness-software/wp-graphql-gravity-forms:

composer require harness-software/wp-graphql-gravity-forms
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

alt text

WPGraphQL for Gravity Forms

A WordPress plugin that adds WPGraphQL support for Gravity Forms.


Packagist License Packagist Version GitHub commits since latest release (by SemVer) GitHub forks GitHub Repo stars

Overview

The WPGraphQL for Gravity Forms plugin is a powerful extension for WPGraphQL that provides a comprehensive suite of features that allows developers to interact with Gravity Forms via GraphQL.

This plugin enhances the developer experience by offering a GraphQL schema tailored for Gravity Forms. The schema provides improved type safety, prevents over-fetching, and makes it easier to interact with your forms and entries than (and even provides functionality not available in) Gravity Form's traditional PHP and REST APIs.

WPGraphQL for Gravity Forms is an essential tool for those leveraging decoupled and headless WordPress architectures. Whether you're using WordPress as a data source for your headless application, integrating Gravity Forms data into an external service, or building custom, interactive form experiences, this plugin offers improved developer experience and features to make your frontend code more robust. It's designed to be a versatile tool, capable of handling any decoupled project from simple form submissions to complex, form-driven applications scalable at an enterprise level.

System Requirements

Quick Install

  1. Install & activate WPGraphQL.
  2. Install & activate Gravity Forms and any supported addons.
  3. Download the wp-graphql-gravity-forms.zip file from the latest release upload it to your WordPress install, and activate the plugin.

[!IMPORTANT]

Make sure you are downloading the wp-graphql-gravity-forms.zip file from the releases page, not the Source code (zip) file nor a clone of the repository.

If you wish to use the source code, you will need to run composer install inside the plugin folder to install the required dependencies.

With Composer

composer require harness-software/wp-graphql-gravity-forms

Updating and Versioning

As we work towards a 1.0 Release, we will need to introduce numerous breaking changes. We will do our best to group multiple breaking changes together in a single release, to make it easier on developers to keep their projects up-to-date.

Until we hit v1.0, we're using a modified version of Semantic Versioning

v0.x: "Major" releases. These releases introduce new features, and may contain breaking changes to either the PHP API or the GraphQL schema. v0.x.y: "Minor" releases. These releases introduce new features and enhancements and address bugs. They do not contain breaking changes. v0.x.y.z: "Patch" releases. These releases are reserved for addressing issue with the previous release only.

Development and Support

Development of WPGraphQL for Gravity Forms is provided by AxePress Development. Community contributions are welcome and encouraged.

Basic support is provided for free, both in this repo and in WPGraphQL's official Discord.

Priority support and custom development are available to our Sponsors.

Supported Features

  • Querying forms and entries.
  • Submitting forms.
  • Updating entries and draft entries.
  • Deleting entries and draft entries.
  • Triggering builds with WPGatsby and Jamstack Deployments

Future Feature Enhancements

View all Feature Requests

Documentation

Recipes

Sponsors

SafetyHQ (previously Harness Software)

Releases

Newest 25 of 60 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v0.13.4 latest
Feb 14, 2026 8mo ago
wp-graphql-gravity-forms.zip
1,081
Jan 22, 2026 9mo ago
wp-graphql-gravity-forms.zip +1 asset
246
wp-graphql-gravity-forms.zip173
schema.graphql73
Jun 18, 2025 1 year ago
wp-graphql-gravity-forms.zip +1 asset
1,724
wp-graphql-gravity-forms.zip941
schema.graphql783
Jun 7, 2025 1 year ago
wp-graphql-gravity-forms.zip +1 asset
111
wp-graphql-gravity-forms.zip87
schema.graphql24
Aug 2, 2024 2 years ago
wp-graphql-gravity-forms.zip +1 asset
1,919
wp-graphql-gravity-forms.zip909
schema.graphql1,010
Jun 16, 2024 2 years ago
wp-graphql-gravity-forms.zip +1 asset
446
wp-graphql-gravity-forms.zip278
schema.graphql168
May 12, 2024 2 years ago
wp-graphql-gravity-forms.zip +1 asset
415
wp-graphql-gravity-forms.zip219
schema.graphql196
Apr 7, 2024 2 years ago
wp-graphql-gravity-forms.zip +1 asset
381
wp-graphql-gravity-forms.zip221
schema.graphql160
Feb 4, 2024 2 years ago
wp-graphql-gravity-forms.zip +1 asset
672
wp-graphql-gravity-forms.zip286
schema.graphql386
Sep 30, 2023 3 years ago
wp-graphql-gravity-forms.zip +1 asset
1,278
wp-graphql-gravity-forms.zip329
schema.graphql949
Sep 17, 2023 3 years ago
wp-graphql-gravity-forms.zip +1 asset
222
wp-graphql-gravity-forms.zip35
schema.graphql187
Jun 7, 2023 3 years ago
wp-graphql-gravity-forms.zip +1 asset
748
wp-graphql-gravity-forms.zip126
schema.graphql622
May 3, 2023 3 years ago
wp-graphql-gravity-forms.zip +1 asset
403
wp-graphql-gravity-forms.zip65
schema.graphql338
Feb 13, 2023 3 years ago
wp-graphql-gravity-forms.zip +1 asset
387
wp-graphql-gravity-forms.zip100
schema.graphql287
Feb 10, 2023 3 years ago
wp-graphql-gravity-forms.zip +1 asset
118
wp-graphql-gravity-forms.zip39
schema.graphql79
Dec 21, 2022 3 years ago
wp-graphql-gravity-forms.zip +1 asset
348
wp-graphql-gravity-forms.zip85
schema.graphql263
Dec 2, 2022 3 years ago
wp-graphql-gravity-forms.zip +1 asset
208
wp-graphql-gravity-forms.zip54
schema.graphql154
Oct 31, 2022 3 years ago
wp-graphql-gravity-forms.zip +1 asset
240
wp-graphql-gravity-forms.zip52
schema.graphql188
Oct 21, 2022 4 years ago
wp-graphql-gravity-forms.zip +1 asset
96
wp-graphql-gravity-forms.zip22
schema.graphql74
Oct 6, 2022 4 years ago
wp-graphql-gravity-forms.zip +1 asset
99
wp-graphql-gravity-forms.zip34
schema.graphql65
Sep 22, 2022 4 years ago
wp-graphql-gravity-forms.zip +1 asset
138
wp-graphql-gravity-forms.zip33
schema.graphql105
Sep 20, 2022 4 years ago
wp-graphql-gravity-forms.zip +1 asset
59
wp-graphql-gravity-forms.zip12
schema.graphql47
Aug 12, 2022 4 years ago
wp-graphql-gravity-forms.zip +1 asset
237
wp-graphql-gravity-forms.zip66
schema.graphql171
Jul 15, 2022 4 years ago
wp-graphql-gravity-forms.zip +1 asset
166
wp-graphql-gravity-forms.zip49
schema.graphql117
Jun 25, 2022 4 years ago
wp-graphql-gravity-forms.zip +1 asset
155
wp-graphql-gravity-forms.zip37
schema.graphql118
All releases on GitHub →

Active-site estimate ≈280 comes from the median of recent superseded releases. Method.

D+ grade

Security

WPGraphQL for Gravity Forms 0.13.4 · audited by WP Registry

High-severity findings.

2 high 1 medium
Audited release
0.13.4
Findings
3
Worst severity
high
Content hash
b88b2c20d90f0d4b6688a7f8…

Findings

  • high updateGfEntry broken authorization allows rewriting guest (and own) entries

    auth_bypass

    The mutation is denied only when the user lacks gravityforms_edit_entries AND the entry has a non-empty created_by AND the current user is not that user. PHP empty('0'), empty(0), empty(null) and empty('') are all true, and Gravity Forms stores anonymous created_by as NULL/0/'0'. Result: any unauthenticated caller who enumerates sequential entry database IDs can GFAPI::update_entry on every guest submission — field values (including administrative fields; no visibility check), status (active/spam/trash), isRead/isStarred, date_created, IP, source_url — and GFFormsModel::create_post() is invoked on every update. shouldValidate defaults to true in code but the client can send shouldValidate:false. Gravity Forms' own REST PUT /entries requires gravityforms_edit_entries. Subscribers can also rewrite their own entries, which GF does not allow from the front end. Reads of other users' entries remain gated by SubmittedEntry::is_private (strict ===), so this is write-IDOR, not list-IDOR.

    src/Mutation/UpdateEntry.php:106-112

    Recommendation

    Require gravityforms_edit_entries (or a documented, filterable cap) for updateGfEntry. Do not treat empty/zero created_by as authorization. If 'edit own entry' is intentional, require a logged-in user, compare with absint on both sides, and still forbid status/createdById/post updates and administrative field writes without the GF cap.

  • high Unauthenticated GraphQL form queries leak notifications, quiz keys, and admin-only config

    information_disclosure

    Form::is_private() only hides forms with requireLogin from logged-out users. Every other form — including inactive and trashed ones queried via gfForms(where:{status:TRASHED}) or gfForm(id:) — returns the full admin object: notifications.to/bcc/from/replyTo/message/subject and routing.email (staff inboxes and internal templates), postCreation content/title templates and default post author, personalData retention/export policy, calculationFormula, HTML field content, and, when Gravity Forms Quiz is active, each choice's isCorrect/weight plus answerExplanation. None of that is required to render a headless form. There is no get_restricted_fields() and no capability check on FormNotification. Observable: a single unauthenticated GraphQL POST to /graphql with { gfForms { nodes { notifications { to bcc from message routing { email } } formFields { ... on QuizField { choices { isCorrect } } } } } } returns admin notification addresses and the quiz answer key.

    src/Model/Form.php:73-78

    Recommendation

    Restrict notifications, personalData, postCreation, calculationFormula, quiz isCorrect/weight/answerExplanation, and similarly admin-only fields to gravityforms_edit_forms (or view_settings). Filter administrative-visibility formFields out of public connections. Do not list INACTIVE/TRASHED forms without a GF capability. Keep title/description/visible fields/confirmations public for headless rendering.

  • medium submitGfForm and updateGfDraftEntry let unauthenticated clients forge created_by and IP

    missing_capability

    SubmitForm::prepare_entry_data copies entryMeta.createdById, dateCreatedGmt, ip, sourceUrl, and userAgent into GFAPI::update_entry_property with no capability check. UpdateDraftEntry does the same for created_by (unlike updateGfEntry, which at least gates createdById behind gravityforms_edit_entries). An unauthenticated SubmitGfForm can attribute the entry to any wp_users.ID, spoof the IP (bypassing GF per-IP entry limits), and backdate date_created. Forged created_by also interacts with updateGfEntry: a subscriber who stamps createdById as themselves can later rewrite that entry as 'owner'. sourceUrl is not sanitized on submit.

    src/Mutation/SubmitForm.php:188-216

    Recommendation

    Ignore createdById unless the current user has gravityforms_edit_entries. Always set created_by from get_current_user_id() on public submits. Do not accept client IP/dateCreated unless that same cap is present; otherwise use GFFormsModel::get_ip() and current time. Sanitize sourceUrl with esc_url_raw.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.