Changelogs

Follow the improvements and fixes in each product release.

Core Forms

Core Forms is a WordPress form plugin built for performance and simplicity. It creates contact forms, registration forms, and surveys with minimal overhead and clean code output. This…

Explore Product

Release History

Permalink

4.2.7

Patch: Polls moved under the Core Forms admin menu

“Core Polls” no longer registers its own top-level menu item. Polls now live as two submenu entries (Polls + Add Poll) under the Core Forms menu, so the admin sidebar reads as one product instead of two side-by-side icons.

  • PollAdmin::add_admin_menu() switched from add_menu_page to two add_submenu_page calls under the core-forms parent.
  • admin_menu hooked at priority 20 so Admin::menu() (default priority 10) has already registered the parent slug before Polls tries to attach.
  • New parent_file filter keeps the Core Forms top-level item highlighted (and selects the right submenu sub-item — Polls list vs Add Poll) while editing, creating, or listing polls. Without it, the WP post-type screens would blank out the sidebar’s active state.

Full Changelog:

Permalink

4.2.6

Patch: preview button on the per-form template chooser

The Preview button that landed on the Add Form gallery in 4.2.4 now also appears on the template picker that opens inside the per-form Fields tab (the React visual builder).

  • Each non-blank card carries a “Preview” pill in its top-right corner. Hovering or focusing the card reveals it; clicking it opens the same iframe modal the Add Form gallery uses. event.stopPropagation stops it from also firing the parent “select template” click.
  • The preview modal moved from inline page markup into Admin::render_template_preview_modal, hooked on admin_footer for every Core Forms admin screen. Click handling is delegated — any element with data-cf-preview="{slug}" (anywhere on a Core Forms page) fires it. window.CoreFormsAdmin.openTemplatePreview(id, label) is exposed for programmatic triggers.
  • Localized cfFormTemplates entries now carry a preview_url so the React builder (or any other JS) doesn’t have to re-derive the admin-ajax URL.

Full Changelog:

Permalink

4.2.5

Patch: template preview + Create Comment surface + default actions

Three fixes / one-line connections that were missing in 4.2.4.

  • Template preview iframe now actually loads. The wp_ajax_cf_template_preview action was being registered on the Admin class constructor, which is gated behind ! DOING_AJAX — so the AJAX handler was never wired during AJAX requests. WP’s admin-ajax fell through to its default “0” output and the iframe showed a blank page. Registered the handler in the AJAX branch separately with a lazy-constructed instance.

  • Create Comment action now appears in the Actions tab picker. The action class registered fine via cf_available_form_actions, but the WordPress category in tab-actions.php didn’t list create_comment in its types array — so the grouped grid skipped it. Now slotted in next to create_user/create_post with an admin-comments dashicon.

  • Every starter template lands with a default Email action wired. Previously a brand-new form had no actions at all — submissions saved to the inbox but never emailed anyone. process_create_form() now appends a default “Email the admin” action when the template doesn’t ship its own. Templates that DO ship actions (product_review → Create Comment, payment templates → providers) keep their wiring untouched.

  • Product review + Lightweight comment templates ship with Create Comment pre-wired. Field mappings — NAME → comment author, EMAIL → author email, REVIEW/COMMENT → content, RATING → rating meta — plus a default Email notification. Open the form, pick a target post on the action, save — done.

Full Changelog:

Permalink

4.2.4

Star ratings, comments, and a much richer admin

This release adds a proper review/comment workflow (star rating field + a Create Comment action that writes to WordPress comments with aggregate rating meta), five new starter templates with a sandboxed preview iframe on the Add Form gallery, a column-layout container with responsive breakpoints, real-time preview sync in code mode, and a bunch of admin clarity fixes.

Star rating + comments

  • New .cf-rating field type — radio-based 1–5 star picker with CSS-mask icons inlined as data URIs (works whether or not the form theme is loaded). Keyboard-reachable with per-star screen-reader labels. Reverse-ordered radios + the adjacent-sibling cascade fill stars to the left of hover/check.
  • New Create Comment / Review action — posts the submission as a WordPress comment against a target post (numeric id, [field] reference, or auto-detected via referer URL). When a rating field is configured, stores the value as comment meta rating and recomputes the target post’s cf_rating_average + cf_rating_count post meta — Schema-rich-snippet plugins read these keys by convention. Status flips (pending → approved) trigger a recompute via transition_comment_status.
  • Code-mode toolbar gains Insert star rating + Insert columns row buttons.

Five new starter templates

| Template | Use | |—|—| | Product review | Star rating + headline + comment, paired with the Create Comment action | | Lightweight comment form | AJAX-submitted drop-in for the native WP comment form | | NPS / satisfaction survey | 0–10 scale + reason + optional email | | Bug report | Severity, browser, steps, attachment — two-column layout | | Product waitlist | Email + company + source, two-column layout |

Template preview iframe

Every non-blank template card on the Add Form gallery now has a Preview button that opens a modal iframe loading the markup via wp_ajax_cf_template_preview. Capability-gated to edit_forms, loads the same forms.css + form-theme.css a real form would use, submit-disabled so nothing fires.

Columns layout container (.cf-row)

CSS helper driven by inline CSS variables — --cf-cols, --cf-cols-t, --cf-cols-m, --cf-gap — sets desktop / tablet (≤1024px) / mobile (≤640px) column counts up to 6 each. Variable chaining means setting only the desktop count cascades to tablet and mobile. Code-mode inserter prompts for the three numbers and drops the wrapper in.

Real-time preview sync

Code-mode textarea now pushes its current markup to the preview iframe on every keystroke (180ms debounce) via postMessage. The iframe replaces #cf-preview-root innerHTML in place. Origin- and form-id-scoped so a cross-form iframe can’t be poisoned.

Form editor preview honours the global stylesheet toggles

The admin asset enqueue now conditionally loads forms.css and form-theme.css (with cf_form_theme_tokens overrides) when you’re on a form-edit screen, so the visual builder canvas and code-mode iframe both render with the same stack the front-end uses. Previously the editor preview was unstyled even with the theme on globally.

Settings clarity

  • Skeleton CSS vs Default form theme — both options renamed with explicit descriptions of what they load. Skeleton (forms.css, ~1.5 KB, structural only — labels, error states, button alignment, the new column-row helper). Theme (form-theme.css, opinionated visual layer — colors, radii, focus rings, typography). Choices are “Load / Skip”.
  • After Submission — clearer two-way choice (“Show success message” / “Redirect to a URL”). Contextual help appears with the selection. The redundant “Redirect to a page” option was removed; the URL field already covers that case.
  • Per-form Settings tab now opens with only the first accordion (Submissions) — previously two opened simultaneously.
  • “Add-ons” → “Extras” in Settings + Messages section labels.

Action merge: CreatePost + CreateArticle

The richer CreateArticle (title/content/excerpt mapping, taxonomies, ACF, featured image, author lookup) now claims the canonical create_post slug and the label “Create Post / Article / CPT”. Forms saved with the old create_article type are forwarded to the merged handler at runtime — no migration.

Bug fixes / hardening

  • vendor/autoload.php require is now file_exists()-guarded so a partial extraction during an in-place plugin upgrade can’t fatal the site. Clear admin notice surfaces on the next page load if vendor/ is genuinely missing.
  • Template preview wp_die() calls now pass HTTP codes via the response arg instead of as the title. Unauthorized hits actually return 403/400/404.
  • CreateComment recompute only fires when a valid in-range rating actually landed as comment meta; out-of-range values skip the recompute.

Full Changelog:

Permalink

4.2.3

Adds a CF_DEMO_MODE wp-config constant guard so the public demo build at core-forms.com/demo can be safely handed out via token-gated R2 — the plugin self-disables anywhere except playground.wordpress.net subdomains. No-op for production sites.

Permalink

4.2.2

Patch release. Hot-fix for the headless embed.

What was wrong

The bundled `embed.js` (served from `/wp-json/core-forms/v1/embed.js`) was rendering `result.data.message` directly into the success card. But the form processor returns it as an object — `{ type: ‘success’, text: ‘…’ }` — not a string. JavaScript stringified the object to literal `[object Object]`, so every successful headless submission ended with that string in the success card. Same shape bug in the error path.

What’s fixed

Added a `pickText()` helper that: – Plucks `.text` when the message is an object. – Returns the value when it’s already a string (for forward-compat). – Falls back to a sensible default (`Thanks!` / `Submission failed.`) when the field is missing.

Applied to both success and error code paths.

Who’s affected

Anyone running the drop-in embed widget (the `<div data-cf-form=”…”><script src=”…/embed.js”>` pattern). Native-fetch integrations were always fine since they consume the JSON response themselves and know the shape.

The fix is live on the WP REST endpoint as soon as the plugin is updated — no rebuild required on the embed side.

Permalink

4.2.1

Patch release.

Per-form spam view routes correctly

`?page=core-forms&view=spam&form_id=X&tab=submissions` now opens the form-edit screen on the Submissions tab in spam-filter mode instead of falling through to the all-forms list. The router branched on `view=edit`; it now branches on the presence of `form_id` so any view value (`spam` / `all` / `inbox`) routes correctly.

Submissions list — visual cleanup

Dropped the 3px blue / red inset left border on new and spam rows and the muted grey text on spam rows. Status is communicated entirely by the badge in the STATUS column (New / Read / Replied / Spam) — much cleaner against WP’s native striped table.

Dashicon alignment fix for WP < 7.0

Buttons that pair a dashicon with text (Documentation, Refresh, Open, copy buttons in the Headless tab) had the icon glyph sitting ~2px above the text baseline on WordPress 6.9.x and earlier. WP 7.0 normalized this natively; for older WP a high-specificity rule scoped to Core Forms admin screens applies `vertical-align: middle`, line-height/font-size resets, and `:has(.dashicons)` inline-flex centering to match.

Permalink

4.2.0

Stable release. Consolidates eleven betas (`v4.2.0-beta` through `v4.2.0-beta11`) into one shipping version.

WhatsApp, three ways

Three new actions cover the full range of WhatsApp delivery models — pick whichever fits your existing stack.

  • WhatsApp Cloud API action. Send template messages and free-form text (24-hour window) via Meta’s Graph API. Free tier covers 1,000 conversations per month. Credentials live globally under Settings → WhatsApp Cloud API with per-action override; a “Test connection” button reports the verified business name + quality rating.
  • Twilio WhatsApp action. For shops already on Twilio — reuses your Account SID / Auth Token, posts to the `whatsapp:` channel, supports approved Content Template SIDs.
  • Click-to-WhatsApp redirect. Generates a `wa.me` deep link with the submission pre-filled into the chat draft, used as the post-submit redirect.

Both Cloud API and Twilio sends log through Email Logs. The `cf_form_redirect_url` filter now fires on every successful submission and receives the `Submission` as a 4th argument.

Contact Form 7 → Core Forms migration tool

New page under Core Forms → Import that scans every `wpcf7_contact_form` post, converts shortcode markup to plain HTML (14 tag types covered), maps the CF7 mail template to a Send Email action, and carries `messages` overrides across as `cf_message*` post meta. Per-row preview lets you sanity-check before committing. Gravity Forms, WPForms, Fluent Forms, Ninja Forms, Formidable previewed as “Coming soon” cards.

Per-form analytics dashboard

New Analytics tab on every form-edit screen, powered by the existing `cf/v1/analytics/*` REST API: – One “Funnel” postbox with views, starts, submissions, spam. – SVG daily-activity chart with all three series overlaid. – Field interactions panel (where users focus/fill). – Top sources panel (UTM attribution with referrer-domain fallback). – Auto-generated recommendations — high spam rate, low completion, drop-off hotspots. – Date-range presets (7d / 30d / 90d / 1y) + custom from/to.

Form versioning + change history

The `core-form` post type now declares `’supports’ => […, ‘revisions’, …]`. `cf_settings`, `_cf_hidden_columns`, and every `cf_message` override persist alongside each revision. Settings-only or messages-only saves still create a revision (we force `wp_save_post_revision_check_for_changes` to `false` for `core-form`). New Revisions* tab lists each snapshot with author, timestamp, and a diff signal — restore drops back into the Core Forms admin with a flash and copies meta back automatically.

Security hardening — 14 audit findings fixed

  • CSRF on by default (existing installs preserved via 4.2.0 migration).
  • Submission mass-assignment closed via markup-derived allowlist.
  • Headless API key header-only; new CORS allowlist textarea.
  • Workflow `/actions/test` bumped to `manage_options`.
  • Webhook SSRF guard: `cf_is_safe_outbound_url()` rejects loopback / RFC1918 / link-local / IPv6 ULA / non-HTTP schemes.
  • Email header CRLF injection closed via `cf_esc_email_header()`.
  • Custom CSS `</style>` escape closed.
  • `process_save_form` inline cap+nonce check.
  • Two ghost `wp_ajax_*` handlers removed.
  • Polls trust `REMOTE_ADDR` only.
  • Draft saves rate-limited (30/IP+form/min).
  • File upload blocklist extended (html/htm/xhtml/xml/xsl/xslt).
  • Honeypot returns opaque success.

Admin redesign — WordPress-native everything

  • New plugin icon (Font Awesome Pro `pen-field`) across admin menu, block inserter, and editor placeholder.
  • Analytics + Revisions tabs use native WP chrome end-to-end — `.postbox`, `.wp-list-table widefat striped`, `.tablenav top`, `.row-actions`, native `.notice` variants.
  • Button styling unified — removed the `.button-primary` glow override that broke consistency.
  • Fullscreen / Typeform-style display mode promoted to its own top-level card on Settings.
  • WhatsApp actions surfaced in Add Action picker under new “Messaging & SMS” category.
  • Per-form Template picker unified with Add-New-Form gallery — all 12 templates available everywhere.

Headless `[CF_REFERRER_URL]` fix

Cross-origin Referer headers are stripped to the bare origin by browsers. The submit endpoint now reads `_cf_page_url` from the JSON body and substitutes it into `$_SERVER[‘HTTP_REFERER’]` for the duration of `Forms::process()`. Bundled embed.js forwards `window.location.href` automatically.

Build pipeline

Production builds run through `bash build.sh` which executes `composer install –no-dev` so dev-only autoload entries can’t leak. 148 unit tests pass; PHPStan clean against regenerated baseline; production zip 741KB.

Upgrade

Download the attached zip and upload via Plugins → Add New → Upload. Existing data, settings, and forms are preserved. The 4.2.0 migration runs automatically on first admin pageload after upgrade.

Permalink

4.1.0

Core Forms 4.1.0 — stable

Five months of beta cooking, condensed into one release: payments on submission, headless / cross-origin REST, six new payment-ready templates, a full admin redesign, and a bootstrap hardening that protects the site during plugin upgrades.

Payments on submission

Five providers, all bundled, all webhook-verified.

  • Stripe Checkout — hosted Checkout Sessions, test + live keys side-by-side
  • PayPal — Orders API, fixed or donor-driven amounts via [field] references
  • Razorpay — UPI / cards / wallets via Razorpay Checkout
  • Polar.sh — Standard Webhooks signature verification
  • FluentCart — hosted-checkout handoff. Free + Pro, one-time + subscriptions. Address fields prefilled into FluentCart’s checkout (and its tax engine). Order paid → submission paid via fluent_cart/order_paid_done; refunds round-trip.

New submission statuses (pending_payment, paid, payment_failed, refunded), atomic CAS on the paid-state transition so concurrent webhook retries can’t double-fire the action loop, return-URL signing with 2-hour expiry to stop replay.

Headless / cross-origin REST

External sites — Astro, Next.js, Vue, Svelte, plain HTML — can now render and submit Core Forms over REST. Same validation, captcha, action loop and payment redirect machinery runs server-side; the headless site just submits JSON.

  • GET /wp-json/core-forms/v1/forms/{id} — schema + rendered HTML
  • POST /wp-json/core-forms/v1/forms/{id}/submit — runs the full pipeline
  • GET /wp-json/core-forms/v1/embed.js — drop-in vanilla JS widget
  • Single API key per site (Settings → Headless), per-form opt-in toggle
  • Snippets in three flavours: widget, native fetch, cURL — each pre-filled with your actual submit URL + active key
  • New “Keeping the API key private” guidance card with copy-paste server-side proxy templates for Cloudflare Workers / Pages Functions, Next.js App Router, and Astro server endpoints

Six new payment-ready starting points

Each ships with a provider preselected so the form lands one configuration step away from working:

| Template | Provider | Pricing | |—|—|—| | One-time payment | Stripe | Fixed $19 | | Donation | PayPal | Donor-entered via [AMOUNT] | | INR payment | Razorpay | Fixed ₹999 | | FluentCart product | FluentCart | Variation-driven, with address fieldset | | Subscription | FluentCart Pro | Variation-driven, recurring | | Event ticket | Stripe | Tier select drives [TIER] |

Templates registry gained settings and messages callbacks alongside markup. Every starting point — payment and non-payment — now ships with a context-appropriate success message (“Redirecting to PayPal…”, “Booking received…”) instead of the generic “We will be in touch soon.”

Admin redesign

  • Per-form Settings, Messages, Payment, Headless tabs converted to native &lt;details&gt;/&lt;summary&gt; accordions with state badges (rate-limit count, schedule “window set”, honeypot on/off, FluentCart variation price/type/subscription summary, custom CSS/JS indicators, headless On/Off, configured/not-configured per gateway).
  • Per-form Submissions list rebuilt: Inbox / Spam / All view tabs with live counts (no more bouncing to global Spam to triage one form), redesigned table with status badges (New / Read / Replied / Archived / Paid / Pending payment / Refunded / Payment failed / Spam), row stripes for new/spam, per-row actions, relative dates with absolute on hover, varied empty states per view.
  • All Submissions page rebuilt for WordPress 7.0: toolbar split into a filter card (form picker + date range + Filter + Clear) and a search card. Consistent control heights so taller WP 7.0 native dates don’t stagger the row. Side-fix: filter inputs are now in their own GET form so form_id / date_from / date_to actually land in the URL — previous version had them inside the bulk-actions POST form so filtering silently did nothing.
  • WordPress Screen Options dropdown hidden across all Core Forms admin screens.
  • Persistent “Akismet spam protection is active” banner removed from form-edit pages — status info doesn’t belong as a banner on screens unrelated to it.
  • New cf_get_form_submissions / cf_count_form_submissions is_spam argument; new bulk_mark_spam per-form action.

Bootstrap hardening

  • vendor/autoload.php require now guarded with file_exists() so a mid-extraction race during a WordPress in-place plugin upgrade can’t fatal the site. The upgrader replaces the plugin directory non-atomically; a hard require in that window kills every PHP request including wp-login.php. Now falls through cleanly and surfaces an admin notice on the next page load if vendor/ is genuinely missing.

Modernisation

  • Minimum requirements: PHP 8.1, WordPress 6.4
  • Schema\Field and Schema\FormSchema properties typed, declare(strict_types=1)
  • CI matrix runs PHP 8.1 / 8.2 / 8.3
  • prefers-reduced-motion respected throughout; logical-property RTL fixes
  • Fullscreen multi-step forms expose aria-current="step" + a polite live region for step changes

New filters + actions

cf_payments_orchestrator, cf_payment_completed, cf_form_default_settings, cf_form_templates. Full upgrade guide at docs/getting-started/upgrade-to-4.1.md.

Upgrading

Drop-in compatible from 4.0.x. The vendor-autoload guard means in-place WP upgrades from 4.0.x → 4.1.0 won’t fatal even on slow filesystems. Database migrations run automatically on activation / via upgrader_process_complete.

Full Changelog:

Permalink

4.0.3

Dashboard navigation, dashboard chrome, submissions polish, and updated documentation links.

Navigation

  • New shared views/admin-subnav.php — a tab bar (Forms · Add New · Submissions · Settings · Spam) included from every Core Forms dashboard page, with dashicons and an active-tab underline.
  • Old breadcrumb markup hidden via CSS so legacy includes degrade silently.

Page chrome — Form Theme Customizer card style

.cf-page-hero rebuilt as a clean white card matching the Form Theme Customizer: – 1px solid #dcdcde, 8px radius, subtle 0 1px 2px rgba(0,0,0,.04) shadow. – No gradients, no eyebrow pill, no chrome competing with the content. – Heading scales back to 18px / 600 / #1d2327; sub-text 13px / #50575e.

Stat tiles recoloured to the same restrained palette (32×32 icon chip, 18px/600 number, 12px label).

.cf-btn family tightened to native WordPress scale: 7×14 padding, 13px/500, no brand shadow, no lift transform. .cf-btn--secondary uses the standard WP secondary palette so buttons sit comfortably next to native admin chrome.

Submissions

Friendly action labels — new cf_friendly_action_label() helper maps stored WordPress AJAX action keys to human-readable labels: – cf_form_submit → Form Submission – cf_save_draft → Form Draft Saved

Extensible via the cf_action_value_labels filter. Applied in the per-form submissions table and the All Submissions cards.

Strip action from new submissions — action is now in the default cf_ignored_field_names, so future submissions never store the AJAX router key. Existing rows still resolve through the friendly-label map.

Hide column — the Data Management extension grows a non-destructive Hide Column toggle alongside Rename Column and Delete Column. Hidden columns are persisted per-form in _cf_hidden_columns post meta and merged with WordPress’s get_hidden_columns(). Rename and Delete handlers keep that meta in sync.

Documentation links

All in-app docs links now point to gauravtiwari.org/course/core-forms-training/ (the previous /core-forms/ subdirectory was defunct). The /product/core-forms/ landing page is reserved for marketing CTAs only.

Upgrade notes

  • No data or schema migrations.
  • Pure UI / chrome refresh plus opt-in column hiding — fully backwards compatible.
  • Existing submissions that already contain the action field stay intact and now render as friendly labels.
Permalink

4.0.2

Visual refresh — the admin dashboard and the default front-end form theme now share the design language of core-forms.com, with no webfonts loaded anywhere.

Admin design system

New assets/css/design-system.css declares the brand / ink / surface / radius / shadow tokens lifted directly from the marketing site, scoped to Core Forms admin pages so other plugins are untouched.

New components: – .cf-page-hero — gradient page header with eyebrow pill, heading, sub-text, CTA row – .cf-btn family — primary / secondary / ghost in sm / lg sizes, with the marketing-site shadow + lift-on-hover – .cf-stat — KPI tile with brand-tinted icon chip

WordPress chrome inside Core Forms pages picks up the new look: – .wp-list-table, .form-table inputs, .button-primary, .tablenav, .subsubsub, .notice – Brand-blue 4-step focus ring, 8px corner radii, layered shadow scale

Page redesigns

  • Forms overview opens with the hero plus four KPI stat cards (active forms, total submissions, submissions today, caught as spam) before the forms list.
  • Settings gets the same hero treatment with a Documentation CTA.

Default front-end form theme

Rewrote form-theme.css against the same tokens: – Brand-blue submit buttons with lift-on-hover and the marketing-site shadow (0 4px 12px rgba(47,99,245,.25)) – 8px input radii, hover state on inputs, brand-blue focus border with 4-step focus ring – Soft-tint success / error / warning messages with proper border colors – Secondary buttons for multi-step \”back\” – Dashed brand-tinted drop-zone styling for &lt;input type=\"file\"&gt; – Headings get proper letter-spacing and weight scale

No webfonts

  • The admin design system uses the WordPress system stack (-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, …).
  • The front-end form theme sets --cf-font: inherit, so each form picks up the host theme’s font.
  • No fonts.googleapis.com requests anywhere.

Upgrade notes

  • No data or schema migrations.
  • Pure CSS / template chrome refresh — fully backwards compatible.
  • Custom form theme tokens (cf_form_theme_tokens option) keep working unchanged.
Permalink

4.0.1

Polish release on the 4.x line.

Actions tab — clean card redesign

Every configured action is now a single, unified .cf-action-card: – Icon sits inside the header where it belongs (no more orphan icon stranded to the left of the panel). – Header is a real button with aria-expanded; click to toggle, chevron rotates. – Remove action with confirmation; first card opens by default if there’s only one. – Replaces the old dual chrome (PHP ::before blue title bar + JS-wrapped .cf-accordion) with a single source of truth rendered directly by PHP. – Works uniformly across all 28 action types (email, twilio_sms, slack, mailchimp, webhook, notion, airtable, autoresponder, hubspot, etc.).

New template variables for actions

cf_replace_data_variables() now resolves:

Submission source – [CF_REFERRER_URL], [CF_REFERRER_HOST], [CF_REFERRER_PATH] – [CF_POST_ID], [CF_POST_TITLE], [CF_POST_URL] (resolved via url_to_postid() on the referrer)

Logged-in user – [CF_USER_ID], [CF_USER_LOGIN], [CF_USER_EMAIL], [CF_USER_DISPLAY_NAME]

Submission & timing – [CF_SUBMISSION_ID], [CF_DATE], [CF_TIME] (formatted with the site’s date/time format)

Site – [CF_SITE_NAME], [CF_SITE_URL], [CF_ADMIN_EMAIL]

Click-to-insert in the variables reference

The Actions tab → “Available Variables” panel is now four columns (Form Fields, Submission Source, User & Session, Form & Site) with a tooltip on every token.

Click any [TOKEN] to insert it at the cursor of the most recently focused input or textarea inside the Actions tab. Brief green pulse confirms the insert. Works on the per-action help text codes too.

Per-action help lines updated

Email, Emailit and Autoresponder now document the most useful new tokens ([CF_REFERRER_URL], [CF_POST_TITLE], [CF_USER_EMAIL] / [CF_SITE_NAME]).

Upgrade notes

  • No data or schema migrations.
  • Pure UI / template-variable additions — fully backwards-compatible.
  • If a third-party extension still emits the legacy .cf-accordion markup around an action, it will keep rendering as before (no-op transitional CSS rule kept).