

Build an HTML contact form by pasting markup, even an AI's: here a custom RSVP card with pill buttons and a star rating.
Narrative Forms is the HTML form plugin for WordPress. Instead of dragging boxes around a builder, you write plain semantic HTML, or paste it straight from an AI like ChatGPT, Claude, or Gemini, and Narrative Forms turns it into a real form with fast AJAX form submissions and stored, exportable data. Any input with a name attribute is saved. That is the whole idea: forms are just HTML, so there is no field type registry, nothing proprietary to lock you in, and no ceiling on what your form can be. If you want a clean, fast, developer friendly HTML form plugin, a simple contact form, or a custom form that a heavy form builder cannot easily produce, this is it. It stays lightweight, loads its assets only on pages that contain a form, and is built to scale to millions of submissions. Everything it does is free, with no premium tier: the AI form builder, conditional logic, webhooks with delivery logs and retries, a REST API, require login, schedule windows, and hosted share links are all included at no cost.
Most WordPress form plugins lock you into a drag and drop form builder and a fixed list of field types. If the builder does not offer a field, you cannot have it. Narrative Forms is an HTML form plugin with no field registry: a field is simply an HTML element with a name. Need a multi step layout, an unusual input, a custom widget, or markup your designer already wrote? Paste it in and it works. You keep full control of the markup, the classes, and the look, so your contact form or custom form renders exactly the way you built it. Drag and drop made sense years ago. Today you describe what you want or paste what you already have. No builder, no bloat, and no fighting a clunky UI to recreate a form you can already picture. That is why people who outgrow a drag and drop form builder move to a real HTML form plugin.
Because forms are just HTML, any large language model can build one for you, and Narrative Forms gives you two ways to use that. The built in AI form builder writes the form HTML for you right inside WordPress: open a form, click Generate with AI, describe what you want, and keep refining it by chatting. You bring your own API key for an OpenAI compatible provider such as DeepSeek, OpenAI, or OpenRouter, so you stay in control of the model and the cost. You can also paste from anywhere: ask ChatGPT, Claude, or Gemini for a form and drop the HTML in, because there is no proprietary field format to satisfy. Either way, the plugin stays model agnostic, ships with no AI key, and contacts no AI service until you add one; see the Privacy and External services sections for what is sent and when.
The free HTML forms plugin is a complete forms solution, not a teaser. Here is what every install includes:
Every output is escaped and every input is sanitised, following WordPress coding and security standards, so the plugin stays review safe and secure.
Narrative Forms is built to move your form submissions wherever they need to go. Add a webhook action with your endpoint URL and every submission is delivered to that webhook, so you can connect a form to Zapier, Make, a CRM, Discord, Slack, Microsoft Teams, or your own service without writing code. A webhook delivery log shows every call and its response, failed webhooks retry automatically with backoff, and webhook templates let you shape a custom JSON payload with one click presets for Discord, Slack, and Teams. When you would rather pull data than push it, the REST API exposes your form submissions under the nrfm/v1 namespace, protected by a capability check or an API key. Add conditional logic to show or hide fields, require login to restrict a form, and schedule windows to open and close it automatically, and your form data never gets stuck in the admin.
Narrative Forms is a general purpose form plugin, so the same HTML first workflow covers almost any form: a simple contact form, a lead capture or support request form, a job application, an RSVP, a survey, a registration form, a file upload form, or a custom form with a layout a drag and drop builder cannot easily produce. Because a field is just an HTML element with a name attribute, you paste the HTML, give the fields names, and the form is live with AJAX form submissions, stored data, conditional logic, and CSV export. There is no template to fight and no field type you cannot add, which is the difference between an HTML form plugin and a drag and drop form builder, and the same lightweight form plugin scales from a handful of submissions a month to millions over time.
Narrative Forms is built for people who like control. Prefill fields with template variables such as {{ user.email }}, {{ get.utm_source | default:’direct’ }}, or {{ site.name }}, using providers like user, URL parameters, post, site, and date, each with filters such as default, upper, lower, date, and truncate. On the front end, public JavaScript events (nrfm-submit, nrfm-submitted, nrfm-success, nrfm-error) let you push conversions to Google Tag Manager or your dataLayer, show a toast, or run any custom logic with a tiny nrfm.on() helper. Filters and actions sit at every decision point, including the form HTML, validation, and webhook request arguments, and a REST API is available for reading and managing form submissions, so you can extend this HTML form plugin without forking it.
Narrative Forms is engineered for sites that collect a lot of data. Form submissions live in a dedicated, indexed database table rather than bloated post meta, so lookups stay fast as the table grows. Repeated reads are cached, queries are paginated and bounded, CSV export streams in batches, and heavy work can run in the background so the front end stays quick. Whether you collect ten form submissions a month or millions over time, this lightweight form plugin is designed to stay responsive. Scaling to millions describes the architecture, indexed storage, caching, and bounded queries, rather than a benchmarked guarantee.
Common uses include contact forms, lead capture, support requests, job applications, RSVPs, surveys, file uploads, registrations, and multi field custom forms with conditional logic that a drag and drop builder cannot easily produce.
Most form plugins keep submissions locked in the admin. The Narrative Forms Frontend Submissions add on turns your form submissions into front end content with reusable Views: display any form’s submissions as a public directory, a testimonial wall, a photo gallery, a job board, an event timeline, or product reviews, with instant search, pagination, single pages, per field privacy, and approval moderation. Frontend submission display is the one paid add on and it requires the free Narrative Forms plugin. Collect with the form, publish with a View. Learn more at https://narrative-forms.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=free
Narrative Forms uses the Appsero SDK to collect some telemetry data, but only after you confirm it. This helps us troubleshoot problems faster and make product improvements.
The Appsero SDK does not gather any data by default. It only starts collecting basic telemetry when you allow it through the admin notice. We collect the data to ensure a great experience for all of our users.
Integrating the Appsero SDK DOES NOT IMMEDIATELY start gathering data, and never without your confirmation.
Learn more about how Appsero collects and uses this data.
This plugin connects to external services only in these optional cases. Each is off until you enable or allow it.
https://challenges.cloudflare.com/turnstile/v0/api.js to render the widget, and on submit the server posts the token, your secret key, and the visitor IP to https://challenges.cloudflare.com/turnstile/v0/siteverify. Terms: https://www.cloudflare.com/website-terms/ Privacy: https://www.cloudflare.com/privacypolicy/https://api.appsero.com. No form submissions or visitor data are sent. Privacy: https://appsero.com/privacy-policy/https://api.deepseek.com (Privacy: https://cdn.deepseek.com/policies/en-US/deepseek-privacy-policy.html), OpenAI https://api.openai.com (Privacy: https://openai.com/policies/privacy-policy/), OpenRouter https://openrouter.ai (Privacy: https://openrouter.ai/privacy), or any OpenAI compatible endpoint you configure.