---
title: "TCAdefaults"
manual: "TypoScript Explained"
version: "14.3"
permalink: "https://docs.typo3.org/permalink/t3tsref:usertstcadefaults@14.3"
source: "UserTsconfig/TcaDefaults.rst"
rendered: "2026-10-01T16:17:37+00:00"
---

# TCAdefaults {#usertstcadefaults}

<!-- TODO: no Markdown rendering for "versionadded" -->

The TCAdefaults configuration has been extended to support
type-specific syntax enabling different default values based on the record type.

This allows `default` values of `TCA` fields that are available for various TCA
column types to be set or overridden, for instance for
[type=input](https://docs.typo3.org/m/typo3/reference-tca/14.3/en-us/ColumnsConfig/Type/Input/Index.html#columns-input-properties-default).

Default values can be set at the type level: `TCAdefaults.[table name].[field].types.[type]`
or field level: `TCAdefaults.[table name].[field]`

This key is also available at the [Page TSconfig level](https://docs.typo3.org/permalink/t3tsref:pagetstcadefaults@14.3).
The order that default values are set when creating new records in the backend
is this:

1.  Database field default value
1.  Value from `$GLOBALS['TCA']`
1.  Field-level ref:`user TSconfig <userTsTcaDefaults>`
1.  Type-level ref:`user TSconfig <userTsTcaDefaults>`
1.  Field-level `TCAdefaults` configuration
1.  Type-level `TCAdefaults` configuration
1.  Value from "defVals" GET variables
1.  Value from previous record based on
    [useColumnsForDefaultValues](https://docs.typo3.org/m/typo3/reference-tca/14.3/en-us/Ctrl/Index.html#ctrl-reference-usecolumnsfordefaultvalues)

However, the order for default values used by the
`\TYPO3\CMS\Core\DataHandling\DataHandler` if a particular field is inaccessible
to a user will be:

1.  Value from `$GLOBALS['TCA']`
1.  Value from User TSconfig (these settings)

So these will be the values that are set if the user has no access to the field anyway.

Example:

**EXT:my_sitepackage/Configuration/user.tsconfig**

```typoscript
# Show newly created pages by default
TCAdefaults.pages.hidden = 0
```

> [!WARNING]
> **Attention**
>
> This example will not work when creating the page from the context menu
> since this is triggered by the values listed in the `ctrl` section of
> `typo3/sysext/core/Configuration/TCA/pages.php`:
>
> **typo3/sysext/core/Configuration/TCA/pages.php**
>
> ```php
> <?php
>
> return [
>   'ctrl' => [
>     'label' => 'title',
>     'descriptionColumn' => 'rowDescription',
>     'tstamp' => 'tstamp',
>     'sortby' => 'sorting',
>     'title' => 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:pages',
>     'type' => 'doktype',
>     'versioningWS' => true,
>     'delete' => 'deleted',
>     'crdate' => 'crdate',
>     'hideAtCopy' => true,
>     'prependAtCopy' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.prependAtCopy',
>     'editlock' => 'editlock',
>     'useColumnsForDefaultValues' => 'doktype,fe_group,hidden',
>     'languageField' => 'sys_language_uid',
>     'transOrigPointerField' => 'l10n_parent',
>     'transOrigDiffSourceField' => 'l10n_diffsource',
>     'translationSource' => 'l10n_source',
>     'enablecolumns' => [
>       'disabled' => 'hidden',
>       'starttime' => 'starttime',
>       'endtime' => 'endtime',
>       'fe_group' => 'fe_group',
>     ],
>     'typeicon_column' => 'doktype',
>     'typeicon_classes' => [
>       '1' => 'apps-pagetree-page-default',
>       '1-hideinmenu' => 'apps-pagetree-page-hideinmenu',
>       '1-root' => 'apps-pagetree-page-domain',
>       '3' => 'apps-pagetree-page-shortcut-external',
>       '3-hideinmenu' => 'apps-pagetree-page-shortcut-external-hideinmenu',
>       '3-root' => 'apps-pagetree-page-shortcut-external-root',
>       '4' => 'apps-pagetree-page-shortcut',
>       '4-hideinmenu' => 'apps-pagetree-page-shortcut-hideinmenu',
>       '4-root' => 'apps-pagetree-page-shortcut-root',
>       '6' => 'apps-pagetree-page-backend-users',
>       '6-hideinmenu' => 'apps-pagetree-page-backend-users-hideinmenu',
>       '6-root' => 'apps-pagetree-page-backend-users-root',
>       '7' => 'apps-pagetree-page-mountpoint',
>       '7-hideinmenu' => 'apps-pagetree-page-mountpoint-hideinmenu',
>       '7-root' => 'apps-pagetree-page-mountpoint-root',
>       '199' => 'apps-pagetree-spacer',
>       '199-hideinmenu' => 'apps-pagetree-spacer-hideinmenu',
>       '199-root' => 'apps-pagetree-page-domain',
>       '254' => 'apps-pagetree-folder-default',
>       '254-hideinmenu' => 'apps-pagetree-folder-default',
>       '254-root' => 'apps-pagetree-page-domain',
>       'contains-shop' => 'apps-pagetree-folder-contains-shop',
>       'contains-approve' => 'apps-pagetree-folder-contains-approve',
>       'contains-fe_users' => 'apps-pagetree-folder-contains-fe_users',
>       'contains-board' => 'apps-pagetree-folder-contains-board',
>       'contains-news' => 'apps-pagetree-folder-contains-news',
>       'page-contentFromPid' => 'apps-pagetree-page-content-from-page',
>       'page-contentFromPid-root' => 'apps-pagetree-page-content-from-page-root',
>       'page-contentFromPid-hideinmenu' => 'apps-pagetree-page-content-from-page-hideinmenu',
>       'default' => 'apps-pagetree-page-default',
>     ],
>     // Will be filled automatically, if ctrl.security.ignorePageTypeRestrictions is enabled for a table.
>     'defaultAllowedRecordTypes' => [],
>   ],
>   // ...
> ];
>
> ```

If 'hidden' is in the list, it gets overridden with the "neighbor" record value (see
`\TYPO3\CMS\Backend\Form\FormDataProvider\DatabaseRowInitializeNew::setDefaultsFromNeighborRow`)
and as the value is set - usually to '0' - it will not be overridden
again. To make it work as expected, that value must be overridden. This
can be done for example in the `Configuration/TCA/Overrides` folder
of an extension:

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

```php
$GLOBALS['TCA']['pages']['ctrl']['useColumnsForDefaultValues'] = 'doktype,fe_group';
```

## Example: Set type specific default values in user TSconfig {#usertstcadefaults-example-types}

**EXT:my_sitepackage/Configuration/user.tsconfig**

```typoscript
TCAdefaults.tt_content {
  header_layout = 1
  # Use specific default values for certain types
  header_layout.types {
    textmedia = 3
    image = 2
  }
}

```

In this example: if a user with no write access to the field `tt_content.header_layout`
creates a new content element of type `textmedia` the header layout will be set
to 3. If the user does have write access to the field, 3 will be used by default
and they may change it.
