Skip to content
● Meet Grav Guard: keep every Grav site you run secure and up to date, all from one place. Free for up to 3 sites. Read more →
Premium / Forms Pro
Premium Plugin · v2.0.0

Forms Pro

Build any form visually, and keep it plain YAML

Forms Pro is a drag-and-drop form builder for Admin Next. You build a form by dragging fields onto a canvas, and Forms Pro saves it as ordinary Form plugin YAML, the same fields, buttons and process you would write by hand. So validation, nonces, file uploads and every process action you already know keep working, and a form you edit in a text editor still opens in the builder. On top of that you get 11 pro fields (name, address, phone, rating, slider, rich text, date and time pickers, calculation, recipients and a repeater), multi-step forms, conditional logic that is enforced on the server as well as in the browser, entries you can search, star, annotate and export, email notifications with merge tags, webhooks, and a calculator mode for live quote, loan and conversion calculators that never submit and keep your pages cached. If you have been holding on to a WordPress site just because of a forms plugin, this is the piece that was missing.

Grav 2.0+
Live Demo Documentation

Forms Pro is built for Grav 2 and requires the free API, Admin Next, Form (9.2.1 or newer) and Email plugins. It is not compatible with Grav 1.7.

Everything you need. Nothing you don’t.

Over 101 distinct features and integrations, out of the box.

The Form Builder

Drag it, drop it, and it's still YAML

Open Forms Pro in the Admin Next sidebar and you get three columns: the field palette on the left, your form in the middle, and the properties of whatever you clicked on the right. Drag a field in, click its label to rename it, add options right on the canvas, and drop fields into columns, tabs, fieldsets or steps. The property panel uses the same blueprint vocabulary as the rest of Grav, so a slider asks for its minimum, maximum and step, and a dropdown asks for its options. When you save, the builder writes a clean YAML file to user/data/forms-pro/forms/, and that file is the whole form.

The Forms Pro builder in Admin Next with the field palette, a multi-step job application on the canvas and a slider field selected in the property panel
01
49 field types in the palette: the Form plugin's 38 plus the 11 Forms Pro fields, grouped as Basic, Choice, Date & Time, Uploads, Layout, Pro Fields, Security and Advanced, with a search box at the top.
02
Search the palette: type phone or upload and the palette narrows to the fields that match.
03
Nested layouts: columns, tabs, fieldsets and sections, as deep as you need, with fields dragged in and out of them.
04
Inline editing: rename a label, and add or edit options, without leaving the canvas.
05
Undo and redo for every change, plus duplicate and delete on each field's toolbar.
06
Every option in one panel: label, field name, help text and placeholder under General, then Options, Validation, Advanced and Conditions, each folded away until you need it.
07
Field names you control: a field takes its name from its label, and the pencil beside it lets you change it to whatever your notifications and exports should use.
08
Save from the keyboard with Cmd+S or Ctrl+S, like everywhere else in Admin Next.
09
Fields look like fields on the canvas, and a calculation shows its formula right under it.
10
Convert to multi-step in one click, which wraps your fields in a first step that you then split up.
11
No lock-in: forms are standard form: YAML in user/data/forms-pro/forms/. Edit one by hand, save it, and the builder opens it without losing a thing.
12
Six tabs per form: Build, Settings, Logic, Actions, Entries and Embed, each with its own address in Admin Next, so a form's entries are a link you can bookmark.
13
Permission-aware: an account that can read forms but not change them gets the builder in read-only mode, with nothing to accidentally drag.

Pro Fields

The fields the Form plugin never had

The Form plugin covers the basics well, and Forms Pro keeps every one of its fields. The 11 pro fields fill the gaps people kept asking about: a proper name field, a full address, a phone number with a country code, star ratings, sliders, rich text, friendly date and time pickers, live calculations, recipient routing and a repeater for lists of things. Here a workshop booking takes any number of attendees, works out the total with a discount for five seats or more, and asks for a quick star rating.

A workshop booking form with a repeater of attendees, a live total with a group discount and a star rating
01
Name: prefix, first, middle, last and suffix, each one optional, stored as separate values so you can say Hi Maya in an email.
02
Address: street, second line, city, state or province, postal code and country, stacked or inline.
03
Phone: a country code picker with a default country, and an optional pattern to check the number against.
04
Rating: stars or hearts, any maximum, half ratings if you want them, and the value shown beside them.
05
Slider: minimum, maximum and step, a prefix or suffix like $ or yrs, and the current value shown as you drag.
06
Rich text: a basic or standard toolbar, and everything a visitor types is cleaned against an allowlist before it is stored.
07
Date picker and time picker: date formats, earliest and latest dates, weekends switched off, an optional time, 24-hour clocks and minute steps.
08
Calculation: a live result from a formula, shown as a number, currency or percentage, and worked out again on the server when the form is sent. More on these in Calculators below.
09
Recipients: the visitor chooses who should read their message, and the email goes to the right address without that address ever reaching the browser.
10
Repeater: a group of fields the visitor can add rows of, with a minimum and maximum, your own button and row labels, and drag to reorder. A calculation inside a repeater works out each row on its own.
11
Signature, color, avatar, FilePond and the rest of the Form plugin's fields sit in the same palette, so one builder covers every field you have.
12
Grouped dropdowns: the Form plugin's option groups have their own entry in the palette, for long lists that read better in sections.

Multi-Step Forms

Long forms people actually finish

A job application or a booking form with twenty questions on one page looks like work. Split it into steps and people get through it. Each step has a title and a short description, and Forms Pro checks the fields on a step before it lets the visitor move on, so nobody finds out about a mistake on step one after pressing send on step four. There is still only one submit, at the end, and the server checks everything again when it arrives.

Step two of a four-step job application, with numbered circles, a finished first step and a relocation question that appeared after choosing to work in the studio
01
Three progress styles: a progress bar with Step 2 of 4, numbered circles with titles, or tabs.
02
Checks on every step: required fields, email addresses, number ranges and patterns are checked before Next does anything.
03
Previous and Next buttons on each step, and the form's own submit button on the last one.
04
A title and description per step, shown above its fields, so each step explains what it's asking for.
05
Nothing half-finished is stored: an entry is saved once, when the last step is sent, so you never wade through abandoned first steps.
06
Logic works across steps: a field on step three can depend on an answer from step one.
07
Steps in the builder: rename a step where it sits, move it left or right, add one, or remove them all and go back to a single page.
08
Works at phone width: the circles shrink to numbers and every field stacks into one column.

Conditional Logic

Ask only what matters

The Logic tab reads like a sentence: show Project reference when any of these rules match: Who should read this? is An existing project, or Who should read this? is Billing. Pick the field, pick show or hide, choose all or any, and add rules. And this isn't only a browser trick. The server runs the same rules when the form is sent, so a hidden field can't hold up a submission by being required, and whatever a visitor typed into a field they then hid is thrown away before any action sees it.

The Logic tab with two rules: show the project reference for existing projects or billing, and show the budget for new projects
01
Show or hide any field when all or any of its rules match.
02
Ten operators: is, is not, contains, doesn't contain, starts with, ends with, greater than, less than, is empty and is not empty.
03
Updates as people type: a field appears the moment the answer that needs it is given, and goes away again if the answer changes.
04
Hidden fields don't block steps: on a multi-step form, Next skips the checks on fields that are hidden.
05
Pick values from a list: for dropdowns, radios and recipients, the rule offers the field's own options instead of a text box.
06
Enforced on the server: hidden fields lose their required check and their data is removed before notifications, webhooks or storage run.
07
Conditions on notifications too: add the same kind of rules to a notification in the form's YAML, and it only goes out when they match.
08
Kept in the YAML as conditions: on the field, so hand-written rules show up in the Logic tab and the other way round.

Calculators & Formulas

Live calculators that stay cached

This is the part I'm most pleased with. Add Calculation fields to any form and set a formula like quantity * price, and the result updates as people type. Then switch on Calculator Mode and the form becomes a pure calculator: no buttons, no actions, nothing is ever sent, and because there's nothing per-visitor in it, the page stays in Grav's cache like any other page. Loan repayments, quotes, shipping costs, BMI: if you were running one of these on WordPress with Calculated Fields Form, WPForms or Gravity Forms, you can build it here.

The formula editor for a monthly loan repayment, with clickable fields, a valid formula and a Try it box giving $1,498.12
01
A formula editor in the property panel: click a field or a function to insert it, and errors show up inline as you type.
02
Try it: enter test values for the fields the formula uses and see the result right there, before the form is anywhere near a page.
03
Real functions: IF, ROUND, PREC, FLOOR, CEIL, ABS, SQRT, POW, MIN, MAX, SUM, AVG and PI, plus + - * / %, comparisons, &&, ||, ! and condition ? a : b.
04
Calculations that use calculations: they run in the right order on their own, and a loop is caught when you save.
05
Checked when you save: a formula that doesn't parse, names a field that doesn't exist or loops back on itself is refused, with the reason.
06
Numbers in your site's format: results are formatted for the site's language, so 1,498.12 in English is 1.498,12 in German, with an optional prefix or suffix and decimal places.
07
Show the working: switch on Show Formula and visitors see how a result is worked out under it.
08
Empty until filled: choose whether a result stays empty until the fields it needs have values, instead of showing a zero.
09
Safe with bad input: a division by zero or a word where a number should be gives an empty result instead of an error.
10
Rows calculate on their own: a calculation inside a repeater works out each row from that row's fields, and can still use a field outside the repeater, like a tax rate.
11
Never trusted: on a form that does submit, the server works out every calculation again, so a total edited in the browser's developer tools is simply replaced.

Entries

Every submission, readable

Add the Store Submission action and every submission lands in the form's Entries tab. The list shows who sent it, when and whether anyone has read it, and clicking one opens it beside the list instead of on a new page, so working through a morning's enquiries is quick. Answers are shown the way people gave them: option labels instead of keys, names and addresses joined up, rich text as text, and uploaded files as links you can download.

The Entries tab of a contact form with nine entries, two starred, and one open beside the list with its answers and a note
01
Search, filters and stars: search the answers, filter by All, New or Read, and show only starred entries.
02
Notes on each entry, saved as soon as you click away, for the called them on Tuesday details.
03
Bulk actions: select entries and mark them read or unread, star or unstar them, or delete them.
04
CSV and JSON export of a form's entries, with values that start like a spreadsheet formula escaped so an export can't run anything when it is opened.
05
File downloads straight from the entry, through Admin Next, with the file's name and size.
06
An unread badge on Forms Pro in the Admin Next sidebar, and an Entries overview with the new count for each form.
07
Technical details folded away under each entry: the IP address and browser, both of which you can stop storing in the plugin settings.
08
Previous and next arrows to step through entries without going back to the list.
09
New or Read on every entry, changed from the entry itself or for a whole selection at once.
10
An entries-only section for accounts that handle submissions but should never touch a form.

Notifications & Recipient Routing

The right inbox, without exposing it

A contact form usually needs to reach more than one inbox. Add a Recipients field, give each choice a label and an email address, and use {{ recipients.department }} as the notification's To address. The visitor picks Billing and the email goes to accounts. The addresses live in the form definition on the server and never appear in the page, so spammers can't harvest them, and an address someone sneaks into the posted data is ignored.

A Recipients field with three choices, each with its own email address, and the merge tag to use in a notification
01
Several notifications per form: one to your team, one confirming receipt to the visitor, one to a manager only when a rule matches.
02
Merge tags in every line: {{ form.value.email }} for any field, {{ all_fields }} for the lot, plus the form name, the page title and its address, with a picker that lists them so you don't have to remember them.
03
From, Reply-To, Cc and Bcc, so a reply to the notification goes straight to the visitor.
04
HTML or plain text, and plain text that isn't full of escaped characters.
05
Attach uploaded files to a notification with one switch.
06
A switch per notification, so you can turn one off for a while without deleting it.
07
A sensible default: leave the body empty and the email lists every answer with its label.
08
One failure doesn't stop the rest: a notification that can't be sent is logged, and the others still go out.
09
Conditions on a notification, written in the form's YAML with the same rules the Logic tab uses.
10
Recipients your way: a dropdown, radio buttons or checkboxes, with Allow Several sending to every address the visitor ticks.
11
Sent through the Email plugin, so SMTP, Mailgun, Postmark, SendGrid or whatever you already use just works.

Actions & Webhooks

What happens after Send

The Actions tab is the form's process: list drawn as cards, in the order they run. Validation actions like captchas go first, redirects and page displays go last, and everything else sits in between in the order you choose. Each card has its own options. The Webhook action sends each submission as JSON to a URL, which is how you get leads into a CRM, a Slack workflow, Zapier or Make, or your own little service.

The Actions tab with a webhook posting to a CRM, followed by a confirmation message and a form reset
01
18 actions: the Form plugin's 15 (email, save, message, redirect, display, reset, upload, captchas and the rest) plus Store Submission, Notifications and Webhook from Forms Pro.
02
Webhooks with POST, PUT or PATCH, custom headers for API keys, an optional IP address, and a timeout of up to 30 seconds.
03
Webhooks that can't be turned against you: internal, private and cloud metadata addresses are refused, the request goes to the address that was checked, and redirects are never followed. A switch in the plugin settings allows private addresses when you really need one.
04
A failed webhook never fails the submission: it is logged, and the visitor still gets their thank-you.
05
Settings come from the form only: nothing a visitor posts can change a webhook's address or headers.
06
Reorder with the arrows on each card, and switch an action on or off without removing it.
07
Merge tags in messages, so the thank-you can say Thanks, Maya.
08
The call action stays hidden unless you switch on Expose Call Action, because running PHP from a form is something you should choose on purpose.

Spam Protection & Form Settings

One switch per decision

The Settings tab collects the decisions that used to mean looking up YAML keys: the submit button's label, a reset button, where errors appear, whether the browser checks fields first, whether a refresh can send the form twice and whether it sends without reloading the page. Spam protection lives here too. Switch on the honeypot and pick a challenge, and Forms Pro adds both the field that draws it and the action that checks it, because one without the other protects nothing.

The Settings tab with the submit button label, sending without reloading the page and a Cap proof-of-work challenge
01
Challenges: the Form plugin's basic captcha, reCAPTCHA, Cloudflare Turnstile or Cap, a proof-of-work check that runs on your own site and calls no third party.
02
A honeypot field that bots fill in and people never see.
03
Send without reloading the page, with the thank-you message shown in place.
04
Errors next to fields instead of in a list at the top.
05
Prevent resending on refresh, so a reload after sending doesn't create a second entry.
06
Form title and description, shown on the page or not.
07
Calculator Mode switch, which greys out everything a calculator doesn't need.
08
reCAPTCHA and Turnstile keys stay in the Form plugin's settings, with a link straight to them from the form.
09
Custom CSS classes on the form, under Advanced, for when one form needs to look different.

Embedding, Permissions & Developers

A form lives outside any one page, so you can use the same form on several pages and its entries stay together. The Embed tab gives you the snippet for whichever way you like to work.

01
Three ways to embed: the shortcode [forms-pro name="contact" /] in page content, {{ forms_pro('contact') }} in Twig, or forms_pro: contact in a page's frontmatter.
02
Caching handled for you: pages with a form are kept out of the page cache so tokens and validation stay per visitor, and calculator pages stay cached.
03
Works with Editor Pro and any shortcode-aware editor.
04
The same form on several pages, with every entry kept together under that one form.
05
Its own API: the builder and entries run on Forms Pro endpoints in the API plugin, with the same permissions as the screens.
06
Five permissions: access Forms Pro, read forms, change forms, read entries and manage entries, granted to your Grav groups in Admin Next.
07
Your data stays on your server: forms and entries are YAML files under user/data/forms-pro/, so they back up and move with the rest of user/. There's no database to set up.
08
Your theme, your styles: the built-in CSS follows Pico-based themes like Quark2 in light and dark, and you can switch it off and style everything yourself.
09
Add your own fields and actions: another plugin drops a YAML manifest in forms-pro/fields/ or forms-pro/actions/ and it appears in the builder, with an onFormsProRegisterActions event for the code that runs on submit.
10
Fully translatable: the builder, the field catalog and the server's messages all come from the plugin's language file.
11
A short settings page: built-in CSS on or off, store senders' IP addresses and browsers or not, the shortcode on or off, private webhook addresses and the call action, and nothing else to worry about.
Calculators that don't need WordPress

Calculators that don't need WordPress

A loan calculator, a quote estimator, a shipping cost table: the numbers change as people type, formatted the way your visitors expect. Calculator Mode never submits, so there's no token in the page and nothing per visitor, which means the page stays in Grav's cache and loads as fast as any other. The formulas use IF, ROUND, POW, MIN and MAX, so moving a calculator over from Calculated Fields Form is mostly a matter of copying the formula.

Every submission, readable

An entry shows answers the way the visitor gave them: their name, their city and state, the role they picked rather than its key, the years from the slider and the rich text they wrote. Uploaded files are download links with the file size. Star the good ones, add a note, mark it read, and step to the next with the arrows.

Every submission, readable
Comfortable at phone width

Comfortable at phone width

Most forms are filled in on a phone, so every Forms Pro field stacks into one column on a small screen, the step circles shrink to numbers, and sliders, pickers and phone fields stay big enough for a thumb. The styles follow your theme's own colors in light and dark, and if you'd rather do it all yourself, switch the built-in CSS off.

Ask only what matters

Choose An existing project and a Project reference field appears. Choose New project and you're asked for a budget instead. Conditional logic keeps a form short for everyone, and because the server runs the same rules, a hidden field never blocks a submission and never sneaks into an email.

Ask only what matters
Notifications that go to the right person

Notifications that go to the right person

Each notification is a card with To, Subject and Body, and a merge tag picker on every line. Send the team an email with {{ all_fields }}, send the visitor a friendly receipt, and route the team email with {{ recipients.department }} so sales, support and billing each get their own. A Cap check sits first, so spam is stopped before anything is stored or sent.

Right at home in Admin Next

Forms Pro is built into Admin Next, not bolted on beside it. It uses the same sidebar, the same light and dark modes, the same keyboard shortcuts for saving, and the same permissions. Here a repeater of attendees is selected, with its minimum and maximum rows, button label and reordering switch in the panel on the right.

Right at home in Admin Next

Your forms, on your own site

I've lost count of the people who told me they would move their site to Grav tomorrow, except for one thing: the forms. A quote calculator, a multi-page application, a contact form that emails the right department. With Forms Pro you build them visually in Admin Next, the entries stay on your server, and the form itself is a YAML file you can read, edit and keep in git.

Up and running

  1. Install the plugin along with the API, Admin Next, Form and Email plugins, and enable it.
  2. Open Forms Pro in the Admin Next sidebar, click New Form, and drag in your fields.
  3. On the Actions tab, make sure Store Submission is there to keep entries, and add a Notification so you hear about them.
  4. Copy the shortcode from the Embed tab into any page.
  5. Give staff who only answer submissions the read and manage entries permissions, and they get an Entries section without the builder.

Three ways to put a form on a page

TWIG
[forms-pro name="contact" /]       {# shortcode in page content #}

{{ forms_pro('contact') }}         {# Twig in a template #}

forms_pro: contact                 {# page frontmatter, with a form template #}

Full setup and configuration documentation lives on the Learn site.

A peek at sites running Forms Pro.

Frequently Asked Questions

The most commonly asked questions about the Forms Pro plugin

Is this a one-time purchase or a subscription?

Forms Pro is a one-time purchase. You get all future updates and new features for free as long as your license stays active. There's no limit on the number of forms, fields or entries.

Do my existing Form plugin forms keep working?

Yes. Forms Pro doesn't touch forms defined in your pages' frontmatter, and the Form plugin keeps processing them exactly as before. Forms Pro forms use the same fields, buttons and process vocabulary, so moving one over is a matter of copying those into a file in user/data/forms-pro/forms/ and opening it in the builder.

What happens to my forms if I stop using Forms Pro?

Your forms are YAML files you can read and edit, and every standard field and action in them is plain Form plugin YAML. The pro fields (name, address, rating, repeater and the rest) and the Forms Pro actions need Forms Pro to render and run, so those are the parts you would replace. Your entries are YAML files too, and you can export them as CSV or JSON at any time.

I'm moving off WordPress. Can I rebuild my calculators?

Yes, and that's a big part of why Calculator Mode exists. If you used Calculated Fields Form, WPForms or Gravity Forms for quotes, loan payments or shipping costs, the formulas will look familiar: field names, arithmetic, IF, ROUND, MIN, MAX, POW and comparisons. There's no importer, so you rebuild each form in the builder, but the Try it box lets you check every formula against the numbers your old calculator gave before it goes live.

Does Forms Pro work on Grav 1.7?

No. Forms Pro is built for Grav 2 and Admin Next, and it needs the API plugin for the builder. If you are still on 1.7, take a look at the Migration chapter on the Learn site.

Where are submissions stored? Do I need a database?

No database. Each entry is a YAML file under user/data/forms-pro/submissions/<form>/, with a small index beside it so the list stays quick. Uploaded files go wherever the file field's destination points. It all backs up and moves with your site like the rest of user/.

By default Forms Pro also stores each sender's IP address and browser. Switch either off in the plugin settings if you don't want them.

Can people upload files?

Yes. The Form plugin's File Upload and FilePond fields are both in the palette, with a list of accepted file types, a size limit and a destination folder. Uploaded files can be attached to notifications with one switch, and each entry links to its files so you can download them from Admin Next.

Can I use the same form on more than one page?

Yes. A form lives in its own file, outside any page, so embed it wherever you like with the shortcode, Twig or a page header. Every submission ends up in the same list of entries, whichever page it came from.

Will visitors see our email addresses?

No. A Recipients field only sends the choice's key to the browser. The server looks up the address in the form definition when the form is sent, and an address included in the posted data is never used.

Does a form stop my page from being cached?

A page with a regular form is kept out of the page cache, because each visitor needs their own security token and their own validation messages. A form in Calculator Mode has neither, so its page stays cached like any other.

Can a client handle entries without being able to change forms?

Yes. Give their group the permissions to read and manage entries, and leave out the ones for changing forms. They get an Entries section in Admin Next with search, stars, notes and export, and no builder at all. An account that can read forms but not change them sees the builder in read-only mode.

How does it look with my theme?

Forms Pro's fields use your theme's own form styles wherever it can. On a Pico-based theme such as Quark2 they pick up Pico's colors, borders and spacing in light and dark mode with no work at all, and on other themes they fall back to neutral defaults. If you'd rather style everything yourself, switch off Built-in CSS in the plugin settings, and every field keeps plain, predictable class names to work with.

What does Forms Pro need to run?

Grav 2.0.4 or newer, PHP 8.3 or newer, and these free plugins:

  • API 1.0.8 or later, for the builder and entries
  • Admin Next 2.0.11 or later, where the builder lives
  • Form 9.2.1 or later, which processes every form
  • Email 5.0.1 or later, for notifications and the email action
Can I use Forms Pro on multiple sites?

Per the Grav Premium License, you need a license for each site. Development and staging copies of the same site are covered by the same license. Get in touch if you need bulk pricing.

Forms Pro Changelog

v2.0.0

49 minutes ago

    • First release for Grav 2 and Admin Next: a drag-and-drop form builder that saves ordinary Form plugin YAML, so hand-edited forms keep working
    • Build forms visually with columns, tabs, fieldsets and steps, inline label and option editing, undo and redo, and a property panel for every field
    • Eleven pro fields: name, address, phone, rating, slider, rich text, date picker, time picker, calculation, recipients and repeater
    • Multi-step forms with a progress bar, numbered circles or tabs, and checks on each step before moving on
    • Show and hide fields with rules in the Logic tab, enforced in the browser and on the server
    • A form Settings tab for the submit and reset buttons, error display, sending without a page reload, the honeypot and a challenge (basic, reCAPTCHA, Turnstile or Cap)
    • Entries in Admin Next with search, filters, stars, notes, bulk actions, CSV and JSON export, readable details, file downloads and an unread badge
    • Notifications with several emails per form, merge tags, conditions, attachments, and routing to a recipient the visitor picks
    • Webhooks that send each submission as JSON, with custom headers, and refuse internal addresses unless you allow them
    • Calculator mode for live calculators that never submit, with formulas that support IF, ROUND, comparisons and other functions, results in the site's number format, and pages that stay cached
    • A formula editor in the builder with clickable fields and functions, inline errors and a Try it box
    • Permission-aware admin: read-only accounts can't change forms, and an Entries section for accounts that only handle submissions
    • The builder, field catalog and server messages are fully translatable
    • Other plugins can add their own fields and actions with a YAML file and an event