---
title: "FlexForms"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:flexforms@main"
source: "ApiOverview/FlexForms/Index.rst"
modified: "2026-09-15T12:49:12+00:00"
---

# FlexForms

FlexForms can be used to store data within an XML structure inside a single DB
column.

> [!WARNING]
> **Attention**
>
> The superfluous tag `TCEforms` was removed and is not evaluated
> anymore. All `TCEforms` tags **must** be removed. Otherwise the
> FlexForm is displayed broken in the backend records.

-   [Extbase plugin settings as FlexForm](https://docs.typo3.org/permalink/t3coreapi:extbase-plugin-settings-as-flexform@main)
-   [Plain plugins configured by FlexForms](https://docs.typo3.org/permalink/t3coreapi:plain-plugins-configured-by-flexforms@main)

-   [Definitions](https://docs.typo3.org/permalink/t3coreapi:flexforms-definition@main)
-   [Reading](https://docs.typo3.org/permalink/t3coreapi:read-flexforms@main)
-   [Modify](https://docs.typo3.org/permalink/t3coreapi:modify-flexforms@main)
-   [T3DataStructure](https://docs.typo3.org/permalink/t3coreapi:t3ds@main)
    -   [Elements](https://docs.typo3.org/permalink/t3coreapi:t3ds-elements@main)
    -   [Sheet References](https://docs.typo3.org/permalink/t3coreapi:t3ds-sheet-references-example@main)
    -   [Parsing](https://docs.typo3.org/permalink/t3coreapi:t3ds-parsing@main)

## Extbase plugin settings as FlexForm

> [!WARNING]
> **Deprecated since version 14.0**
>
> `\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue()`
> has been deprecated. For Extbase plugins use the 7th parameter of method
> `\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin()` instead.
>
> See [Deprecation: #107047 - ExtensionManagementUtility::addPiFlexFormValue()](https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/14.0/Deprecation-107047-ExtensionManagementUtilityAddPiFlexFormValue.html#deprecation-107047-1751984220).

FlexForms are commonly used to configure Extbase plugins:

**packages/my_extension/Configuration/TCA/Overrides/tt_content.php**

```php
<?php

use TYPO3\CMS\Extbase\Utility\ExtensionUtility;

$ctypeKey = ExtensionUtility::registerPlugin(
  'MyExtension',
  'MyPlugin',
  'My Plugin Title',
  'my-extension-icon',
  'plugins',
  'Plugin description',
  'FILE:EXT:my_extension/Configuration/FlexForms/MyFlexform.xml',
);

```

Within the FlexForm use `settings.` as prefix for the identifier of your
fields. Any field prefixed with `settings.` will be automatically available
in the controller's settings array (`$this->settings['someSetting']`) and
in the Fluid templates as variable `{settings.someSetting}`. For example:

**packages/my_extension/Configuration/FlexForm.xml**

```xml
<T3DataStructure>
    <sheets>
        <sDEF>
            <ROOT>
                <sheetTitle>
                    Sheet Title
                </sheetTitle>
                <type>array</type>
                <el>
                    <settings.someSetting>
                        <label>Some Setting</label>
                        <config>
                            <type>input</type>
                        </config>
                    </settings.someSetting>
                    <settings.anotherSetting>
                        <label>Another Setting</label>
                        <config>
                            <type>input</type>
                        </config>
                    </settings.anotherSetting>
                </el>
            </ROOT>
        </sDEF>
    </sheets>
</T3DataStructure>

```

For an example see the plugin settings of the plugins in extension
[`georgringer/news`](https://packagist.org/packages/georgringer/news).

## Plain plugins configured by FlexForms

> [!WARNING]
> **Deprecated since version 14.0**
>
> `\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue()`
> has been deprecated. For plain plugins use the 2nd parameter of method
> `\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin()` instead.
>
> See [Deprecation: #107047 - ExtensionManagementUtility::addPiFlexFormValue()](https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/14.0/Deprecation-107047-ExtensionManagementUtilityAddPiFlexFormValue.html#deprecation-107047-1751984220).

Complex content elements or plain plugins not registered via Extbase can
use FlexForms for configuration as well. Plain plugins can be configured with
FlexForms in a similar fashion to Extbase plugins:

**packages/my_extension/Configuration/TCA/Overrides/tt_content.php**

```php
<?php

use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;

// Plain plugin without Extbase controller
ExtensionManagementUtility::addPlugin(
  [
    'My Plugin Title',
    'my_plugin',
    'my-extension-icon',
  ],
  'FILE:EXT:myext/Configuration/FlexForms/MyFlexform.xml',
);

```

Plain plugins can use any name scheme for the identifiers that they desire.

When a content element containing a FlexForm is saved the settings are written
as XML to column `tt_content.pi_flexform` in the according database record.

See also: [Read FlexForms values in PHP](https://docs.typo3.org/permalink/t3coreapi:read-flexforms-php@main).

For example the carousel of the extension [`bk2k/bootstrap-package`](https://packagist.org/packages/bk2k/bootstrap-package)
uses FlexForms for its configuration.
