Skip to content


Formr is a simple, yet powerful PHP form builder which enables you to create and validate your forms in seconds.

If you find Formr useful, please consider starring the project and making a donation. Thank you!

Latest Version on Packagist Total Downloads GitHub stars GitHub forks GitHub issues GitHub license


  • Create complex forms with server-side processing and validation in seconds
  • Built-in support for Bootstrap and Bulma
  • Built-in support for reCAPTCHA v3
  • Built-in POST validation rules, including validating email, regex, comparisons, slugging, and hashing
  • Instantly make one field required, all fields required, or all but one field required
  • Create and validate radio groups and checkbox arrays in seconds
  • Upload images: resize, rename, and create thumbnails
  • Extensible: easily create and save your own field element wrappers
  • Extensible: easily create and save your own dropdown menus
  • Extensible: easily create and save your own form & validation sets
  • Send plain text and HTML emails
  • Generate CSRF tokens and honeypots
  • Object-oriented; supports multiple forms per page
  • Little helpers to assist in building, layout, testing and debugging
  • And a ton of other cool stuff!



Run the following command to install Formr with Composer.

composer require formr/formr

Then include the autoload.php file and create a new form object.

require_once 'vendor/autoload.php';
$form = new Formr\Formr();


Download the .zip file and place the Formr folder in your project, then include the Formr class and create a new form object.

require_once 'Formr/class.formr.php';
$form = new Formr\Formr();


Formr has support for the Bootstrap and Bulma frameworks right out of the box. Just tell Formr which one you want to use when creating a new form and Formr will take care of the rest!

$form = new Formr\Formr('bulma');
$form = new Formr\Formr('bootstrap');
$form = new Formr\Formr('bootstrap4');

Quick Start

1. Create the Form

To use Formr you will need to create a new form object. You can name it anything you like, so let's keep it simple and call it $form.

$form = new Formr\Formr();

There are two arguments we can pass to our new form: the Wrapper, and the Switch. The Wrapper tells Formr how you want your forms to be laid out; such as with Bootstrap, Bulma, or just a simple <div> tag.

$form = new Formr\Formr('bootstrap');

Formr will automatically echo form elements and messages to the screen, and this is usually fine. However, in some instances this is not an option, such as when using a templating framework. In these cases simply pass hush to the Switch parameter and then manually echo your elements and messages.

$form = new Formr\Formr('bootstrap', 'hush');

You can also omit a framework's wrapping div (e.g.; <div class="form-group">) by adding nowrap to the switch parameter.

$form = new Formr\Formr('bootstrap', 'nowrap');

You can use multiple switches by separating each with a comma.

$form = new Formr\Formr('bootstrap', 'hush, nowrap');

2. Build the Form

To build a form, simply enter your form labels as a comma separated string and Formr will build it, complete with opening and closing tags, a submit button, and email validation; plus all form values are retained upon $_POST.


All field elements default to <input type="text">, however you can easily specify another type by adding a pipe character and then the element type.


require_once 'vendor/autoload.php';
$form = new Formr\Formr('bootstrap');

$form->create_form('Name, Email, Comments|textarea');

Produces the following HTML

<form action="/index.php" method="post" accept-charset="utf-8">
    <div id="_name" class="form-group">
        <label class="control-label" for="name">
        <input type="text" name="name" id="name" class="form-control">
    <div id="_email" class="form-group">
        <label class="control-label" for="email">
        <input type="email" name="email" id="email" class="form-control">
    <div id="_comments" class="form-group">
        <label class="control-label" for="comments">
        <textarea name="comments" id="comments" class="form-control"></textarea>
    <div id="_button" class="form-group">
        <label class="sr-only" for="button"></label>
        <button type="submit" name="button" id="button" class="btn btn-primary">

3. Get the Values

After the form has been submitted we need to get its values from PHP's $_POST array. To do this, just enter the form labels into the validate() method and assign it to a variable.

$data = $form->validate('Name, Email, Comments');

Full Example

Copy and paste the following code into a new .php document and see just how fast and easy Formr really is.

A Full Contact Form using Bulma

// include Formr
require_once 'vendor/autoload.php';

// create our form object and use Bulma as our form wrapper
$form = new Formr\Formr('bulma');

// make all fields required
$form->required = '*';

// check if the form has been submitted
if ($form->submitted())
    // get our form values and assign them to a variable
    $data = $form->validate('Name, Email, Comments');

    // show a success message if no errors
    if($form->ok()) {
        $form->success_message = "Thank you, {$data['name']}!";
<!DOCTYPE html>
<html lang="en">
<link rel="stylesheet" href="">
<body class="container">
    <?php $form->messages(); ?>
    <?php $form->create_form('Name, Email, Comments|textarea'); ?>