---
title: "Auto-created columns from 'ctrl'"
manual: "TCA Reference"
version: "13.4"
permalink: "https://docs.typo3.org/permalink/t3tca:ctrl-auto-created-columns@13.4"
source: "Ctrl/AutoCreatedColumns.rst"
modified: "2026-09-15T18:49:03+00:00"
---

# Auto-created columns from 'ctrl'

> [!NOTE]
> **New in version 13.3**
>
> [Field definitions (columns)](https://docs.typo3.org/permalink/t3tca:columns@13.4) are now added to the `TCA` by default if they are not
> explicitly set in [Table properties (ctrl)](https://docs.typo3.org/permalink/t3tca:ctrl@13.4) sections in the base TCA php files. TYPO3 creates
> them automatically, meaning developers no longer have to create lots of
> boilerplate fields definitions.

`ctrl` settings such as the [enablecolumns](https://docs.typo3.org/permalink/t3tca:confval-ctrl-enablecolumns@13.4) and
[languageField](https://docs.typo3.org/permalink/t3tca:confval-ctrl-languagefield@13.4) settings require explicit TCA `columns` definitions.

> [!WARNING]
> Columns in the ctrl section of the TCA that have been auto-created
> still need to be added manually to palettes and types definitions.
>
> Due to the [TCA loading order](https://docs.typo3.org/permalink/t3tca:ctrl-auto-created-columns-loading-order@13.4)
> these columns are only created if the ctrl property has been
> added to the original definition in the base `Configuration/TCA/<tablename>.php` file.
> Setting them in the overrides like `Configuration/TCA/Overrides/something.php`
> has no effect.

## Load order when building TCA

The TCA is loaded in the following steps:

1.  Load php files from extension `Configuration/TCA` files
1.  NEW - Enrich `columns` from `ctrl` settings
1.  Load php files from extension `Configuration/TCA/Overrides` files
1.  Apply TCA migrations
1.  Apply TCA preparations

The loading sequence means that only `columns` fields in the `ctrl`  section of
`Configuration/TCA` files are auto-created, not in `Configuration/TCA/Overrides`.
These fields should be set in the "base" php files only:
adding them at a later point - for example in another extension - is brittle
and there is a risk the main extension can not handle auto-creation properly.

## Overriding definitions from auto-created TCA columns

In most cases, developers should not need to change `columns` definitions
auto-created by the Core and it isn't recommended. If you do want to change
them, stick to "display" related details only.

There are two options for adding your own definitions. Either by defining
a column in a "base" TCA file (`Configuration/TCA`) - the Core will not override it.
Or, a developer can decide to let the Core auto-create a column, but
then override single properties in `Configuration/TCA/Overrides` files.

For example, if this is a `pages` "base" file (loading step 1):

**EXT:core/Configuration/TCA/pages.php (Excerpt)**

```php
<?php

return [
  'ctrl' => [
    'enablecolumns' => [
      'disabled' => 'disabled',
    ],
  ],
  // ...
];

```

the Core creates this `columns` definition (loading step 2):

**Column entries created by the Core**

```php
<?php

$GLOBALS['TCA']['pages']['columns']['disabled'] = [
  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.enabled',
  'exclude' => true,
  'config' => [
    'type' => 'check',
    'renderType' => 'checkboxToggle',
    'default' => 0,
    'items' => [
      [
        'label' => '',
        'invertStateDisplay' => true,
      ],
    ],
  ],
];

```

When an editor creates a new page, it should be "disabled" by default
so that the new page does not go online before it is properly set up.
Add the following in the `Configuration/TCA/Overrides/pages.php` file:

**EXT:my_extension/Configuration/TCA/Overrides/pages.php**

```php
<?php

// New pages are disabled by default
$GLOBALS['TCA']['pages']['columns']['disabled']['config']['default'] = 1;

```
