Skip to main content

Roadmap

Forms is growing from a contact-form builder into an all-in-one form system: one builder that makes contact, lead, registration, application, survey, quiz, order and donation forms, with other extensions adding their own fields and on-submit actions to it. Phase 0 is what already ships.

10 of 60 tasks completeextension v2.0.67

Verified against the extension source on 2026-10-19.

Phase 0 · What Forms already doesDone

7/7

The base every later phase builds on: a drag-and-drop form builder inside the Contact Form element, stored entries, conditional fields, on-submit actions other extensions add to, and ready-made starter forms.

  • Stored entries — Done

    Every submission is kept under Unyson+ → Form Entries, even when the notification email fails: search, status views, date filter, bulk archive or delete, CSV export, a retention period, and the WordPress personal-data export and erase tools.

  • Field types — Done

    Text, textarea, email, website, number, select, radio, checkboxes, date and time, star or score rating, hidden values, consent boxes and private file uploads.

  • Conditional fields — Done

    Any field can be shown only when another field has a given answer. The rule is also enforced on the server, so a hidden field is never checked or collected.

  • On-submit actions — Done

    A per-form list of steps that run after a submission. Forms ships Store entry; the CRM adds Add to the CRM and Membership adds Register member. Any extension can register its own.

  • Starter forms — Done

    Nine ready-made forms in the builder's Templates panel: Contact, Appointment request, Table booking, Quote request, Event registration, Support ticket, Feedback, NPS survey and Newsletter signup.

  • Spam protection — Done

    A hidden honeypot field, Google reCAPTCHA, and a limit on how many forms one visitor can send in ten minutes.

  • AI Assistant abilities — Done

    A connected AI can describe the field types and starters and place a form with its actions. It never sees the entries.

Phase 1 · Form Styles presetsIn progress

3/4

Field styling moves onto presets in Theme Settings, the same rule buttons and boxes already follow, so every form on a site matches and one edit restyles them all. The Contact Form element picks a style; its own Style tab keeps only what belongs to that one form.

  • Form Styles presets in Theme Settings — Done

    Theme Settings → Components → Form Styles: field background, text, border, focus colour and ring, placeholder, label, help, error and choice colours; border width, box or underline, corner radius, height, side padding and text size; label size, weight and case; separate colours for site dark mode; and custom CSS. Ships Standard, Soft, Underline, Rounded and On Dark (for forms on dark sections).

  • Form style picker on the element — Done

    The Contact Form element's Style tab has a Form Style dropdown. Its own field settings remain as "this form only" overrides that win over the preset; width, alignment and spacing stay per form. The submit button keeps using the Button presets.

  • Existing forms keep their look — Done

    Standard reproduces the original field look exactly and is the default, so existing forms render the same. A form whose style was renamed or deleted falls back to plain fields.

  • One style for every form on the site — Planned

    The same Form Styles reach the Newsletter element and Membership's forms, and the Site Converter maps a source site's input styling into a preset.

Phase 2 · Better sending: accessible, instant and trustedPlanned

0/8

The basics every form on every site benefits from, before any new form type: sending without a page reload, errors everyone can find and fix, the sender getting a copy, and stronger spam protection.

  • Send without reloading the page — Planned

    The form sends in the background and shows its message in place; the page no longer reloads and jumps back to the top. Forms still work with JavaScript off, falling back to today's reload.

  • Accessible error messages — Planned

    Each problem is described in words next to its field and linked to it for screen readers (aria-invalid and aria-describedby); a long form gets a summary at the top; focus moves to the first problem; colour is never the only signal. Follows WCAG 2.2 success criteria 3.3.1, 3.3.3 and 1.4.1.

  • Autofill hints — Planned

    Name, email, phone and address fields declare what they hold, so browsers and password managers fill them in and assistive tools can recognise them (WCAG 2.2 success criterion 1.3.5).

  • What happens after sending — Planned

    Show a message, show a message and hide the form, go to a thank-you page, or go to any address, with answers usable in the message or the address. Different outcomes can depend on the answers.

  • A confirmation email to the sender — Planned

    An on-submit action that emails the person who sent the form a copy of their answers or a custom message, with the site's email styling.

  • Smarter notification emails — Planned

    More than one notification per form, CC and BCC, recipients chosen by an answer (sales questions to sales, support to support), and answer tags such as {name} or {all_fields} in the subject and body.

  • Cloudflare Turnstile and hCaptcha — Planned

    Two more spam checks beside reCAPTCHA. Turnstile is free with no usage cap and usually shows nothing to real visitors.

  • Content spam filtering — Planned

    Check submissions against Akismet when it is installed, and against a site list of blocked words, email domains and links. A caught submission is kept as Spam in Entries rather than lost.

Phase 3 · Choose a form type firstPlanned

0/3

The starter forms stop being hidden in the builder's Templates panel. Adding a Contact Form element opens a picker of form types first, then the same builder as today.

  • Starter picker on a new form — Planned

    A new Contact Form element opens with a grid of form types, each with a short preview and its fields listed, plus Blank and the site's own saved forms. Picking one fills the builder and the form's actions; everything stays editable.

  • More starter types — Planned

    Job application, volunteer sign-up, RSVP, lead magnet download, callback request, product enquiry and a short quiz, on top of the nine starters.

  • Describe a form, get a form — Planned

    In the picker, describe the form in a sentence ("a waiver for a surf school with an emergency contact and a signature") and the AI Assistant builds the fields, actions and messages for you to edit.

Phase 4 · The form libraryPlanned

0/4

Forms become things you build once and place anywhere, the model Gravity Forms and WPForms use. Unyson+ → Forms lists every form; the Contact Form element shows one of them.

  • Saved forms — Planned

    A form is stored once, with its fields, settings, actions and style, and keeps a stable id, so entries group by real form instead of by page.

  • Forms screen — Planned

    Unyson+ → Forms, beside Form Entries and Forms Settings: every form with its entry count, last submission and where it is placed. New form starts from the starter picker; duplicate, export and import a form as JSON.

  • The element picks a saved form — Planned

    The Contact Form element chooses a form from the library, so editing it once updates every page that shows it. A form built inside an element keeps working and gets a Save to the library button.

  • Form history and undo — Planned

    Every save of a form is kept, so an earlier version can be compared and restored.

Phase 5 · Longer forms and richer fieldsPlanned

0/10

What application, registration and intake forms need: steps, and fields that collect a person's details properly.

  • Multi-step forms — Planned

    A page-break field splits a form into steps with a progress bar, Back and Next. Each step is checked before moving on, and conditional rules can skip a step.

  • Name field — Planned

    First and last name in one field, stored separately so the CRM and emails can use each part.

  • Phone field — Planned

    A country code and number, checked and stored in one international format.

  • Address field — Planned

    Street, city, region, postcode and country, with the parts stored separately.

  • Section headings and text — Planned

    A heading-and-text block to explain a part of the form between fields. It collects nothing.

  • Repeating groups — Planned

    A set of fields a visitor can add again ("add another guest", "add another job"), each copy stored as its own row.

  • Picture choices, ranking, sliders and grids — Planned

    Choices shown as images, drag-to-rank options, a range slider, and a Likert grid (several statements rated on one scale) for surveys.

  • Pre-filled and piped answers — Planned

    Fill fields from the address, the logged-in user or the CRM contact, and repeat an earlier answer later in the form ("Thanks, {name}. Which date suits you?").

  • One question at a time — Planned

    An optional layout that shows one question per screen, with keyboard navigation and a progress bar. The same form can be shown either way.

  • Floating labels — Planned

    A Form Styles option that places the label inside the field and moves it above while typing, without losing the label for screen readers.

Phase 6 · Calculations and paymentsPlanned

0/6

Forms that work out a price and take the money: quotes, simple orders, deposits and donations, without a shop.

  • Calculated field — Planned

    A total worked out from other answers (quantity × price, options that add to a base price), shown live and recalculated on the server.

  • Product and amount fields — Planned

    A product with a price and quantity, and a pay-what-you-want amount for donations, with suggested amounts.

  • Take payment action — Planned

    An on-submit action that charges the form's total by card through Stripe or through PayPal. The entry records the payment and its status; a failed payment keeps the entry and tells the visitor.

  • Coupons — Planned

    Fixed or percentage discount codes on payment forms, with limits on uses and dates.

  • Recurring payments — Planned

    Monthly or yearly charges for donations and simple subscriptions, cancellable by the payer.

  • Pay later — Planned

    A bank transfer or pay-on-arrival choice that records the amount owed and is marked paid by hand.

Phase 7 · Quizzes, limits and morePlanned

0/9

The remaining form types from the common list, and the tools long or popular forms need.

  • Quiz scoring — Planned

    Points per answer, a total score, and a different message, redirect or CRM tag for each score range. Covers knowledge quizzes and product-finder quizzes.

  • Entry and seat limits — Planned

    Close a form after a number of entries, on a date, or once each choice's seats are taken ("Saturday workshop: 3 places left"), with a message shown when it is full.

  • Save and continue later — Planned

    A visitor can save a long form part-way and get a link by email to finish it.

  • Signature field — Planned

    Draw a signature with a mouse or finger, stored privately with the entry like a file upload.

  • Create a post action — Planned

    Turn a submission into a draft post or a custom post type entry (a listing, a testimonial, an event), with fields mapped to the title, content, featured image and custom fields.

  • Survey results — Planned

    A results view per form: answer counts and charts for choice and rating fields, average scores, NPS, and the trend over time.

  • Send to a webhook action — Planned

    Post a submission's answers as JSON to any URL, for automation tools and other systems.

  • PDF copies of entries — Planned

    Turn an entry into a PDF (a receipt, an application, a signed waiver), attach it to the emails or download it from Entries.

  • Send to a spreadsheet action — Planned

    Add each submission as a row in a Google Sheets spreadsheet.

Phase 8 · See how forms perform and follow upPlanned

0/4

Which forms are seen, started, finished and abandoned, and the tools to act on what comes in.

  • Form analytics — Planned

    Views, starts, completions and the field where people give up, per form and over time. Shares the Visitor Insights data when that extension is on.

  • Unfinished entries — Planned

    Optionally keep what a visitor typed into a form they did not send, so a half-finished quote request can be followed up. Off by default, and stated in the form's privacy notice when on.

  • Working with entries — Planned

    Notes on an entry, assign it to a team member, star it, reply from the entry, and correct an answer with the change logged.

  • Scheduled export and clean-up — Planned

    Email a CSV of new entries every day or week, and set retention per form instead of one site-wide period.

Phase 9 · Show entries on the sitePlanned

0/3

Use what people send as content: directories, listings and testimonials, with an approval step before anything goes public.

  • Entry views — Planned

    An element that shows a form's entries as a table, grid, list, map or calendar, with search, filters and a page per entry. Only the fields chosen for it are shown.

  • Approval before publishing — Planned

    Entries shown in a view wait for approval; an approver gets an email and can approve or reject from it.

  • People edit their own entries — Planned

    A logged-in person can update what they sent (a listing, an application) until it is locked.

Phase 10 · Bookings plug inPlanned

0/2

Reservations stay a separate Bookings extension (availability, nightly or slot pricing, calendar sync). It connects to Forms the way the CRM and Membership do: by adding a field and an action, never by moving booking code into Forms.

  • Dates and availability field — Planned

    Supplied by the Bookings extension: a calendar that greys out taken dates or slots and shows the live price, usable in any form. Planned with that extension.

  • Reserve action — Planned

    Supplied by the Bookings extension: holds the chosen dates when the form is sent and re-checks that they are still free. A booking form is then a normal form with its own extra questions.

How it will feel​

Adding a Contact Form element opens the same form builder as today, with two additions in front of it:

  1. Pick a form type (phase 2). A grid of starters (Contact, Quote request, Event registration and so on), plus Blank and your own saved forms. Picking one fills in the fields and the right actions.
  2. Pick a form style (phase 1). A dropdown of the Form Styles presets from Theme Settings, the same way the submit button already picks a Button preset.

Once the form library lands (phase 3), the element can also show a form that already exists, so one form can appear on many pages and is edited in one place.

Order of work​

  1. Form Styles presets. Small, and every form on the site changes at once.
  2. Better sending: no page reload, accessible error messages (WCAG 2.2), autofill hints, a choice of what happens after sending, a copy to the sender, smarter notifications, and Turnstile, hCaptcha and content spam filtering. Every existing form benefits, so this comes before new form types.
  3. The form-type picker, so the starters are found without opening a Templates panel, plus "describe a form" with the AI Assistant.
  4. The form library, the biggest change: it moves where forms are stored, so existing forms keep working inside their elements and can be moved to the library when wanted.
  5. Longer forms and richer fields: steps, name, phone and address fields, repeating groups, picture choices, ranking, sliders, survey grids, pre-filled answers and a one-question-at-a-time layout.
  6. Calculations and payments, with coupons, recurring payments and pay-later, which also cover donations and simple orders.
  7. Quizzes, limits, save and continue, signatures, create-a-post, survey results, PDFs, spreadsheets and webhooks.
  8. Analytics and follow-up: where people give up, optional unfinished entries, notes and assignment, scheduled exports.
  9. Showing entries on the site: directories and listings with an approval step.
  10. Bookings, which stays its own extension and plugs in with a field and an action.

Already covered elsewhere​

Some features other form builders sell as add-ons already exist in Unyson+ through other extensions, so they are not repeated here: email-list signups, double opt-in and CRM records come from the CRM, user registration and member-only forms from Membership, and webhooks to other systems from the CRM's webhooks module as well as the planned form action.

How this page stays current​

Status is not ticked by hand. src/data/forms-roadmap.json lists every task with a detect block naming the files (and, where needed, code symbols) that make it real, and scripts/gen-roadmap.mjs checks them against the extension's source tree:

ResultStatus
Every file and symbol foundDone
Some found, some missingIn progress
None foundPlanned
npm run roadmap:forms # scan and rewrite the JSON
npm run roadmap:forms -- --dry # report only, write nothing
npm run roadmap:forms -- --check # exit 1 if stale

The detect paths double as the extension's agreed file layout, decided before the code is written: core classes in includes/<area>/, each field type in includes/option-types/form-builder/items/<type>/, each on-submit step in includes/actions/, and the element in extensions/contact-forms/shortcodes/contact-form/.