=== FormForge ===
Contributors: avakodeforge
Donate link: https://avakode.com
Tags: forms, form-builder, ai, conditional-logic, contact-form
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.2.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Drag & drop form builder with conditional logic, webhooks, file uploads, anti-spam, and CSV export. Unlimited forms, 24 field types.

== Description ==

**Form Forge** is a fast, modern form builder. Build unlimited forms with a drag-and-drop builder, 24 core field types, conditional logic, generic webhooks, file uploads, anti-spam, and submissions with one-click CSV export — all in the free plugin, no form caps. Start from 168 ready-made templates or the included shortcode. An optional, separately sold Form Forge Pro add-on adds AI form generation, payments, multi-step forms and branded integrations.

= Free =
* Unlimited forms (no form caps)
* 24 core field types (text, email, number, select, checkbox, radio, file upload, etc.)
* Drag-and-drop form builder
* Conditional logic
* Generic webhooks (Zapier, Make, n8n, custom APIs)
* File uploads
* Anti-spam (honeypot, time-trap, and Google reCAPTCHA v3 with your own keys)
* Address field with map and geocoding (your own Google or Yandex key)
* Appointment picker with locally generated time slots
* Submissions dashboard + CSV export
* 168 ready-made templates (contact, registration, survey, booking, etc.)
* Shortcode embedding ([formforge id="X"])
* Email notifications (admin + autoresponder)
* Fluid single-column layout that fits a phone screen without extra setup
* Import from Contact Form 7, Gravity Forms, WPForms and Ninja Forms

= Form Forge Pro =

Pro is a separate add-on plugin, distributed from https://formforgewp.com and not
included in this download. Everything listed above is part of this plugin and
works without it.

* AI form generation (describe → done)
* Multi-step forms with progress bar
* Conversational mode (Typeform-like one-question-at-a-time)
* Stripe payments
* Mailchimp / HubSpot / Google Sheets integrations
* Telegram / WhatsApp / Slack / Discord notifications
* Live Google Calendar availability and event creation
* Submission analytics and abandonment recovery
* Priority email support with an active Pro licence

Part of the **Forge Suite** — bundle includes Lang Forge, Rank Forge, Field Forge.

== External services ==

This is the Avakode channel build of Form Forge. Out of the box it contacts nothing: activating the plugin does not contact any server and does not schedule anything that would. Beside the services you switch on yourself by entering a key or a URL of your own (the first four sections below), it carries the client of Avakode's Forge API, and every request to that API, listed under "Avakode Forge API", starts from something you do on an administrator's screen or from a visitor's action on a form, as each item says. The plugin has no analytics, no telemetry and no usage reporting of its own.

= Google reCAPTCHA v3 =

*What it is for.* Scoring form submissions so automated ones can be rejected without asking a human to solve a puzzle. The plugin's own honeypot and time-trap run locally and need no service; reCAPTCHA is the optional third layer.

*What is sent.* From the visitor's browser to Google: the page the form is on and whatever signals reCAPTCHA itself collects, under Google's own terms. From your server to Google on submit: your reCAPTCHA secret key, the one-time token the widget produced, and the visitor's IP address. No form field values are sent — not the name, not the email, not the message.

*What is received.* A success flag and a score between 0 and 1.

*When.* The script loads on pages that render a form, and the verification request happens on submit — but only while both the site key and the secret key are filled in under Form Forge → Settings → Anti-spam. With either one blank, no script is loaded, no request is made, and submissions are simply not scored.

*Which endpoints.* `https://www.google.com/recaptcha/api.js` (browser) and `https://www.google.com/recaptcha/api/siteverify` (server).

*Terms of the provider.* [Terms](https://policies.google.com/terms), [privacy](https://policies.google.com/privacy).

= Google Maps JavaScript API =

*What it is for.* Drawing the map and offering address suggestions in an address field, when you pick Google as the map provider.

*What is sent.* From the visitor's browser to Google: your Google Maps API key and whatever the visitor types into the address box or clicks on the map. Google's terms and privacy policy govern that traffic; your server sends Google nothing.

*What is received.* Map tiles and address suggestions.

*When.* Only on pages rendering a form that has an address field, and only while a Google Maps API key is filled in under Form Forge → Settings → Maps with Google chosen as the provider. With no key, no script is loaded and the field falls back to a plain text address input.

*Which endpoint.* `https://maps.googleapis.com/maps/api/js`.

*Terms of the provider.* [Terms](https://cloud.google.com/maps-platform/terms), [privacy](https://policies.google.com/privacy).

= Yandex Maps and Yandex Geocoder =

*What it is for.* The same address field, when you pick Yandex as the map provider instead. Yandex Maps draws the map in the browser; the Geocoder turns a typed address into coordinates on the server.

*What is sent.* From the visitor's browser to Yandex: your Yandex Maps JavaScript API key (and your Suggest key, if you filled one in) and what the visitor types or clicks. From your server to the Geocoder: **the address the visitor typed into the form**, or the coordinates they clicked, together with your Geocoder API key. The plugin does not send the visitor's IP address, name, email or any other form field to Yandex.

*What is received.* Map tiles and suggestions in the browser; a single resolved address with its coordinates on the server.

*When.* Only on pages rendering a form that has an address field, and only while Yandex is chosen as the provider under Form Forge → Settings → Maps and the matching key is filled in. The geocoding request additionally requires a Geocoder API key and is rate-limited to 60 lookups per minute per IP address. With no key, no script is loaded, no request is made, and the field falls back to a plain text address input.

*Which endpoints.* `https://api-maps.yandex.ru/2.1/` (browser) and `https://geocode-maps.yandex.ru/v1` (server).

*Terms of the provider.* [Terms](https://yandex.com/legal/maps_termsofuse/), [privacy](https://yandex.com/legal/confidential/).

= Webhooks to an address you choose =

*What it is for.* Handing a submission to another system of yours — Zapier, Make, n8n, a CRM, your own endpoint — the moment it arrives.

*What is sent.* A JSON document with the form id and title, the submission id, a timestamp, and the submitted field values, plus any HTTP headers you configured. This is your own data going to your own destination; no third party of ours is involved and nothing passes through our servers.

*What is received.* Only the HTTP status code, which is written to the plugin's webhook log.

*When.* Only on submission of a form whose **Webhook URL** you filled in, in that form's settings. Empty by default on every form. The URL is validated and checked against an SSRF policy before anything is sent, so a webhook cannot be pointed at your own private network.

*Which endpoint.* Whichever URL you entered. The plugin ships no default and contacts no address of its own.

*Terms of the provider.* Whatever applies to the service you chose.

= Avakode Forge API =

The requests below go to `https://api.avakode.com`, Avakode's own server, and are covered by Avakode's [terms](https://avakode.com/terms) and [privacy policy](https://avakode.com/privacy). Each is an ordinary WordPress HTTP request, so besides what is listed it carries WordPress's standard User-Agent header, and the server sees the network address of your site. Every request that carries the licence key also carries the product name (`formforge`) and your site's address, and the integration calls also a short-lived site token. The first three items are made whether or not a licence is linked; the rest need an Avakode licence linked to the site and send nothing without one.

* **PDF of one submission — `/integrations/pdf/generate`.** Only when an administrator presses the PDF button beside one submission on the Submissions screen. Sends the form's title and id, the submission id, your site's name and address, every submitted value of that submission with its field label and any payment details recorded with it, and the licence key if one is linked (empty otherwise). The PDF comes back for download; if the call fails or returns nothing, the PDF is made on your own server instead, and the bulk PDF export is always made on your own server and sends nothing.
* **Run diagnostics — `/health`.** Only when an administrator presses Run diagnostics on the Forge Suite dashboard. A GET with no body: it sends no licence key and no site address, only the User-Agent `ForgeSuite/health-check`, and reads whether the API answers.
* **Satisfaction card — `/feedback`.** Only when an administrator answers the 0–10 satisfaction question shown on the Forge Suite dashboard and submits it; dismissing the card sends nothing. Sends the score, the comment you typed (if any), the product name, the plugin version and the WordPress version: no licence key, no e-mail address and no site address.

**With an Avakode licence linked to the site:**

* **Licence, trial and AI — `/licenses/validate`, `/public/trial/activate`, `/ai/process`.** When an administrator starts the sign-in described below, this plugin first asks `/licenses/validate` for a site token, and sends the licence key, the product name and your site's address. `/public/trial/activate` and `/ai/process` (the AI form generator and the analysis of submissions) are made by Form Forge Pro, which uses this same client; its readme says when and what it sends. When Form Forge Pro asks, api.avakode.com passes the content of the request on to OpenAI, through Cloudflare AI Gateway, to produce the answer; your licence key is not passed on. OpenAI: [terms](https://openai.com/policies/terms-of-use/), [privacy](https://openai.com/policies/privacy-policy/). Cloudflare AI Gateway: [terms](https://www.cloudflare.com/website-terms/), [privacy](https://www.cloudflare.com/privacypolicy/).
* **Google (Sheets and Calendar, through Avakode) — `/integrations/google/auth/init`, `/integrations/google/auth`, `/integrations/google/status`, `/integrations/google/disconnect`, `/integrations/sheets/list`, `/integrations/sheets/append`, `/integrations/sheets/picker-token`, `/integrations/calendar/list`, `/integrations/calendar/freebusy`, `/integrations/calendar/event`.** Connect Google Account, under Settings → Google, sends the licence key, your site's address, the site token and the address to return to to `/integrations/google/auth/init`; your browser is then sent to `/integrations/google/auth` on Avakode to sign in with Google and approve. Opening that screen asks `/integrations/google/status` whether the connection is made, and Disconnect calls `/integrations/google/disconnect`. When you pick a calendar in a form's settings, `/integrations/calendar/list` returns the names of your calendars, and when a visitor picks a day on a booking form, `/integrations/calendar/freebusy` sends the calendar ID, the time window, the slot length, the working hours and the time zone: nothing about the visitor. The spreadsheet calls (`/integrations/sheets/list`, `/integrations/sheets/append`, `/integrations/sheets/picker-token`) and the creation of a calendar event (`/integrations/calendar/event`) are made by Form Forge Pro, which uses this same client; its readme says when and what it sends. Google: [terms](https://policies.google.com/terms), [privacy](https://policies.google.com/privacy).
* **Mailchimp — `/integrations/mailchimp/connect`, `/integrations/mailchimp/disconnect`, `/integrations/mailchimp/status`, `/integrations/mailchimp/lists`, `/integrations/mailchimp/subscribe`.** Under Settings → Integrations, Connect sends the Mailchimp API key you paste, once, and Avakode keeps it on its server, not in your WordPress database; Disconnecting asks Avakode to forget it; the status check runs when an administrator opens that screen. The list of audiences and the subscription of a submitter (`/integrations/mailchimp/lists`, `/integrations/mailchimp/subscribe`) are made by Form Forge Pro, which uses this same client; its readme says when and what it sends. Mailchimp: [terms](https://mailchimp.com/legal/terms/), [privacy](https://mailchimp.com/legal/privacy/).
* **HubSpot — `/integrations/hubspot/connect`, `/integrations/hubspot/disconnect`, `/integrations/hubspot/status`, `/integrations/hubspot/pipelines`, `/integrations/hubspot/properties`, `/integrations/hubspot/submit`.** Under Settings → Integrations, Disconnecting asks Avakode to drop the HubSpot connection, and the status check runs when an administrator opens that screen. Connecting, reading the pipelines and the contact properties, and sending a submission to HubSpot (`/integrations/hubspot/connect`, `/integrations/hubspot/pipelines`, `/integrations/hubspot/properties`, `/integrations/hubspot/submit`) are made by Form Forge Pro, which uses this same client; its readme says when and what it sends. HubSpot: [terms](https://legal.hubspot.com/terms-of-service), [privacy](https://legal.hubspot.com/privacy-policy).
* **WhatsApp — `/notifications/whatsapp/register-token`, `/notifications/whatsapp/status`.** Nothing in this plugin calls them: both are made by Form Forge Pro, which uses this same client, and its readme says when and what it sends. WhatsApp: [terms](https://www.whatsapp.com/legal/business-terms), [privacy](https://www.whatsapp.com/legal/privacy-policy).

= Services reached only through the separate Pro add-on =

The Stripe payment field, the Google Sheets and Google Calendar integrations and the other integrations of Form Forge Pro belong to Form Forge Pro, a separate plugin that is not included in this download. Their code ships in the add-on, and the add-on's own readme lists the requests they make under External services. This plugin loads nothing from Stripe and nothing from Google Sheets or Google Calendar on its own screens. Stripe: [terms](https://stripe.com/legal), [privacy](https://stripe.com/privacy). Google: [terms](https://policies.google.com/terms), [privacy](https://policies.google.com/privacy).

== Installation ==

1. Upload `formforge` to `/wp-content/plugins/`, or install via Plugins → Add New.
2. Activate the plugin.
3. Go to **Form Forge → New form**, or open **Form Forge → Forms** and pick one.
4. Drop the shortcode (e.g. `[formforge id="1"]`) anywhere on a page or post.

== Frequently Asked Questions ==

= Can I import forms from Gravity Forms / WPForms? =

Yes. **Form Forge → Migration** detects Contact Form 7, Gravity Forms, WPForms and Ninja Forms if they are installed and imports their form fields. What comes across besides the fields depends on the source: Contact Form 7 does not store submissions at all, and WPForms keeps entries only in its own Pro version. The Migration screen names what it can take from each source before you run it.

= Are webhook URLs validated for security? =

Yes — Form Forge rejects webhook URLs that resolve to private IP ranges (RFC1918), loopback, or cloud-metadata endpoints. The check uses `is_safe_url()` (per-plugin) and `Forge_Net` (shared SSRF helper).

= How does anti-spam work? =

Free tier ships honeypot + time-trap (a form submitted in under 2s is rejected) and Google reCAPTCHA v3 with your own site and secret keys. No third-party anti-spam service is bundled.

= Does Form Forge track abandoned (unsubmitted) forms? =

Abandonment tracking is a Pro feature; the free plugin does not collect any abandoned-form data. When enabled in Pro, it defaults to metadata-only: it records which fields a visitor interacted with (for funnel analytics) but stores no field values, no IP address, and no user agent. Storing the partial values a visitor typed, along with their IP and user agent, is a separate per-form opt-in ("capture values") that is OFF by default. If you enable value capture, disclose it in your site's privacy policy.

== Screenshots ==

1. Form builder (drag-drop)
2. AI form generator (Pro)
3. Conditional rules applied at submit (configured via import or AI)
4. Submissions list + CSV export
5. Notification configuration

== Changelog ==

= 1.2.1 =
* Deleting the last Forge plugin or add-on on a site now removes everything Forge stored on the site, on every site of a network: the statistics settings and the install ID, the shared job queue with its scheduled events, and the other settings and caches the Forge plugins share. While another Forge product stays, only this plugin's own share goes.
* A Forge plugin deleted a moment earlier in the same bulk delete is no longer counted as still installed, and a Forge plugin for WooCommerce no longer keeps the shared data on the site for good.
* Needs Form Forge Pro 1.3.0 or newer if you run the add-on, as before.

= 1.2.0 =
* **This release needs Form Forge Pro 1.3.0 or newer if you run the add-on.** The licence layer is the add-on's alone now: the free plugin no longer loads any licence code (the wordpress.org package has none at all), and its Settings screen asks the add-on, not a licence key, whether Mailchimp, HubSpot and Google can be connected. An older add-on is kept from starting. A notice, shown only to a user who can update plugins, names the version it needs and links to the downloads page of your Avakode account.
* Fixed: the form editor's preview ended in an error, because the preview request called a check that had been renamed. It now runs the same checks as saving a form.
* Fixed: with an out-of-date Form Forge Pro add-on installed, saving a form no longer turns its Pro fields into text or switches its Pro settings off, so the add-on's update finds them as they were. The cards of the form editor that ask for the add-on say to update it, with a link to the download, instead of offering it for sale.
* Wording: the Maps (Address Picker) card no longer says the map field needs Pro, and the integration cards drop the repeated “Requires Pro” sentences. The Mailchimp and HubSpot notes say the key is stored on the Avakode server. The Post Submission and User Registration cards of the form editor show the invitation to Form Forge Pro and none of the add-on's inputs when the add-on is not installed.
* With the add-on active, an AI generation error that needs your Avakode account opens the Form Forge Pro settings instead of a dashboard screen that this plugin does not have.
* The changed lines are translated in all 15 shipped languages.

= 1.1.0 =
* New: a “Send a test submission” button in the form editor. It sends one sample submission through the saved form by the same code a visitor's submission goes through (validation, the saved record, the notification email), so you can check a form without filling it in. The record is marked Test; the notification email starts with “[Test]” and says it is a test; any email field gets your own address, so the auto-reply comes to you. reCAPTCHA is not asked for, and nothing goes on to webhooks, integrations, post or user actions or analytics.
* When a form cannot be tested, the button says why in plain words: a required file upload, a payment field, a required field whose pattern or length limit no sample value can meet, or an admin page opened at a different address from the site's.
* Test submissions are left out of the counts, the exports and the analytics, and out of the REST submissions list unless it is asked for status=test.
* The Forge Suite dashboard leaves test submissions out of its submissions figure and its recent list.
* A star rating must be a whole number from 1 up to the field's number of stars. A rating of 0 counts as “not rated”: an optional field accepts it and a required field asks for a rating.
* Fixed: every Form Forge admin screen raised a PHP warning, and the builder preview linked a stylesheet the free plugin no longer ships. The conversational layout's stylesheet now comes from the Pro add-on.
* The new lines are translated in all 15 shipped languages.

= 1.0.41 =
* Deleting the plugin leaves the job queue the Forge plugins share in place while another Forge plugin or add-on is still on the site. The check used to miss add-ons, and Rank Forge installed from wordpress.org, so the queue could be dropped while a neighbour still had jobs in it.
* Deleting the plugin now also removes the site's Avakode account binding and the hourly statistics event when it is the last Forge plugin on the site. With another Forge plugin or add-on left, both stay for it.
* The dashboard's “Run diagnostics” request to api.avakode.com/health no longer carries your site's address: it identifies itself as ForgeSuite/health-check instead of using WordPress's default User-Agent, which includes the address.
* The Forge Suite screen lists Renew Forge, shows Guard Forge and Velocity Forge as available on wordpress.org, and carries the other products' current plans and taglines.
* The readme's External services section lists every request the plugin can make and what goes with it, and says that an AI request is passed on to OpenAI through Cloudflare AI Gateway, with the licence key held back.

= 1.0.40 =
* Internal clean-up in the documentation of a shared helper; no change in behaviour.

= 1.0.39 =
* **This release needs Form Forge Pro 1.2.0 or newer if you run the add-on.** The free plugin no longer checks licences at all: the Pro features — the Stripe payment field, Google Sheets, WhatsApp, HubSpot, conversational forms, analytics and AI generation — now carry their own code and their own licence check inside the add-on. An older add-on is switched off whole rather than left half-working.
* The free plugin no longer loads anything from Google or Stripe on its own screens; those scripts come with the add-on.
* Request input is sanitised where it is read, and admin output is escaped.

= 1.0.38 =
* **This release needs FormForge Pro 1.1.0 or newer if you run the add-on.** An older add-on is switched off whole rather than left running, because beside this core it would be present and wrong rather than absent. Until you update it Post Submission, User Registration, multi-step and conversational forms, payment, repeater and calculation fields, AI form generation and the analytics screens are unavailable. Forms already saved and the submissions already collected are untouched, an admin notice names both versions and what stopped, and installing the current add-on brings all of it back.
* Deleting the last Forge product on a site now clears the job queue the Forge plugins share — its table, its two scheduled events and its version marker. While any other Forge product is still installed, deleting this one leaves the queue exactly as it is, because the pending jobs in those rows are that product's too.
* Fixed: with a Pro licence linked through Avakode, Settings → Google showed the Avakode connection card where Connect Google Account belongs. The card now offers the Google connection and names the step that failed.
* The Conditional Logic section no longer shows a PRO badge — conditional logic is part of the free plugin.
* Admin screens load their scripts and styles through WordPress instead of inline tags, and file writes go through the WordPress filesystem API.
* The Forge Suite dashboard links Guard Forge, Velocity Forge and Flow Forge to their sites: guardforge.app, velocityforge.app and flowforgewp.app.

= 1.0.37 =
* Suite banner: the eleven products and the three-step set discount are up to date.

= 1.0.36 =
* Forge Suite dashboard: results are the first screen — each tool's own results with window and completeness, detected and confirmed apart, a Needs-attention filter and a local CSV export for administrators.
* Set discounts in the Suite banner follow the three-step ladder (2 tools 15%, 3 tools 25%, 4 or more 35%).
* Translations refreshed for all catalogues.

= 1.0.35 =
* Licensing no longer depends on a third-party SDK. The plugin asks avakode.com whether this site is licensed and caches the answer for a day; if the check cannot be completed — a network hiccup, a timeout, our own error — your paid features stay on. Only a clear “this licence is not active” turns them off.
* Deactivating from the Forge Suite dashboard now releases the site slot directly, instead of the three-step fallback the old SDK needed when a licence had been cancelled server-side.
* Smaller package and one less admin surface: the SDK’s own menu, opt-in screen and promotional notices are gone.

= 1.0.34 =
* Forge Suite dashboard: names of the builder-rail tools (Clearway, Profit, Inclusive Forge) no longer truncate next to the “Not installed” badge.

= 1.0.33 =
* The Forge Suite dashboard now shows the whole seven-tool line-up from the product registry — Clearway Forge, Profit Forge and Inclusive Forge join the four WordPress tools — counts active tools against seven, and its cross-sell banner points at the Forge Builder on avakode.com (one checkout, set discount up to 45%) instead of the retired Freemius bundle.

= 1.0.32 =
* The shared inline assets (docs link, feedback widget) are now emitted as a literal nowdoc block instead of being assembled in an output buffer — the same hardening Lang Forge 1.0.31 and Rank Forge 1.1.3 received.
* The Bundle License card no longer shows the Connect result twice; translations synced.

= 1.0.31 =
* Google reCAPTCHA v3 is no longer behind a licence. It runs on your own reCAPTCHA keys and talks directly to Google, so gating it was withholding built-in functionality.
* The address field with map and geocoding is likewise unrestricted — it uses your own Google or Yandex key and never touches our servers.
* The appointment picker now generates its time slots on any install. Overlaying real busy times from a connected Google Calendar still needs the separate Pro add-on, which holds the OAuth application.
* Removed licence checks that could never fail, on conditional logic, file uploads and webhooks. Those have been free for some time, but the code still asked and the admin screens still showed a PRO badge.
* Availability of add-on features is now decided by whether the add-on is installed, not by a licence call.

= 1.0.30 =
* Security hardening: all dynamic output is now escaped late at the output site with the context-appropriate function (esc_html/esc_attr/esc_url, esc_html__ for translated strings used as format strings, and wp_kses for trusted pre-built admin/field markup). No behavioural changes.

= 1.0.29 =
* Pro-only features (Post Submission, User Registration, multi-step forms, conversational mode, repeater and calculation fields) are now provided entirely by the Form Forge Pro add-on and are no longer bundled in the free plugin — the free download contains only fully-functional free features.
* Removed the leftover form-count limit scaffolding; the free plugin has always supported unlimited forms.

= 1.0.28 =
* Uninstall cleanup now removes transients only under the plugin's own unambiguous prefix, so unrelated transients belonging to other plugins are never deleted.

= 1.0.24 =
* New: Support menu item that opens the Avakode support dashboard.
* New: Opt-in anonymous usage analytics (OFF by default) — see Third-Party Services.
* New: Contextual, dismissible Pro feature tips on the plugin dashboard (Free users only).


= 1.0.21 =
* Hardened inline admin script output (field-mapping editors).
* WordPress.org compliance and code-quality improvements.

= 1.0.20 =
* Fix: AI form generation now shows a clear reason when it can't run (license/credits needed, or the service is unreachable) instead of a generic "Unknown error".

= 1.0.19 =
* Security: the Google Account connection now starts via a one-time token, so the license key is never placed in a URL.

= 1.0.18 =
* WordPress.org compliance and licensing hardening.
* Pro entitlement is now resolved by the Form Forge Pro add-on; the free plugin bundles no licensing SDK.
* The Google integration SDK now loads only when the Pro Google Sheets feature is active.
* readme metadata cleanup.

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.2.1 =
Deleting the last Forge plugin or add-on now removes everything Forge stored on the site, on every site of a network. Needs Form Forge Pro 1.3.0 or newer if you run the add-on, as before.

= 1.2.0 =
Needs Form Forge Pro 1.3.0 or newer if you run the add-on: licensing is the add-on's alone now, and an older add-on is kept from starting until you update it. Download it from your Avakode dashboard if Dashboard → Updates does not list it. Saved forms and submissions are untouched.

= 1.1.0 =
Adds a “Send a test submission” button to the form editor, and holds a star rating to a whole number from 1 to the field's stars (0 means not rated). If you run Form Forge Pro, it must be 1.2.0 or newer.

= 1.0.41 =
Deleting the plugin leaves the job queue shared by the Forge plugins alone while another one is still installed. If you run Form Forge Pro, it must be 1.2.0 or newer.

= 1.0.40 =
No change in behaviour. If you run Form Forge Pro, it must be 1.2.0 or newer.

= 1.0.39 =
Needs Form Forge Pro 1.2.0 or newer if you run the add-on — an older add-on is switched off whole, so payment, Google Sheets, conversational forms, analytics and AI generation stop until you update it. Saved forms and submissions are untouched.

= 1.0.38 =
Needs FormForge Pro 1.1.0 or newer if you run the add-on — an older add-on is switched off whole, so Post Submission, User Registration, multi-step forms, payment and calculation fields, AI generation and analytics stop until you update it. Saved forms and submissions are untouched.

= 1.0.24 =
Adds a Support menu, optional anonymous analytics (off by default), and dashboard Pro tips.


= 1.0.21 =
Security hardening and WordPress.org compliance improvements.

= 1.0.18 =
Licensing and WordPress.org compliance improvements.

= 1.0.0 =
Initial release.
