Form builder — Veldform — vanrossum.dev                    

       vanrossum.dev 

Form builder — Veldform
=======================

  [home](https://vanrossum.dev)/[veldform](https://vanrossum.dev/products/veldform)/docs 

Veldform / Docs

Form builder
============

   ![Form builder video walkthrough](https://i.vimeocdn.com/video/2178711469-0adf4998fd9fea2bf83fc7c6aa5ea784ff6f4a34629fbd77d4d1468727645107-d_295x166?region=us) ▶      

All your forms live under the `Forms` menu in the WordPress admin. This is where you create, edit and duplicate forms — and where you'll find the entries and statistics of each form.

- [Creating a form](#creating-a-form)
- [Builder](#builder)
    - [Field settings](#field-settings)
    - [Conditional logic](#conditional-logic)
    - [Multi-step forms](#multi-step-forms)
    - [File uploads](#file-uploads)
    - [Preview and publishing](#preview-and-publishing)
- [Settings](#settings)
- [Actions](#actions)
- [Entries](#entries)
- [Statistics](#statistics)
- [Embedding the form](#embedding-the-form)

Creating a form
---------------

To create a form, click `Add new form`. You can then choose how to start:

- **Blank form** — start from scratch
- **Build with AI** — describe the form you want, and a ready-to-edit form is generated
- **A template** — contact form, newsletter signup, job application, event registration, feedback survey or a donation form

The AI option only shows up when your site has the WordPress AI Client (WordPress 7.0+) with a provider configured. Describe your form — fields, requirements, who should be notified — and Veldform drops a complete form on the canvas for you to review and save.

   ![Build with AI walkthrough video walkthrough](https://i.vimeocdn.com/video/2178711463-ab207bacd411c9a14f6e64d99bfe9a735fe9ad8a535f5fcdde8d8d39e1496ea3-d_295x166?region=us) ▶      

Each form in the overview has a menu with a few handy tools:

- **Page with form** — creates a draft page containing the form and opens it in the editor. If the form is already on a page, that page is opened instead.
- **Duplicate** — copies the form, including its settings and actions.
- **Export JSON** — downloads the form as a JSON file. Use `Import` (top of the overview) on another site to recreate it — imported forms start out non-public, so you can review before going live.

Builder
-------

The `Build` tab is where you compose your form. The canvas in the middle shows a live preview of your fields; the panel on the right has two tabs: `Add field` and `Field settings`.

To add a field, drag it from the palette onto the canvas — or just click it to append it to the bottom. Clicking a field on the canvas selects it and opens its settings. The toolbar above a selected field lets you reorder (drag, or move up/down), duplicate and delete it.

The following field types are available:

FieldDescriptionTextSingle line text inputEmailEmail address, validated server-sideParagraphMultiline textNumberNumeric inputPhonePhone numberWebsiteURLNameComposite field — toggle the parts you need (prefix, first, middle, last)AddressComposite field — toggle the parts you need (street, city, state, postal code, country)Date / Time / Date &amp; timeWith optional earliest/latest limitsDropdownChoice field, optionally with multiple selectionsMultiple choiceRadio buttonsCheckboxesMultiple checkboxesCheckboxA single consent/acceptance checkboxRich textText area with a limited toolbar (bold, italic, link, list)File uploadOptionally multiple files, with a drag &amp; drop zone, file type and size limitsProduct / priceA priced item — see [Payments](/products/veldform/docs/payments)Order totalDisplays the running total of all product fieldsHidden fieldNot visible to the visitor, submits a default valueHeadingH2, H3 or H4HTMLA block of custom HTMLSubmitA submit button (overrides the default button)Page breakStarts a new step — this is how you build multi-step forms### Field settings

Every field has a `Label` and a `Required` checkbox, plus options specific to its type. At the bottom of the settings panel you'll find a row of chips, each opening a focused panel:

- **Logic** — show or hide the field based on other fields
- **Description** — help text shown under the label (also read by screen readers)
- **Default** — a default value, either static, from a URL query parameter, or from the logged-in user
- **Prefill from API** — fill the field from an external API, see [Custom API's](/products/veldform/docs/custom-apis)
- **Layout** — the field width (full, two thirds, half, third or quarter) and an `Inline with previous field` toggle to place fields side by side

### Conditional logic

Fields can be shown or hidden based on the values of other fields. Choose `Show` or `Hide`, whether `all` or `any` of the rules should match, and add rules like `[field] [operator] [value]`.

The available operators: is, is not, contains, does not contain, starts with, ends with, greater than, less than, is at least, is at most, is empty, is not empty, is one of, is not one of.

Conditional logic runs live in the browser, but is always re-checked on the server — so it can't be bypassed.

### Multi-step forms

To split a form into steps, add a `Page break` field wherever a new step should start. Everything above the first page break becomes step one, and so on.

The visitor sees one step at a time, with a progress indicator on top and Previous/Next buttons below — the button texts are configurable per page break. Clicking Next validates the current step before advancing, so visitors catch mistakes early instead of at the very end. The server still validates the whole form on submit, and if it finds an error, the form reopens on the first step that has one.

### File uploads

The `File upload` field accepts pdf, doc(x), jpg, jpeg, png, gif, txt, csv, xls(x) and zip files by default, with a maximum of 5 MB per file. You can change the allowed types, the size limit, allow multiple files (up to 5 by default) and enable a drag &amp; drop zone in the field settings.

A few things to know about how files are handled:

- Uploaded files are stored **outside the public uploads folder** — there is no guessable URL, and downloads are only served to logged-in users who can view entries.
- You'll find the files on the [entry](/products/veldform/docs/entries); deleting the entry deletes the files too.
- Notification emails can't attach files. Use the `{{ entry.url }}` [merge tag](/products/veldform/docs/merge-tags) in your notification to link to the entry instead.

### Preview and publishing

The `Preview` button in the header shows the real front-end form. Next to it sits the `Public` toggle: a form only renders and accepts submissions when it's public.

Settings
--------

The `Settings` tab holds the form-wide options:

- **Submit button** — the button text. If you place a Submit field on the form, its own text is used instead.
- **Confirmation** — what the visitor sees after a successful submit. Either show a message, or redirect to a URL. Both support [merge tags](/products/veldform/docs/merge-tags).
- **Currency** — the currency for product prices on this form. Leave blank to use the global default.
- **Form visibility** — only show (and accept) the form when the request meets certain conditions, based on query parameters or the logged-in user. When the conditions aren't met, you can show a message or hide the form entirely. Note: logged-in user conditions are enforced on submit too, but query-parameter conditions only check that the parameter is present — they are convenience, not access control.
- **Prefill from API** — fetch a record once when the form loads and fill fields from it. See [Custom API's](/products/veldform/docs/custom-apis).
- **Entries** — whether submissions are stored as entries. Turn this off to only run actions.
- **Spam protection** — whether submissions are verified with the site-wide captcha. See [Anti-spam](/products/veldform/docs/anti-spam).

Actions
-------

The `Actions` tab is where you define what happens when the form is submitted — sending notifications, calling APIs, taking payments and more. This is covered in detail on the [Actions](/products/veldform/docs/actions) page.

Entries
-------

The `Entries` tab shows the stored submissions of the form. See the [Entries](/products/veldform/docs/entries) page.

Statistics
----------

The `Stats` tab gives you a quick look at how the form is doing. Pick a range (last 7, 30, 90 days or a year) and you'll see:

- The number of submissions in the range, and all time
- A revenue tile per currency when the form takes payments (paid amount, refunds and the net result)
- A submissions-per-day chart
- For every dropdown, radio and checkbox field: how the answers are distributed, with counts and percentages

Note: page views and conversion rate are not tracked yet.

Embedding the form
------------------

There are three ways to put a form on your site — they all produce the exact same output:

- **Block** — add the Veldform block in the editor and pick your form
- **Shortcode** — `[veldform id="1"]`, optionally with `title="1"` to show the form title. You can copy the shortcode from the forms overview.
- **Template tag** — for theme developers: `veldform_render( 1 );`

   © 2026 Jeffrey van Rossum · [privacy](https://vanrossum.dev/privacy) · [terms](https://vanrossum.dev/terms) · [cookies](https://vanrossum.dev/cookies) [𝕏](https://x.com/jeffreyrossum) [YouTube](https://www.youtube.com/@jeffrey.rossum) [GitHub](https://github.com/jeffreyvr) [LinkedIn](https://www.linkedin.com/in/jeffrey-van-rossum-97b27321) [Instagram](https://www.instagram.com/jeffrey.rossum/) [Nomads](https://www.nomads.com/@jeffreyrossum/) [Unsplash](https://unsplash.com/@jeffreyrossum) 

 made with ☕
