{"id":362188,"date":"2026-09-05T09:30:48","date_gmt":"2026-09-05T09:30:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tiger-forms\/"},"modified":"2026-09-05T09:30:22","modified_gmt":"2026-09-05T09:30:22","slug":"tiger-elements-forms","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tiger-elements-forms\/","author":23479998,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.3","stable_tag":"2.0.3","tested":"7.1","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Tiger Elements Forms \u2013 Drag & Drop Contact Form Builder","header_author":"Tiger Elements","header_description":"Standalone drag-and-drop form builder \u2014 multi-step forms, conditional logic, file uploads and email notifications. Works on its own via the [tiger_form] shortcode; adds an Elementor widget automatically when Elementor is active.","assets_banners_color":"383f4a","last_updated":"2026-09-05 09:30:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/tigerelementswp.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.3":{"tag":"2.0.3","author":"tigerelements","date":"2026-09-05 09:30:22","revision":3682314}},"upgrade_notice":{"2.0.2":"<p>Preview now opens the real form, so what you see is what visitors get \u2014 and submitting from it saves and sends nothing. Name and Address fields stack properly on narrow screens. The merge-tag picker lists every field and inserts at your cursor. Bookings has moved to Pro. Safe to update.<\/p>","2.0.1":"<p>The plugin is now Tiger Elements Forms. Also fixes untranslatable strings in the block editor and a broken link in the Elementor styler.<\/p>","1.0.2":"<p>Security hardening: stricter builder permissions, server-authoritative calculations, and CSV export protection.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3682309,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3682309,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3682309,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3682309,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"tiger-elements-forms\/form":{"name":"tiger-elements-forms\/form","title":"Form"}},"tagged_versions":["2.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3682309,"resolution":"1","location":"assets","locale":"","width":2880,"height":1800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3682309,"resolution":"2","location":"assets","locale":"","width":2880,"height":2448},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3682309,"resolution":"3","location":"assets","locale":"","width":2880,"height":1800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3682309,"resolution":"4","location":"assets","locale":"","width":2880,"height":1800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3682309,"resolution":"5","location":"assets","locale":"","width":2880,"height":1800}},"screenshots":{"1":"The drag-and-drop form builder.","2":"A published form on the front end.","3":"The submissions dashboard.","4":"Start from a template, or describe the form you want and have it built for you.","5":"Settings \u2014 mail delivery, anti-spam, storage and GDPR tools."}},"plugin_section":[],"plugin_tags":[130308,358,2253,601,30663],"plugin_category":[42],"plugin_contributors":[262183],"plugin_business_model":[],"class_list":["post-362188","plugin","type-plugin","status-publish","hentry","plugin_tags-conditional-logic","plugin_tags-contact-form","plugin_tags-form-builder","plugin_tags-forms","plugin_tags-multi-step-form","plugin_category-contact-forms","plugin_contributors-tigerelements","plugin_committers-tigerelements"],"banners":{"banner":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/banner-772x250.png?rev=3682309","banner_2x":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/banner-1544x500.png?rev=3682309","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/icon-128x128.png?rev=3682309","icon_2x":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/icon-256x256.png?rev=3682309","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/screenshot-1.png?rev=3682309","caption":"The drag-and-drop form builder."},{"src":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/screenshot-2.png?rev=3682309","caption":"A published form on the front end."},{"src":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/screenshot-3.png?rev=3682309","caption":"The submissions dashboard."},{"src":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/screenshot-4.png?rev=3682309","caption":"Start from a template, or describe the form you want and have it built for you."},{"src":"https:\/\/ps.w.org\/tiger-elements-forms\/assets\/screenshot-5.png?rev=3682309","caption":"Settings \u2014 mail delivery, anti-spam, storage and GDPR tools."}],"raw_content":"<!--section=description-->\n<p><strong>Tiger Elements Forms<\/strong> is a clean, developer-friendly drag-and-drop form builder for WordPress. Build a contact form, a survey, a registration or a multi-step application visually, drop it anywhere with the <code>[tiger_form]<\/code> shortcode, and it just works \u2014 no theme lock-in, and a native Elementor widget appears automatically when Elementor is active.<\/p>\n\n<p>Everything described here is free and fully functional \u2014 no row limits, no \"demo\" stubs.<\/p>\n\n<p><strong>Nothing here is compiled-only.<\/strong> Every built asset ships beside the readable\nsource it was produced from, inside this download \u2014 the front-end runtime as ES\nmodules in <code>src\/Form\/assets\/frontend\/*.js<\/code>, the form builder as TypeScript and\nReact in <code>src\/Form\/builder-ui\/src\/<\/code>, with the build configs and lockfiles that\nreproduce them. Full details and the exact rebuild commands are under\n\"Source code\" below.<\/p>\n\n<h4>Already using another form plugin? Bring it across<\/h4>\n\n<p>You do not have to rebuild anything. Tiger Elements Forms imports your existing forms \u2014\nfields, options, layout and stored entries \u2014 in one click from:<\/p>\n\n<ul>\n<li>Contact Form 7<\/li>\n<li>WPForms<\/li>\n<li>Gravity Forms<\/li>\n<li>Fluent Forms<\/li>\n<li>Forminator<\/li>\n<li>Ninja Forms<\/li>\n<\/ul>\n\n<p>All six importers are in this free plugin. Run one, check the result, and keep\nyour old plugin installed until you are happy. Nothing is deleted.<\/p>\n\n<h4>Free, forever<\/h4>\n\n<ul>\n<li><strong>Visual drag-and-drop builder<\/strong> \u2014 a modern canvas with live preview<\/li>\n<li><strong>33 field types<\/strong> \u2014 text, email, number, phone, URL, date, time, select, radio, checkbox, multi-select, textarea, file upload, consent, rating, range, country, state, hidden, HTML and more<\/li>\n<li><strong>Conditional logic<\/strong> \u2014 show\/hide fields and route notifications by answer<\/li>\n<li><strong>Email notifications<\/strong> \u2014 admin alerts and autoresponders with merge tags and full From \/ Reply-To control; uses your server's mailer by default, with an optional built-in SMTP panel<\/li>\n<li><strong>Local file uploads<\/strong> \u2014 keep submissions and attachments on your own server<\/li>\n<li><strong>Multi-step forms<\/strong> \u2014 split long forms into pages with a progress bar and per-step validation<\/li>\n<li><strong>Anti-spam<\/strong> \u2014 honeypot, time-trap and rate limiting built in, plus optional CAPTCHA (hCaptcha, Cloudflare Turnstile or Google reCAPTCHA)<\/li>\n<li><strong>Submissions dashboard<\/strong> \u2014 view, search and export entries; GDPR export\/erase included<\/li>\n<li><strong>Your data stays yours<\/strong> \u2014 submissions and uploads are stored in your own WordPress database and on your own server. Nothing is sent anywhere else unless you switch on one of the optional third-party services listed under <em>External services<\/em> below.<\/li>\n<li><strong>One-click importers<\/strong> \u2014 bring your forms and entries over from Contact Form 7, WPForms, Gravity Forms, Fluent Forms, Forminator or Ninja Forms<\/li>\n<li><strong>Works with Elementor Free<\/strong> \u2014 no Elementor Pro required<\/li>\n<\/ul>\n\n<h4>Tiger Elements Forms Pro<\/h4>\n\n<p>Everything above is in this plugin. The features below are <strong>not<\/strong> part of it:\ntheir code is not in this download at all. They ship in a separate Tiger Elements Forms\nPro plugin (not hosted here) that installs alongside this one.<\/p>\n\n<p>There is no licence check anywhere in this plugin and nothing here is switched\noff waiting to be unlocked \u2014 the Pro files are simply absent from the zip. Where\na screen mentions a Pro capability it is only so that a form built on a Pro site\nkeeps its settings intact when it is opened here.<\/p>\n\n<p>Tiger Elements Forms Pro adds:<\/p>\n\n<ul>\n<li><strong>Online payments<\/strong> \u2014 Stripe, PayPal, Razorpay and Square, with server-authoritative pricing, refunds and webhook verification<\/li>\n<li><strong>Cloud file storage<\/strong> \u2014 Amazon S3, Cloudflare R2 and Bunny.net, with chunked\nuploads, signed download links and the credentials configured on the Storage tab<\/li>\n<li><strong>Integrations &amp; automation<\/strong> \u2014 outbound webhooks plus native Slack, Mailchimp,\nHubSpot, Brevo, Kit, Klaviyo, GetResponse, ActiveCampaign, Notion and Google\nSheets delivery, each with conditions, retries and a per-submission delivery log<\/li>\n<li><strong>Google Sheets, properly<\/strong> \u2014 every form gets its own tab in the spreadsheet,\ncreated for you and named after the form, with a header row. Columns are matched\nto that header by name, so adding or reordering a column never shifts the rows\nalready in the sheet. File and signature answers arrive as links you can open.<\/li>\n<li><strong>E-signatures<\/strong> \u2014 send a document out for signature, in order, to one or\nseveral people. Signers get a private link, no account needed. Every step is\nrecorded \u2014 generated, sent, viewed, signed or declined, with timestamp and IP \u2014\nand the finished document is written to PDF with the audit trail attached.<\/li>\n<li><strong>Seven more field types<\/strong> \u2014 calculation (live totals and fees), product,\nsignature, image choice, matrix, NPS and repeater<\/li>\n<li><strong>Build with AI<\/strong> \u2014 an MCP connector for Claude, Cursor and VS Code<\/li>\n<\/ul>\n\n<p>Pro is a separate add-on plugin that installs alongside this one. Buy it, and\ndownload every later version, from your account at\nhttps:\/\/tigerelementswp.com\/account\/ \u2014 it is not distributed through\nwordpress.org. Learn more at https:\/\/tigerelementswp.com\/pricing\/<\/p>\n\n<h3>External services<\/h3>\n\n<p>Tiger Elements Forms works entirely on your own server by default. It does not phone home,\nand it has no licensing, telemetry or analytics calls of any kind.<\/p>\n\n<p>Four optional services can be switched on by you, the site owner. Each one is off\nuntil you enable it and enter your own credentials, and each is listed below with\nwhat it does, exactly what data is sent, and when.<\/p>\n\n<p>Payment gateways are not among them. Online payments are a Tiger Elements Forms\nPro feature and the gateway code is not part of this plugin \u2014 there is no Stripe,\nPayPal, Razorpay or Square integration in this download to connect to anything,\nwhich is why no gateway is listed here. The Pro feature list further up describes\nwhat Pro adds; nothing in it runs from this zip.<\/p>\n\n<p><strong>1. Cloudflare Turnstile (optional CAPTCHA)<\/strong><\/p>\n\n<p>Used only if you choose Turnstile under <em>TE Forms \u2192 Settings \u2192 Anti-spam<\/em> and\nenter your Turnstile site key and secret key.<\/p>\n\n<p>What is sent, and when: when a visitor loads a page containing your form, their\nbrowser downloads the Turnstile widget script from <code>challenges.cloudflare.com<\/code>,\nwhich lets Cloudflare see the visitor's IP address and browser user-agent. When\nthat visitor submits the form, your server sends the challenge token produced by\nthe widget, your Turnstile secret key and the visitor's IP address to\n    challenges.cloudflare.com\/turnstile\/v0\/siteverify to confirm the visitor is not\na bot. Form field values are never sent.<\/p>\n\n<p>Terms of Service: https:\/\/www.cloudflare.com\/website-terms\/\nPrivacy Policy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/p>\n\n<p><strong>2. hCaptcha (optional CAPTCHA)<\/strong><\/p>\n\n<p>Used only if you choose hCaptcha under <em>TE Forms \u2192 Settings \u2192 Anti-spam<\/em> and\nenter your hCaptcha site key and secret key.<\/p>\n\n<p>What is sent, and when: when a visitor loads a page containing your form, their\nbrowser downloads the hCaptcha widget script from <code>js.hcaptcha.com<\/code>, which lets\nhCaptcha see the visitor's IP address and browser user-agent. When that visitor\nsubmits the form, your server sends the challenge token, your hCaptcha secret key\nand the visitor's IP address to <code>hcaptcha.com\/siteverify<\/code> for verification. Form\nfield values are never sent.<\/p>\n\n<p>Terms of Service: https:\/\/www.hcaptcha.com\/terms\nPrivacy Policy: https:\/\/www.hcaptcha.com\/privacy<\/p>\n\n<p><strong>3. Google reCAPTCHA (optional CAPTCHA)<\/strong><\/p>\n\n<p>Used only if you choose reCAPTCHA v2 or v3 under <em>TE Forms \u2192 Settings \u2192\nAnti-spam<\/em> and enter your reCAPTCHA site key and secret key.<\/p>\n\n<p>What is sent, and when: when a visitor loads a page containing your form, their\nbrowser downloads the reCAPTCHA script from <code>www.google.com\/recaptcha<\/code>, which lets\nGoogle see the visitor's IP address, browser user-agent and interaction signals.\nWhen that visitor submits the form, your server sends the challenge token, your\nreCAPTCHA secret key and the visitor's IP address to\n    www.google.com\/recaptcha\/api\/siteverify for verification. Form field values are\nnever sent.<\/p>\n\n<p>Terms of Service: https:\/\/policies.google.com\/terms\nPrivacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>4. Your chosen SMTP provider (optional email delivery)<\/strong><\/p>\n\n<p>By default Tiger Elements Forms hands email to WordPress, which sends from your own\nserver. You can instead send through an SMTP provider \u2014 the plugin ships host\npresets for Gmail \/ Google Workspace, SendGrid, Mailgun, Postmark, Amazon SES,\nBrevo and Outlook \/ Microsoft 365, plus a Custom option for any other host.<\/p>\n\n<p>This is off until you enable it and enter your own server, username and password.\nWhen enabled, the notification emails your forms generate \u2014 including the field\nvalues a visitor submitted, since that is the content of the message \u2014 are handed\nto that provider for delivery, together with the credentials you entered. Nothing\nis sent at any other time, and Tiger Elements Forms never contacts any of these providers\non its own behalf.<\/p>\n\n<p>Each provider publishes its own terms and privacy policy; the account is yours,\nso those are the terms that apply. Gmail \/ Google Workspace:\nhttps:\/\/policies.google.com\/terms and https:\/\/policies.google.com\/privacy.\nSendGrid: https:\/\/www.twilio.com\/en-us\/legal\/tos and\nhttps:\/\/www.twilio.com\/en-us\/legal\/privacy. Mailgun:\nhttps:\/\/www.mailgun.com\/legal\/terms\/ and https:\/\/www.mailgun.com\/legal\/privacy\/.\nPostmark: https:\/\/postmarkapp.com\/terms-of-service and\nhttps:\/\/postmarkapp.com\/privacy-policy. Amazon SES:\nhttps:\/\/aws.amazon.com\/service-terms\/ and https:\/\/aws.amazon.com\/privacy\/.\nBrevo: https:\/\/www.brevo.com\/legal\/termsofuse\/ and\nhttps:\/\/www.brevo.com\/legal\/privacypolicy\/. Microsoft 365:\nhttps:\/\/www.microsoft.com\/licensing\/terms and\nhttps:\/\/privacy.microsoft.com\/privacystatement.<\/p>\n\n<h3>Trademarks and third-party names<\/h3>\n\n<p>Tiger Elements Forms is an independent plugin from Tiger Elements. It is not\naffiliated with, endorsed by, or sponsored by any of the projects or companies\nnamed in this readme or in the plugin's screens.<\/p>\n\n<p>Those names appear only to describe what this plugin interoperates with, and\neach belongs to its respective owner:<\/p>\n\n<ul>\n<li>Contact Form 7, WPForms, Gravity Forms, Fluent Forms, Forminator and Ninja\nForms are named by the one-click importers, which read forms and entries you\nalready have in those plugins. Nothing in them is modified or deleted.<\/li>\n<li>Elementor is named because this plugin registers an optional widget when\nElementor is active. Elementor itself is not required and is not included.<\/li>\n<li>Cloudflare Turnstile, hCaptcha and Google reCAPTCHA are the optional CAPTCHA\nservices described under \"External services\" above.<\/li>\n<li>Gmail \/ Google Workspace, SendGrid, Mailgun, Postmark, Amazon SES, Brevo and\nOutlook \/ Microsoft 365 are SMTP host presets \u2014 you supply your own account.<\/li>\n<li>Stripe, PayPal, Razorpay, Square, Slack, Mailchimp, HubSpot, Notion, Google\nSheets, Amazon S3, Cloudflare R2 and BunnyCDN are named in the Pro feature\nlist. None of that code is contained in this plugin.<\/li>\n<\/ul>\n\n<p>WordPress is a registered trademark of the WordPress Foundation.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>Tiger Elements Forms ships both the compiled assets it runs and the non-compiled source\nthey are built from, so nothing in this plugin is a black box.<\/p>\n\n<ul>\n<li>Form builder (React + TypeScript): <code>src\/Form\/builder-ui\/src\/<\/code>\nBuilt with Vite into <code>src\/Form\/builder-ui\/tiger-dist\/<\/code>.\nTo rebuild: <code>cd src\/Form\/builder-ui &amp;&amp; npm install &amp;&amp; npm run build<\/code><\/li>\n<li>Front-end form runtime (ES modules): <code>src\/Form\/assets\/frontend\/*.js<\/code>\nBundled with esbuild into <code>src\/Form\/assets\/frontend\/build\/<\/code>.\nTo rebuild: <code>cd src\/Form\/assets\/frontend &amp;&amp; npm install &amp;&amp; npm run build<\/code>\n(esbuild is pinned in that folder's own package.json, so the version that\nproduced the shipped chunk names is the one you get.)<\/li>\n<\/ul>\n\n<p>Only the dependency trees (<code>node_modules<\/code>) are omitted; they are restored from\nthe committed <code>package-lock.json<\/code> by the <code>npm install<\/code> step above. No build step\nis required to <em>use<\/em> the plugin \u2014 the compiled output is included and ready to\nrun.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>tiger-elements-forms<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Open <strong>TE Forms<\/strong> in the admin menu to build your first form.<\/li>\n<li>Place a form on any page with the <code>[tiger_form id=\"123\"]<\/code> shortcode, or drop the <strong>Tiger Elements Forms<\/strong> widget in Elementor.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"i%20already%20use%20contact%20form%207%20%2F%20wpforms%20%2F%20gravity.%20do%20i%20have%20to%20rebuild%20my%20forms%3F\"><h3>I already use Contact Form 7 \/ WPForms \/ Gravity. Do I have to rebuild my forms?<\/h3><\/dt>\n<dd><p>No. Go to <strong>TE Forms \u2192 Import<\/strong>, pick your current plugin, and Tiger Elements Forms\nrecreates each form \u2014 fields, options, layout \u2014 along with the entries already\ncollected. Your old plugin is left untouched, so you can compare the two and\nswitch over only when you are ready.<\/p><\/dd>\n<dt id=\"does%20it%20require%20elementor%3F\"><h3>Does it require Elementor?<\/h3><\/dt>\n<dd><p>No. Tiger Elements Forms works on its own through the <code>[tiger_form]<\/code> shortcode with any theme. If Elementor is active, a native widget is added automatically.<\/p><\/dd>\n<dt id=\"will%20my%20emails%20be%20delivered%3F\"><h3>Will my emails be delivered?<\/h3><\/dt>\n<dd><p>By default the plugin uses your server's PHP mailer (zero configuration). For best inbox delivery, enable the optional SMTP settings under TE Forms \u2192 Settings \u2192 Mail.<\/p><\/dd>\n<dt id=\"where%20is%20submission%20data%20stored%3F\"><h3>Where is submission data stored?<\/h3><\/dt>\n<dd><p>In your own WordPress database, with file uploads on your server. Cloud storage (S3 \/ R2 \/ Bunny) is a Pro feature.<\/p><\/dd>\n<dt id=\"how%20do%20i%20take%20payments%3F\"><h3>How do I take payments?<\/h3><\/dt>\n<dd><p>Online payments are part of Tiger Elements Forms Pro. The free version focuses on collecting leads and data.<\/p><\/dd>\n<dt id=\"is%20one%20license%20enough%20for%20tiger%20elements%20forms%2C%20the%20widgets%20and%20booking%3F\"><h3>Is one license enough for Tiger Elements Forms, the widgets and Booking?<\/h3><\/dt>\n<dd><p>Yes \u2014 a single Tiger Elements account license can unlock all three products, or you can buy any one on its own.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.2<\/h4>\n\n<ul>\n<li><strong>Preview now shows the real form.<\/strong> It used to be a separate drawing of your\nform, and the two drifted: a Name field appeared as First and Last in the\neditor and as a single box in the preview, Address did the same, and the\nslider and signature fields were not drawn at all. The preview opens the\nactual published form, so what you see is what visitors get \u2014 including your\ntheme's fonts and colours, and the real date picker and file uploader.<\/li>\n<li>Preview is safe to submit. Pressing Send in it checks the form exactly as a\nvisitor would and then stops: no entry is saved, no email is sent, and nothing\nis passed to any connected service.<\/li>\n<li>You can size the preview for desktop, tablet and mobile, and close it with Esc.<\/li>\n<li>Fixed: <strong>Name and Address fields now stack<\/strong> when there is not room for their\nparts side by side \u2014 in a phone, and equally in a narrow column or sidebar on a\nfull-size screen.<\/li>\n<li>Fixed: the \"We saved your progress. Restore?\" bar had no styling at all. It\nlooked like a fault, and on a phone its two buttons fell onto separate lines.<\/li>\n<li>Notifications: the merge-tag buttons appeared twice, under the subject and\nagain under the body, and only ever offered the first six fields of your form.\nThere is now one <strong>Insert tag<\/strong> button per box, listing every field, grouped\nand searchable \u2014 and the tag is inserted where your cursor is instead of at the\nend.<\/li>\n<li>Bookings moved to Tiger Elements Forms Pro. This plugin no longer registers a\nBookings post type it has no feature for. A form that was set up on a Pro site\nkeeps its booking settings untouched and starts working again there.<\/li>\n<li>New: <strong>Settings \u25b8 Storage<\/strong> now lists only the places this plugin can actually\nput files, and explains each one. It used to offer S3, R2 and Bunny in every\ncopy; picking one here saved the choice and then quietly went on writing to\nyour own server, because that code is not part of this download.<\/li>\n<li>Fixed: saving the Storage tab no longer discards settings it does not show.<\/li>\n<li>Fixed: a file download that failed at the storage layer returned a server\nerror instead of a message. It now says the file could not be retrieved.<\/li>\n<li>New: a notification email that mentions an uploaded file now gives you a link\nto open it, not just the filename. Attaching the file itself is still a\nseparate option \u2014 this works whether or not you use it, and for files kept on\ncloud storage where attaching is not possible. The link does not expire and\ncarries no secret in it: it opens for anyone allowed to read your submissions,\nand sends everyone else to the login screen.<\/li>\n<li>The disposable-email blocklist now ships with the plugin instead of being\ndownloaded when you press a button. Nothing about blocking changes; the list\nis refreshed with each release rather than on demand, and the plugin makes one\nfewer connection to the outside world.<\/li>\n<li>Fixed: installing Pro used to switch the free plugin off for you. It no longer\ntouches it \u2014 which plugins are active is your decision, and the two have\nalways coexisted without it.<\/li>\n<li>Fixed: the documented command for rebuilding the front-end bundle did not run\n(esbuild could not be resolved from that folder). It works now, and the source\nevery built file comes from is described at the top of the plugin's page.<\/li>\n<li>Hardening: several admin screens now escape their output at the point it is\nprinted rather than earlier, so the safety is visible in the code that prints.<\/li>\n<li>Fixed: an optional part of the form runtime failing to load no longer stops\nthe whole form from working \u2014 you lose that one behaviour, not the form.<\/li>\n<li>The admin menu now reads \"TE Forms\". The full name was wider than the space\nWordPress gives a sidebar entry, so it wrapped onto two lines. Only the label\nis shorter \u2014 the plugin, its screens and everything you have saved are the\nsame, and the screen heading still shows the full name.<\/li>\n<li>New: radio and checkbox fields can offer an <strong>\u201cOther\u201d choice<\/strong> with a text box,\nso someone can answer with something that is not on your list. What they type\nis stored as the answer itself, so exports and notifications read normally.<\/li>\n<li>New: <strong>choice layout<\/strong>. Radio and checkbox choices can flow across the row\ninstead of stacking one per line; they still wrap on small screens.<\/li>\n<li>Fixed: in the form builder, checkboxes, radio buttons, NPS boxes and the\nrepeater panel were drawn without their outline, so they appeared as blank\nspace. The Field ID box also drew a heavy 3D border instead of a thin line.<\/li>\n<li>New fields now get a readable ID \u2014 <strong>radio_1<\/strong> instead of radio_mtljotzi4 \u2014 so\nthe merge tags and conditional rules you write by hand are legible. Existing\nfields keep the ID they already have, because your rules refer to it.<\/li>\n<li>Fixed: leaving a form with unsaved changes now always asks first. The\nSubmissions button and your browser's Back button used to discard unsaved\nedits without a word; both now offer to save, discard, or stay.<\/li>\n<li>Removed three settings from the GDPR tab that never did anything. One of them\nwas an anonymisation schedule that looked like it worked: it wrote to a place\nnothing read, so anyone who set it there believed personal data was being\nscrubbed while nothing ran. Deletion and anonymisation are set on the General\ntab, as they always were, and the GDPR tab now points there.<\/li>\n<li>New: the plugin now contributes suggested wording to <strong>Settings \u2192 Privacy \u2192\nPolicy Guide<\/strong>, covering what a submission stores \u2014 answers, timestamp, hashed\nIP, and any file or signature attached \u2014 so your privacy policy can describe it\naccurately.<\/li>\n<li>The two remaining GDPR settings now say where they take effect, under Tools \u2192\nExport Personal Data and Tools \u2192 Erase Personal Data.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>The plugin is now Tiger Elements Forms. The old name was close enough to an\nunrelated plugin to be confusing, so the display name, the slug, the text\ndomain and the Gutenberg block all lead with our own brand instead. The block\nis registered as tiger-elements-forms\/form.<\/li>\n<li>Fixed: the block editor's own strings were registered under the previous text\ndomain, so none of them could ever be translated. They now use the plugin's\ndomain, and the editor script loads its translations like every other script.<\/li>\n<li>Fixed: the \"Build one in Tiger Elements Forms\" link shown in the Elementor\nstyler when a site has no forms yet pointed at an admin page that does not\nexist, so it landed on a permissions error. It now opens the form builder.<\/li>\n<li>Fixed: the bundled translation template was missing 108 strings and carried a\nmalformed header that gettext tools refused to read. It is now regenerated\nfrom the packaged files on every build, so it cannot drift again.<\/li>\n<li>The Upgrade Notice shown on the update screen still described a release from\nlong before this one; it now describes what you are actually updating to.<\/li>\n<li>Internal: releases are checked against the zip that ships rather than the\nsource it was built from, and the same commit now always produces the same\npackage.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Compatibility: tested against WordPress 7.1.<\/li>\n<li>Hardening: error messages raised as exceptions are now escaped at the point\nthey are built, so the whole plugin reads clean under WordPress's output\nescaping standard. These strings were never rendered unescaped, so nothing\nabout what you see changes -- the code now proves that to a static scanner\ninstead of leaving a reviewer to trace it by hand.<\/li>\n<\/ul>\n\n<h4>1.14.7<\/h4>\n\n<ul>\n<li>Hardening: every database query now binds its table and column names through\nWordPress's own identifier placeholder instead of building the SQL by string\ninterpolation. No behaviour changes -- the same rows are read and written --\nbut the query layer is now clean under WordPress's coding standards, with the\nhandful of unavoidable dynamic IN() lists documented in place.<\/li>\n<\/ul>\n\n<h4>1.14.6<\/h4>\n\n<ul>\n<li>Change: the plugin now ships the non-compiled source for its bundled assets \u2014\nthe React\/TypeScript form builder and the front-end ES modules \u2014 alongside the\ncompiled output, with build instructions under \"Source code\" in this readme.\nNothing about running the plugin changes; the compiled assets are still\nincluded and no build step is needed to use it.<\/li>\n<\/ul>\n\n<h4>1.14.5<\/h4>\n\n<ul>\n<li>Fix: if your site's security keys change (a wp-config regeneration, a host\nsecurity-key reset, or a restore from a backup made under different keys),\nsaved payment credentials can no longer be decrypted. The screen still showed\nthem as configured while the gateway received an empty key, so checkout failed\nwith no visible cause. Tiger Elements Forms now detects this, names the affected\ncredentials on Settings -&gt; Payments, and tells you to enter them again.<\/li>\n<\/ul>\n\n<h4>1.14.4<\/h4>\n\n<ul>\n<li>Change: the free build no longer contains any licensing code. The License\nscreen, the licence key form and the Plugins-list \"Upgrade\" link are Pro-build\nonly, so the free plugin ships nothing that could look like a locked feature.<\/li>\n<li>Fix: the Tiger Elements Forms admin menu sat among the WordPress core menus and pushed\nthem down. It now sits with the other plugin menus.<\/li>\n<li>Fix: corrected the plan comparison text, which described multi-step forms as a\nPro feature. Multi-step forms are free.<\/li>\n<li>Hardening: values embedded in inline admin scripts are now escaped for a\nscript context.<\/li>\n<\/ul>\n\n<h4>1.14.3<\/h4>\n\n<ul>\n<li>Fix: the From email box on Settings \u2192 Mail showed your WordPress admin address\neven when no sender was configured, while emails actually went out from your\nserver default. Saving the page then committed that address for real \u2014 usually\na Gmail or Outlook one, which is exactly the sender mismatch the delivery check\nwarns about. The box now shows only what you have saved, with the real default\nas a greyed-out hint.<\/li>\n<\/ul>\n\n<h4>1.14.2<\/h4>\n\n<ul>\n<li>Fix: download links for uploaded files did not work on most servers \u2014 clicking\na file on a submission returned \"not found\". The link encoded the folder\nseparators in a way Apache rejects by default. Affects every uploaded file, and\nsignature previews on the submission screen.<\/li>\n<\/ul>\n\n<h4>1.13.0<\/h4>\n\n<ul>\n<li>New: Delivery check. Settings \u2192 Mail now tells you whether your form emails will\nactually arrive \u2014 it inspects SPF, DKIM, DMARC and sender alignment for the\ndomain you send from, and shows the exact DNS record to add when something is\nmissing. It also catches the most common mistake of all: sending as a Gmail,\nOutlook or Yahoo address you do not control, which providers reject.<\/li>\n<li>The check reads public DNS only. No third-party service, no key to configure,\nand nothing about your setup leaves your site.<\/li>\n<\/ul>\n\n<h4>1.12.0<\/h4>\n\n<ul>\n<li>Fix: activating with WP-CLI or a deployment script granted no Tiger Elements Forms\ncapabilities until someone opened the admin. Administrators were unaffected,\nbut other roles silently had none.<\/li>\n<li>Internal: shared merge-tag and submission-context handling was consolidated so\nevery feature resolves the same tags the same way. No change to your forms.<\/li>\n<\/ul>\n\n<h4>1.11.1<\/h4>\n\n<ul>\n<li>Signatures are now stored as private files instead of being embedded in the\nsubmission record. Existing submissions are unaffected and keep displaying as\nbefore; new ones store a much smaller record and a signature file that carries\nits own checksum. Deleting a submission deletes its signature with it.<\/li>\n<\/ul>\n\n<h4>1.11.0<\/h4>\n\n<ul>\n<li>The field catalogue now has a Pro tier: Product, Calculation, Signature, Image\nchoice, Likert matrix, NPS score and Repeater are part of Tiger Elements Forms Pro. The\nfree plugin keeps 33 field types, including every layout block, consent,\ncountry\/state and multi-step forms.<\/li>\n<li>A form created with those Pro fields stays intact on this build \u2014 the fields\nare preserved exactly as saved, they simply are not displayed.<\/li>\n<li>Fix: a Heading field with no explicit level produced invalid markup (\"&lt; &gt;\")\ninstead of a heading, and a PHP warning on every page view.<\/li>\n<\/ul>\n\n<h4>1.10.3<\/h4>\n\n<ul>\n<li>Fix: a Name or Address field marked OPTIONAL could not be left blank \u2014 the form\nanswered \"First is required\" for a field the visitor was never obliged to fill,\nso the form could not be submitted at all without completing it. The parts of an\noptional field are now optional; a required field is still enforced exactly as\nbefore. Forms already saved with this problem are repaired automatically on\nupdate.<\/li>\n<li>Fix: activating the plugin with WP-CLI or a deployment script created no\ndatabase tables until someone opened wp-admin. In that window a page showed no\nform at all and submissions were rejected as an unknown form. Activation now\nbuilds the schema itself.<\/li>\n<li>Fix: importing from Fluent Forms dropped the \"required\" rule on a Name or\nAddress field, because Fluent stores that rule on the individual parts. An\nimported form no longer silently accepts a blank name it used to reject.<\/li>\n<\/ul>\n\n<h4>1.10.2<\/h4>\n\n<ul>\n<li>Fix: the Submissions screen showed \"HTTP 404\" and no entries on any site using\nplain permalinks. The builder appended its paging parameters with \"?\" to a REST\nroot that already contained one, so the request never matched a route. Both\npermalink styles now work.<\/li>\n<li>Fix: opening a form whose stored field options were not in the expected list\nshape left the builder on a blank white screen with no message \u2014 a JavaScript\nerror unmounted the whole editor. A malformed field now degrades to an empty\noption list and the rest of the form still opens.<\/li>\n<li>Fix: choice fields (select, radio, checkbox) whose options were written as a\nsimple value =&gt; label map were silently dropped, producing a dropdown with no\nchoices and radio buttons with no labels. Those options are now read correctly.<\/li>\n<\/ul>\n\n<h4>1.10.1<\/h4>\n\n<ul>\n<li>The free build no longer ships any Pro module at all. The payment engine\n(gateway drivers, orchestrator, repository, webhook endpoint and the Payments\nsettings screen), the integrations relay, the cloud storage drivers, the\nBuild-with-AI connector and the licensing client are all excluded from it\nrather than shipped-but-inactive. Every call site checks whether the module is\ninstalled, so a form carrying payment settings \u2014 imported, or built on a Pro\nsite \u2014 degrades to a normal submission instead of erroring, and the Payments\nand Integrations tabs simply do not appear.<\/li>\n<li>Security: saving an internal note on a submission required only the \"view\nsubmissions\" capability, so a read-only reviewer could edit stored submission\ndata. It now requires the manage capability, matching every other write.<\/li>\n<li>Hardening: the visitor IP used for rate limiting and for the stored submission\nhash is now resolved and validated in one place instead of three copies, and is\nchecked with FILTER_VALIDATE_IP before use. A malformed proxy header can no\nlonger reach the rate-limit key. X-Forwarded-For remains opt-in via the\nTIGFORM_TRUST_PROXY constant, so it is still ignored by default.<\/li>\n<li>Confirmation prompts in wp-admin no longer use the browser's window.confirm().\nDeleting a submission, following a delete link and issuing a refund now open the\nplugin's own accessible dialog, with Escape and focus handling.<\/li>\n<li>Fix: admin CSS and JavaScript were versioned by a constant that only changes at\nrelease time, so browsers kept serving a cached copy after an update. They are\nnow versioned by file modification time and refresh as soon as they change.<\/li>\n<\/ul>\n\n<h4>1.10.0<\/h4>\n\n<ul>\n<li>wordpress.org compliance pass. The free build no longer contains any locked or\nlicense-gated feature: the Pro modules (payment gateways, cloud storage drivers,\nintegrations relay, the Build-with-AI connector and the licensing client) are not\nshipped in it at all, and every remaining availability check now asks whether the\ncode is installed rather than whether a licence is present.<\/li>\n<li>Multi-step forms are now part of the free plugin. Page breaks were always a free\nbuilder field and the free importers already preserved imported pages, so the\nfeature shipped in full and was disabled only at the final render step \u2014 which\nsilently flattened multi-page forms that had just been imported intact.<\/li>\n<li>All inline CSS and JavaScript now goes through wp_add_inline_style() and\nwp_add_inline_script(); no raw  or  tags are emitted anywhere, on\nthe front end or in wp-admin.<\/li>\n<li>Runtime configuration printed into a script context is now encoded with the full\nJSON_HEX_* flag set, so no form content can terminate the surrounding tag.<\/li>\n<li>The free build makes no outbound request unless you enable one of the optional\nservices now documented under \"External services\" in this readme. The daily\nlicensing heartbeat is gone from the free build entirely.<\/li>\n<li>Everything the plugin stores moved from the <code>tigelef_<\/code> prefix to <code>tigform_<\/code> \u2014\ntables, options, capabilities, cron events and hook names. Existing installs are\nmigrated automatically on update, and the previous REST namespace and hook names\nkeep working so cached pages and any custom code continue to function.<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Fix: a Fluent Forms form that uses column layouts (fields arranged in a two- or three-column row) imported as empty. Those fields are now read correctly, so the whole form comes across.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Improved: importing a <strong>multi-page<\/strong> WPForms or Gravity Forms form now keeps its pages as a multi-step Tiger form. (Free shows it as a single page until you upgrade; no fields are lost.)<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>New: the form importer now covers <strong>Forminator<\/strong> as well \u2014 fields, options and stored entries.<\/li>\n<li>New: <strong>Import all<\/strong> \u2014 migrate every form from a source plugin in one click.<\/li>\n<li>Improved: imported forms arrive with an <strong>email notification already set up<\/strong>, so a migrated form emails on submission without extra setup.<\/li>\n<li>Improved: <strong>Contact Form 7<\/strong> imports keep your real field <strong>labels<\/strong>, read from the form markup.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>New: the form importer now supports <strong>Fluent Forms<\/strong> too \u2014 its fields, options and stored entries import the same way as the other sources.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>New: <strong>Import forms from other plugins.<\/strong> A new Tiger Elements Forms \u2192 Import screen migrates your existing forms in from Contact Form 7, WPForms, Gravity Forms and Ninja Forms \u2014 fields, options and settings \u2014 and, where the source plugin stores them, your past submissions too. Imported forms are created as drafts for review, and your other plugin is only read from \u2014 nothing in it is changed or deleted. Included free.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Maintenance: removed the retired pre-Styler inline form widget and its internal settings-to-schema translator. Both were off by default and never shipped in a public release, so no saved form or page depends on them. The Styler widget, the <code>[tiger_form]<\/code> shortcode, the block and the Elementor widget are unaffected.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>New: set how wide a form is. There's a Form width box in the builder (Form settings \u2192 General) for the form's own default, and every placement can override it \u2014 <code>[tiger_form id=\"1\" width=\"800px\"]<\/code>, the block's Form width control, or Elementor \u2192 Style \u2192 Form container. Leave it empty and the form fills its container as before, so nothing changes until you ask for it.<\/li>\n<li>New: give a form your own CSS class, in Form settings \u2192 General, so you can style one particular form from your theme's stylesheet without having to target it by id. Several classes can be separated with spaces.<\/li>\n<li>Fix: the Rating field showed an empty text box on the published form. The builder showed stars and the preview showed stars, but the live form shipped a plain text input, and whatever a visitor typed into it was stored as their rating. It now renders real stars \u2014 keyboard- and screen-reader-accessible \u2014 and an out-of-range value is rejected instead of being accepted.<\/li>\n<li>Fix: the Likert matrix side-scrolled inside its own box on phones, with nothing to indicate there was more to the right. On narrow screens each question is now its own labelled group with full-width options.<\/li>\n<li>Fix: dragging a field from the panel now drops it where you release it, including on a form long enough to scroll and on rows with two fields side by side.<\/li>\n<li>Fix: Form settings was cramped on a phone \u2014 the tab rail took up so much of the panel that every box in it was squeezed to roughly a third of the screen. The rail now collapses to icons on narrow screens and the panel uses the full width.<\/li>\n<li>Fix: the Form width box in the builder was rendering about 26px wide, with its unit dropdown taking the rest of the row.<\/li>\n<li>Fix: Elementor's \"Rating (selected)\" style control had never done anything \u2014 it was pointing at markup this plugin doesn't produce. It now styles the selected stars, and there's a matching control for the empty ones.<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Fix: submissions could fail with \"Cookie check failed\". The form sent WordPress's page nonce along with the submission, and WordPress rejects the whole request when that nonce no longer matches the current session \u2014 which happens routinely on cached pages, on a tab left open for hours, or after logging in or out. The nonce was never used to authorise submissions (the form's own signed token does that), so it is no longer sent and this error cannot occur.<\/li>\n<li>Fix: a payment-enabled form no longer shows \"We could not start the payment\" when the amount works out to zero \u2014 for example a price calculation whose paid option wasn't chosen. Those submissions now complete normally instead of being stranded awaiting payment. Forms with a real amount are unaffected.<\/li>\n<li>Fix: the calendar icon now always sits at the right-hand edge of a date field. Themes and the Elementor Styler could override the field's layout, which let the icon drift next to the text and move as the date changed.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Fix: a Date, Time or Date\/Time field added inside a Repeater row after the page loaded kept the old browser control instead of the new picker. Every row now gets the picker.<\/li>\n<li>Fix: when a required date field failed validation the page no longer moved focus to it, so keyboard and screen-reader users were left where they were. Focus now lands on the field that needs attention.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fix: dragging a field from the panel now really does drop it where you release it. The 1.6.0 fix only applied when the drop landed on a field's own drop zone, which almost never happened for a new field dragged in from the panel \u2014 so it still fell to the end of the form.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New: Date, Time and Date\/Time fields now use a built-in picker instead of the browser's native control. It opens from anywhere on the field (the native one only responded to its small calendar icon), looks the same in every browser, and follows your form's colours in both light and dark styling. Date ranges set on the field are now actually enforced, and the calendar respects your site's \"week starts on\" setting.<\/li>\n<li>New: the builder Preview renders that same picker, so what you see while building matches the published form.<\/li>\n<li>Fix: dropdown placeholders were never shown \u2014 a Select always displayed its first option instead, making the field look pre-answered. The placeholder now appears as an empty leading option, and can still be re-selected to clear the answer.<\/li>\n<li>Fix: the Preview's Tablet and Mobile buttons had no effect on layout. Fields now stack exactly as they do on a real phone.<\/li>\n<li>Fix: Calculation fields and conditional logic that read a Multiselect or Checkboxes field now work on the published form. Previously a rule like \"show when the multi-select is X\" never triggered and a Calculation referencing a multi-select returned 0, because the front-end read those multi-value fields under the wrong key. Single-value fields (Select, Radio, Text, etc.) were unaffected.<\/li>\n<li>Fix: the builder Preview now evaluates Calculation fields. Every calculation previously rendered an empty value there, and per-option amounts from choice fields were ignored, so the preview total could not match the real one. Preview results now follow the same rules as the published form and the payment amount.<\/li>\n<li>Fix: fields dragged from the panel now drop where you release them instead of always landing at the end of the form, and every field gained up\/down arrows for reordering without dragging.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>New: Calculation \/ payment values on choice fields \u2014 turn on \"Use as calculation \/ payment value\" on a Select, Radio, Checkbox, Checkboxes, Multiselect, Image choice or Toggle to give each option a number a Calculation field (and payments) can read. Submissions still store the readable option label.<\/li>\n<li>New: Matrix (Likert) columns can carry a numeric score that sums across rows into calculations.<\/li>\n<li>Fix: HTML, Heading, Divider and Consent fields could be saved as a plain text input (and rendered as one). They are now preserved correctly, get a Conditional-logic tab, and render properly in the builder Preview.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New: Tiger Elements Forms Styler \u2014 a dedicated Elementor widget that renders a form you built in the Tiger Elements Forms builder and gives you the full set of style controls, just like the CF7 and Gravity Forms stylers. The older inline \"Tiger Elements Forms Pro\" builder widget is kept as a legacy option you can switch back on from Tiger Elements \u2192 Modules &amp; Widgets.<\/li>\n<li>New: Multiple file uploads \u2014 turn on \"Allow multiple files\" (with a max-files limit) on any File field. Visitors can attach several files and remove any of them with a one-click bin that asks for confirmation first. The upload control is now a single button with the icon inside it.<\/li>\n<li>Fix: removing an uploaded file now actually drops it from the submission, drag-dropped files upload correctly, and the max-files limit is enforced.<\/li>\n<li>Fix: the Elementor Height and Textarea height style controls now resize fields properly (previously they could only grow, never shrink), and select\/input text no longer clips at small heights.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: 12 more field types \u2014 Repeater (add\/remove repeating rows of sub-fields), Likert matrix, NPS 0\u201310 scale, Section, Spacer, Image, Toggle switch, Colour picker, Country dropdown, State\/Province dropdown, Whole number, and combined Date &amp; time.<\/li>\n<li>New: Password field \u2014 masked input whose value is stored as a mask, never as plaintext.<\/li>\n<li>Fix: form styles now cache-bust automatically when the stylesheet changes (versioned by file mtime), so new field styling always ships.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: structural &amp; trust fields \u2014 Heading, Divider (with or without a label), HTML block, and a GDPR Consent checkbox.<\/li>\n<li>New: Settings \u2192 General is fully wired \u2014 submission storage, retention &amp; auto-anonymize, admin-email fallback, and detailed logging.<\/li>\n<li>Improve: builder polish \u2014 centered panel tabs and field-width controls.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Fix: Outgoing email now authenticates reliably on any host. Tiger Elements Forms sets the SMTP envelope sender so SPF passes even under WP-Cron, defaults the From name to your site title (never \"WordPress\"), and stops an unauthenticated free-mail From address (e.g. a Gmail address) from silently blocking delivery when SMTP is off \u2014 the intended address is preserved as Reply-To. Native PHP mail stays the default; SMTP remains optional.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Security: Form-builder access now requires a dedicated administrator capability instead of <code>edit_posts<\/code>.<\/li>\n<li>Security: Calculation fields are recomputed server-side; CSV exports neutralise spreadsheet formula injection.<\/li>\n<li>New: Tools \u2192 Server health card with recommended PHP limits, copy-paste fix snippets, SMTP detection and a one-click REST\/WAF self-test.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>New: Optional built-in SMTP transport, disposable-email blocklist, polished admin UI.<\/li>\n<li>Fix: Text-domain corrected so translations load; refreshed accessible front-end styles.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: visual builder, all field types, conditional logic, email notifications (with optional SMTP), local storage, anti-spam, submissions dashboard, GDPR tools, Elementor widget.<\/li>\n<\/ul>","raw_excerpt":"Build contact forms, surveys and multi-step forms by drag and drop. Conditional logic, file uploads and email notifications \u2014 all free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362188"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tigerelements"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362188"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362188"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362188"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362188"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362188"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}