<spiffworkflow:instructionsForEndUser>This is a simple form with pre-filled default values. All fields are required. The Age range is limited to sane values. You can test out validation by:
1. entering an age of greater than 130, or less than 18.
2. not providing a first name
3. providing a bio that is less than 10 characters long.
*Please Note: The phone number is intentionally invalid - it wants the number in international notation, and demonstrates the ability to define complex requirements for fields using a regular expression syntax.*</spiffworkflow:instructionsForEndUser>
Forms seem simple enough. But it depends greatly on your expectations. Many of the attractive / intuitive forms you encounter on the web are custom built using the JavaScript programming language - and designed for a specific circumstance and need.
There are an insane number of websites that promise easy form building, try googleing for "Easy form builder" and bask the warm glow of a 1000 ads. Most of them use methods that run counter to some of our most core values:
- **Favor open standards** over proprietary solutions
- **Anticipate growth and learning**. SpiffWorkflow users learn, adapt and grow. Like BPMN and Python, we want a form builder that is easy to learn, but also powerful enough to handle complex situations. You don't want to have to switch to a new form builder when you need to do something more complicated.
JSON is how you view most of the data that is collected and manged by SpiffWorkflow. It looks like this:
```json
{
"first_name": "Dan",
"dnd_level": 20,
"awesomeness_level": "∞"
}
```
There is an emerging standard called JSON Schema that provides a way to describe the structure of the data that should be included in a Json file. It looks like this:
```json
{
"properties": {
"first_name": { "type": "string" },
"dnd_level": { "type": "number" },
"awesomeness_level": { "type": "string" }
}
}
```
Some smart people said "Hurm, that Json Schema is pretty much all you need to know to build a form!" And so a library came along that does just that. It is called [React JSON Schema Form](https://rjsf-team.github.io/react-jsonschema-form/docs/) or RJSF. Because you may need to provide some adjustments to how everything is displayed RJSF allows you to provide UI settings in a separate file, so you can say things like "Make this a radio list, not a drop down". Both files are very straight forward.
These examples you will see over the next few screens are all defined with JSON Schema files. There is a lot more to learn, and that information is best gleaned from the [RJSF docs](https://rjsf-team.github.io/react-jsonschema-form/docs/). But please know this:
<spiffworkflow:instructionsForEndUser>### Thanks for checking out our Web Forms!
We would love to create a better built in Form Builder - in fact it is the top item on our official [Wish List](https://spiff-arena.readthedocs.io/en/latest/wish_list/wish_list.html#form-builder). We are looking for partnerships, funding sources, and adopters willing to help us create the best possible experience, while maintaining our commitment to open standards and leaving room for our BPMN authors and architects to grow and learn along with us.
Please get in touch with us! We would love to help you integrate Web Forms into your workflows. There is no end to what we can accomplish if we work together. Please reach out to Dan at [dan@sartography.com](mailto:dan@sartography.com) to get started.
### What's Next?
Check out the some of the other [basic examples](/process-groups/examples:1-basic-concepts). </spiffworkflow:instructionsForEndUser>
<spiffworkflow:instructionsForEndUser>### The Code behind the last form
The form you saw on the previous page is controlled by this Json Schema (which you can find in the list of files associated with this process model, the file is called "simple_form.json". It looks like this:
```json
{
"title": "A registration form",
"description": "A simple form example.",
"type": "object",
"required": [
"firstName",
"lastName",
"age",
"bio",
"telephone"
],
"properties": {
"firstName": {
"type": "string",
"title": "First name",
"default": "Chuck"
},
"lastName": {
"type": "string",
"title": "Last name",
"default": "Norris"
},
"age": {
"type": "integer",
"title": "Age",
"default": 83,
"minimum": 18,
"maximum": 130
},
"bio": {
"type": "string",
"title": "Bio",
"default": "Chuck Norris was once bitten by a poisonous snake. And after a week of excruciating pain, the snake died.",