PHPackages                             silverstripe/userforms - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. silverstripe/userforms

ActiveSilverstripe-vendormodule[Utility &amp; Helpers](/categories/utility)

silverstripe/userforms
======================

UserForms enables CMS users to create dynamic forms via a drag and drop interface and without getting involved in any PHP code

7.0.6(3mo ago)1321.0M↓12.7%226[86 issues](https://github.com/silverstripe/silverstripe-userforms/issues)[10 PRs](https://github.com/silverstripe/silverstripe-userforms/pulls)20BSD-3-ClausePHPPHP ^8.3CI passing

Since Jul 18Pushed 1mo ago24 watchersCompare

[ Source](https://github.com/silverstripe/silverstripe-userforms)[ Packagist](https://packagist.org/packages/silverstripe/userforms)[ RSS](/packages/silverstripe-userforms/feed)WikiDiscussions 7 Synced 1mo ago

READMEChangelog (10)Dependencies (11)Versions (224)Used By (20)Security (2)

UserForms
=========

[](#userforms)

[![CI](https://github.com/silverstripe/silverstripe-userforms/actions/workflows/ci.yml/badge.svg)](https://github.com/silverstripe/silverstripe-userforms/actions/workflows/ci.yml)[![Silverstripe supported module](https://camo.githubusercontent.com/9b7e93d393a01f6d3091fb30983b870aa863ef076858115faaa1c74b995854ec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73696c7665727374726970652d737570706f727465642d3030373143342e737667)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)

UserForms enables CMS users to create dynamic forms via a drag and drop interface and without getting involved in any PHP code.

Features
--------

[](#features)

- Construct a form using all major form fields (text, email, dropdown, radio, checkbox..)
- Ability to extend userforms from other modules to provide extra fields.
- Ability to email multiple people the form submission
- View submitted submissions and export them to CSV
- Define custom error messages and validation settings
- Optionally display and hide fields using javascript based on users input
- Displays a confirmation message when navigating away from a partially completed form.

Installation
------------

[](#installation)

```
composer require silverstripe/userforms
```

Spam protection
---------------

[](#spam-protection)

This module does not include spam protection out of the box. Without it, it's likely that your submissions could contain a considerable amount of spam. For public facing forms it is encouraged you review and install the following module plus one of the recommended 'verification system' modules outlined in the README.

Read the [SpamProtection Module README](https://github.com/silverstripe/silverstripe-spamprotection/) for details on how to configure this module.

Documentation
-------------

[](#documentation)

- [Index](docs/en/index.md)
- [Installation instructions](docs/en/installation.md)
- [Troubleshooting](docs/en/troubleshooting.md)
- [User Documentation](docs/en/userguide/index.md)

Thanks
------

[](#thanks)

I would like to thank everyone who has contributed to the module, bugfixers, testers, clients who use the module and everyone that submits new features.

A big thanks goes out to [Jan Düsedau](http://eformation.de) for drawing the custom icon set for the form fields.

Versioning
----------

[](#versioning)

This library follows [Semver](http://semver.org). According to Semver, you will be able to upgrade to any minor or patch version of this library without any breaking changes to the public API. Semver also requires that we clearly define the public API for this library.

All methods, with `public` visibility, are part of the public API. All other methods are not part of the public API. Where possible, we'll try to keep `protected` methods backwards-compatible in minor/patch versions, but if you're overriding methods then please test your work before upgrading.

Reporting Issues
----------------

[](#reporting-issues)

Please [create an issue](http://github.com/silverstripe/silverstripe-userforms/issues) for any bugs you've found, or features you're missing.

###  Health Score

73

—

ExcellentBetter than 100% of packages

Maintenance72

Regular maintenance activity

Popularity58

Moderate usage in the ecosystem

Community53

Growing community involvement

Maturity98

Battle-tested with a long release history

 Bus Factor4

4 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~21 days

Recently: every ~10 days

Total

217

Last Release

61d ago

Major Versions

6.4.3 → 7.0.0-rc12025-05-19

6.4.5 → 7.0.12025-08-18

6.4.6 → 7.0.32025-11-06

6.4.x-dev → 7.0.52026-02-04

6.x-dev → 7.0.x-dev2026-02-05

PHP version history (5 changes)5.6.0-rc1PHP &gt;=7.1

5.11.0PHP ^7.3 || ^8.0

5.12.0PHP ^7.4 || ^8.0

6.0.0-beta1PHP ^8.1

7.0.0-alpha1PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/654636?v=4)[Aaron Carlino](/maintainers/unclecheese)[@unclecheese](https://github.com/unclecheese)

![](https://www.gravatar.com/avatar/b0cba8b534e20e6ab4fff555a97b237a18436ebca1446fc0b29c8a8b504038b9?d=identicon)[GuySartorelli](/maintainers/GuySartorelli)

![](https://avatars.githubusercontent.com/u/111025?v=4)[Ingo Schommer](/maintainers/chillu)[@chillu](https://github.com/chillu)

![](https://www.gravatar.com/avatar/a25bc04c5720a36869d5a39c6449dde7eb43e19b7c8e666d5f632d6a9ab440b1?d=identicon)[emteknetnz](/maintainers/emteknetnz)

![](https://www.gravatar.com/avatar/afbb3dcc9ef29c1a6eedd6addcae5fce9ab1271915a85a4c349301b71237368d?d=identicon)[silverstripe-machine01](/maintainers/silverstripe-machine01)

![](https://www.gravatar.com/avatar/be6648e60fbab6f70bfc34dd8c14259562d28a47510a934ea9c01fe98633f3c2?d=identicon)[sminnee](/maintainers/sminnee)

![](https://avatars.githubusercontent.com/u/1168676?v=4)[Maxime Rainville](/maintainers/maxime-rainville)[@maxime-rainville](https://github.com/maxime-rainville)

![](https://avatars.githubusercontent.com/u/101629?v=4)[Will Rossiter](/maintainers/wilr)[@wilr](https://github.com/wilr)

---

Top Contributors

[![robbieaverill](https://avatars.githubusercontent.com/u/5170590?v=4)](https://github.com/robbieaverill "robbieaverill (276 commits)")[![wilr](https://avatars.githubusercontent.com/u/101629?v=4)](https://github.com/wilr "wilr (187 commits)")[![emteknetnz](https://avatars.githubusercontent.com/u/4809037?v=4)](https://github.com/emteknetnz "emteknetnz (181 commits)")[![GuySartorelli](https://avatars.githubusercontent.com/u/36352093?v=4)](https://github.com/GuySartorelli "GuySartorelli (167 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (103 commits)")[![dhensby](https://avatars.githubusercontent.com/u/563596?v=4)](https://github.com/dhensby "dhensby (76 commits)")[![NightJar](https://avatars.githubusercontent.com/u/778003?v=4)](https://github.com/NightJar "NightJar (46 commits)")[![chillu](https://avatars.githubusercontent.com/u/111025?v=4)](https://github.com/chillu "chillu (35 commits)")[![assertchris](https://avatars.githubusercontent.com/u/200609?v=4)](https://github.com/assertchris "assertchris (33 commits)")[![davidmorrisonnz](https://avatars.githubusercontent.com/u/22651645?v=4)](https://github.com/davidmorrisonnz "davidmorrisonnz (31 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (29 commits)")[![mateusz](https://avatars.githubusercontent.com/u/118653?v=4)](https://github.com/mateusz "mateusz (26 commits)")[![kmayo-ss](https://avatars.githubusercontent.com/u/1711912?v=4)](https://github.com/kmayo-ss "kmayo-ss (17 commits)")[![fspringveldt](https://avatars.githubusercontent.com/u/10938392?v=4)](https://github.com/fspringveldt "fspringveldt (14 commits)")[![michalkleiner](https://avatars.githubusercontent.com/u/233342?v=4)](https://github.com/michalkleiner "michalkleiner (14 commits)")[![sabina-talipova](https://avatars.githubusercontent.com/u/87288324?v=4)](https://github.com/sabina-talipova "sabina-talipova (11 commits)")[![sachajudd](https://avatars.githubusercontent.com/u/24258161?v=4)](https://github.com/sachajudd "sachajudd (11 commits)")[![3Dgoo](https://avatars.githubusercontent.com/u/2616373?v=4)](https://github.com/3Dgoo "3Dgoo (10 commits)")[![flashbackzoo](https://avatars.githubusercontent.com/u/878176?v=4)](https://github.com/flashbackzoo "flashbackzoo (9 commits)")[![jyrkij](https://avatars.githubusercontent.com/u/9883?v=4)](https://github.com/jyrkij "jyrkij (8 commits)")

---

Tags

hacktoberfestsilverstripeuserforms

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/silverstripe-userforms/health.svg)

```
[![Health](https://phpackages.com/badges/silverstripe-userforms/health.svg)](https://phpackages.com/packages/silverstripe-userforms)
```

###  Alternatives

[silverstripe/subsites

Run multiple sites from a single SilverStripe install.

65392.9k20](/packages/silverstripe-subsites)[symbiote/silverstripe-advancedworkflow

Adds configurable workflow support to the CMS, with a GUI for creating custom workflow definitions.

46295.2k7](/packages/symbiote-silverstripe-advancedworkflow)[bramdeleeuw/cookieconsent

GDPR compliant cookie bar and consent checker

1511.5k2](/packages/bramdeleeuw-cookieconsent)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
