---
title: "Deprecation: #97857 - Deprecate __inheritances operator in form configuration"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:deprecation-97857-1761224875"
source: "Changelog/14.0/Deprecation-97857-DeprecateFormInheritances.rst"
typo3-version: "14.0"
typo3-major: 14
type: "deprecation"
issue: 97857
forge: "https://forge.typo3.org/issues/97857"
tags: ["Backend", "ext:form", "NotScanned"]
rendered: "2026-09-20T18:31:11+00:00"
---

# Deprecation: #97857 - Deprecate \_\_inheritances operator in form configuration {#deprecation-97857-1761224875}

See [forge#97857](https://forge.typo3.org/issues/97857)

## Description {#description}

The custom `__inheritances` operator, which was available only in
YAML configuration files of EXT:form, has been deprecated.

Previously, this operator was used within form definition files to inherit
and reuse configuration parts between form element definitions.
With native YAML functionality now providing equivalent and more flexible
features, this TYPO3-specific operator is no longer necessary.

Developers are encouraged to migrate to standard YAML features such as
anchors, aliases, and overrides to avoid code duplication and to simplify
form configuration maintenance.

## Impact {#impact}

Using the `__inheritances` operator inside a custom YAML form configuration
in EXT:form will trigger a PHP `E_USER_DEPRECATED` error.

## Affected installations {#affected-installations}

All installations with custom form definitions or form element configurations
that use the `__inheritances` operator in their EXT:form YAML files
are affected and need to update those files accordingly.

## Migration {#migration}

The custom TYPO3 implementation using `__inheritances` can be replaced
with standard YAML syntax.

Developers can achieve the same result by using anchors (`&`),
aliases (`*`), and overrides (`<<:`).

Before:

```yaml
mixins:
  formElementMixins:
    BaseFormElementMixin:
      1761226183:
        identifier: custom
        templateName: Inspector-TextEditor
        label: Custom editor
        propertyPath: custom
    OtherBaseFormElementMixin:
      1761226184:
        identifier: otherCustom
        templateName: Inspector-TextEditor
        label: Other custom editor
        propertyPath: otherCustom

prototypes:
  standard:
    formElementsDefinition:
      Text:
        formEditor:
          editors:
            __inheritances:
              10: 'mixins.formElementMixins.BaseFormElementMixin'
              20: 'mixins.formElementMixins.OtherBaseFormElementMixin'
```

After:

```yaml
customEditor: &customEditor
  1761226183:
    identifier: custom
    templateName: Inspector-TextEditor
    label: Custom editor
    propertyPath: custom

otherCustomEditor: &otherCustomEditor
  identifier: otherCustom
  templateName: Inspector-TextEditor
  label: Other custom editor
  propertyPath: otherCustom

prototypes:
  standard:
    formElementsDefinition:
      Text:
        formEditor:
          editors:
            <<: *customEditor
            1761226184: *otherCustomEditor
```

### Inheriting a complete element across files {#inheriting-a-complete-element-across-files}

A common use case of `__inheritances` was to base a new form element on
the complete configuration of an existing (core) element and then override only
a few properties. YAML anchors and aliases are file-local and therefore cannot
reference a definition from another file. This can instead be solved with the
`imports` key and `%...%` placeholders of the TYPO3 YAML loader.

Because a placeholder is resolved *after* parsing and replaces a whole value,
the inheritance and the overrides must live in two files: the imported file
copies the complete element subtree, the importing file then merges its
overrides on top.

Imported file, copies the whole `Text` element to `CustomText`:

**EXT:my_extension/Configuration/Form/CustomElement/CustomTextInherit.yaml**

```yaml
imports:
  - { resource: 'EXT:form/Configuration/Form/Base/FormElements/Text.yaml' }

prototypes:
  standard:
    formElementsDefinition:
      CustomText: '%prototypes.standard.formElementsDefinition.Text%'
```

Importing file, overrides only single properties:

**EXT:my_extension/Configuration/Form/CustomElement/config.yaml**

```yaml
imports:
  - { resource: 'EXT:my_extension/Configuration/Form/CustomElement/CustomTextInherit.yaml' }

prototypes:
  standard:
    formElementsDefinition:
      CustomText:
        formEditor:
          label: 'Custom Text'
          group: custom
```

`CustomText` now inherits the complete configuration of the core
`Text` element (`implementationClassName`, `renderingOptions`,
all `formEditor.editors`, `predefinedDefaults`, …) while only the
listed properties are overridden.
