# Runtime Fusion Form Basics
For many default cases it is overkill to implement a custom controller. Especially when the forms shall be integrated
as content into a Neos website.
For such cases the `Runtime` section of the Neos.Fusion.Form package provides means to define the validation rules and
configure the finishing actions that will be executed once the form is submitted. That way in many cases no custom code
is needed at all. Runtime Forms also make it simple to implement custom actions for connecting Newsletter registrations
and other services.
## Form - `Neos.Fusion.Form:Runtime.RuntimeForm`
The core of the form runtime is the `Neos.Fusion.Form:Runtime.RuntimeForm` prototype. This prototype allows to define a
`process` usually of type SingleStepProcess and an `action`. Both a are defined via fusion.
```
renderer = Neos.Fusion.Form:Runtime.RuntimeForm {
# the form process that is responsible for rendering the form and
# collecting the data
process = Neos.Fusion.Form:Runtime.SingleStepProcess
# action that is processed after the form process is finished
action = Neos.Fusion.Form:Runtime.Actions
}
```
The Runtime form also allows to specify an `namespace` that will be used as namespace for all form values and
the initial `data` for cases in which the process doesn't start empty.
## Process - `Neos.Fusion.Form:Runtime.SingleStepProcess`
The form process is responsible to aggregate the submitted data and render the form until all requirements are matched.
To do this the single step process requires `content` and `schema`. The `content` is the form body that will be rendered.
It can be defined inline via afx or as a separate Fusion prototype. It will internally use the Field Prototypes
of Neos.Fusion.Form and probably a FieldContainer that renderes labels and error messages.
The `schema` controls the type conversion and validation of the submitted data. Only properties that have a schema will
be added to the data of the process so all fields have to be added here.
The separation of `content` and `schema` makes implementing custom rendering easy and as hassle-free as possible.
```
renderer = Neos.Fusion.Form:Runtime.RuntimeForm {
process = Neos.Fusion.Form:Runtime.SingleStepProcess {
content = afx`