---
title: "TCEMAIN"
manual: "TypoScript Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3tsref:pagetcemain-properties@main"
source: "PageTsconfig/TceMain.rst"
rendered: "2026-09-17T17:01:35+00:00"
---

# TCEMAIN {#tcemain}

Configuration for the TYPO3 Core Engine (DataHandler). For general information, see
the [according section of TYPO3 Explained](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/DataHandler/Index.html#tce).

## Properties {#properties}

-   [clearCacheCmd](https://docs.typo3.org/permalink/t3tsref:clearcachecmd@main)
-   [clearCache_disable](https://docs.typo3.org/permalink/t3tsref:clearcache-disable@main)
-   [clearCache_pageGrandParent](https://docs.typo3.org/permalink/t3tsref:clearcache-pagegrandparent@main)
-   [clearCache_pageSiblingChildren](https://docs.typo3.org/permalink/t3tsref:clearcache-pagesiblingchildren@main)
-   [disableHideAtCopy](https://docs.typo3.org/permalink/t3tsref:disablehideatcopy@main)
-   [disablePrependAtCopy](https://docs.typo3.org/permalink/t3tsref:disableprependatcopy@main)
-   [linkHandler](https://docs.typo3.org/permalink/t3tsref:linkhandler@main)
-   [permissions](https://docs.typo3.org/permalink/t3tsref:permissions@main)
-   [preview](https://docs.typo3.org/permalink/t3tsref:preview@main)
-   [table](https://docs.typo3.org/permalink/t3tsref:table@main)
-   [translateToMessage](https://docs.typo3.org/permalink/t3tsref:translatetomessage@main)

### clearCacheCmd {#clearcachecmd}

-   **clearCacheCmd**

    -   *Type:* List of integers, `all`, `pages` or tags

    This allows you to have the frontend cache for additional pages cleared when saving
    to some page or branch of the page tree.

    It it possible to trigger clearing of all caches or just the pages cache. It is also
    possible to target precise pages either by referring to their ID numbers or to tags
    that are attached to them.

    Attaching tags to page cache is described in the [TypoScript Reference](https://docs.typo3.org/permalink/t3tsref:stdwrap-addpagecachetags@main).

#### Example: Clear the cache for certain pages when a record is changed {#example-clear-the-cache-for-certain-pages-when-a-record-is-changed}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN {
  # Clear the cache for page uid 12 and 23 when saving a record in this page
  clearCacheCmd = 12, 23
  # Clear all frontent page caches of pages
  clearCacheCmd = pages
  # Clear ALL caches
  clearCacheCmd = all
  # Clear cache for all pages tagged with tag "pagetag1"
  clearCacheCmd = cacheTag:pagetag1
}

```

> [!NOTE]
> In order for the `pages` and `all` commands to work for non-admin users,
> make sure to set `options.clearCache.pages = 1` or `options.clearCache.all = 1` accordingly
> in the user TSconfig.

### clearCache_disable {#clearcache-disable}

-   **clearCache_disable**

    -   *Type:* boolean

    If set, then the automatic clearing of page cache when records are edited etc. is disabled.
    This also disables the significance of the two options
    [clearCache_pageSiblingChildren](https://docs.typo3.org/permalink/t3tsref:pagetcemain-clearcache-pagesiblingchildren@main)
    and [clearCache_pageGrandParent](https://docs.typo3.org/permalink/t3tsref:pagetcemain-clearcache-pagegrandparent@main)

### clearCache_pageGrandParent {#clearcache-pagegrandparent}

-   **clearCache_pageGrandParent**

    -   *Type:* boolean

    If set, then the grand parent of a page being edited will have the page cache cleared.

### clearCache_pageSiblingChildren {#clearcache-pagesiblingchildren}

-   **clearCache_pageSiblingChildren**

    -   *Type:* boolean

    If set, then children of all siblings of a page being edited will have the page cache cleared.

    Default is that when a page record is edited, the cache for itself, the parent, and siblings (same level) is cleared.

### disableHideAtCopy {#disablehideatcopy}

-   **disableHideAtCopy**

    -   *Type:* boolean

    Disables the [hideAtCopy TCA feature](https://docs.typo3.org/m/typo3/reference-tca/main/en-us/Ctrl/Index.html#ctrl-reference-hideatcopy) if
    configured for the table.

#### Example: Do not hide pages when they are copy-pasted {#example-do-not-hide-pages-when-they-are-copy-pasted}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN.table.pages {
  # Pages will *not* have "(copy)" appended:
  disablePrependAtCopy = 1
  # Pages will *not* be hidden upon copy:
  disableHideAtCopy = 1
}

```

These settings adjust that a page which is copied will neither have "(copy X)" appended nor be hidden.

The last page in this tree, labeled "Test", is used as original to be copied. The first sub page was
copied using the settings from the above example: It is labeled "Test" and is visible exactly like
the original page. The page "Test (copy 2)" in the middle was in contrast copied in default mode:
The page is hidden and the "(copy X)" suffix is added, if another page with the same named existed already.

![Hidden page with added suffix after copying its original page](../Images/ManualScreenshots/List/PageCopyWithSuffix.png)

#### Example: Apply disableHideAtCopy as default to all tables {#example-apply-disablehideatcopy-as-default-to-all-tables}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN.default {
  disableHideAtCopy = 1
}
```

### disablePrependAtCopy {#disableprependatcopy}

-   **disablePrependAtCopy**

    -   *Type:* boolean

    Disable the [prependAtCopy TCA feature](https://docs.typo3.org/m/typo3/reference-tca/main/en-us/Ctrl/Index.html#ctrl-reference-prependatcopy) if
    configured for the table.

    The word "prepend" is misleading. The "(copy)" label is actually *appended* to the record title.

#### Example: Do not append the "(copy)" label to newly copied pages {#example-do-not-append-the-copy-label-to-newly-copied-pages}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN.table.pages {
  # Pages will *not* have "(copy)" appended:
  disablePrependAtCopy = 1
  # Pages will *not* be hidden upon copy:
  disableHideAtCopy = 1
}

```

These settings adjust that a page which is copied will neither have "(copy X)" appended nor be hidden.

The last page in this tree, labeled "Test", is used as original to be copied. The first sub page was
copied using the settings from the above example: It is labeled "Test" and is visible exactly like
the original page. The page "Test (copy 2)" in the middle was in contrast copied in default mode:
The page is hidden and the "(copy X)" suffix is added, if another page with the same named existed already.

![Hidden page with added suffix after copying its original page](../Images/ManualScreenshots/List/PageCopyWithSuffix.png)

#### Example: Apply disablePrependAtCopy as default to all tables {#example-apply-disableprependatcopy-as-default-to-all-tables}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN.default {
  disablePrependAtCopy = 1
}
```

### linkHandler {#linkhandler}

-   **linkHandler**

    -   *Type:* array of link handler configurations

    Contains an array of link handler configurations.

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

    Preconfiguring default link target and class attributes via keys
    target and cssClass has been introduced.The `linkHandler` array can be used to predefine link targets and class
    attributes for link types.

    -   **`target.default`**

        Default link target, can be overridden in the link wizard.

    -   **`cssClass.default`**

        Default css class for a link of this type, can be overridden in the
        link wizard.

    Global configuration (applies to all link types):

    **EXT:my_extension/Configuration/page.tsconfig**

    ```typoscript
    TCEMAIN.linkHandler.properties.target.default = _self
    TCEMAIN.linkHandler.properties.cssClass.default = my-link-class
    ```

    You can define default values for specific link types:

    **EXT:my_extension/Configuration/page.tsconfig**

    ```typoscript
    TCEMAIN.linkHandler.url.target.default = _blank
    TCEMAIN.linkHandler.page.target.default = _self
    TCEMAIN.linkHandler.file.cssClass.default = file-link
    ```

    > [!TIP]
    > **Hint**
    >
    > The default `target` attributes of links added via the RTE are configured
    > in [buttons.link.properties.target.default](https://docs.typo3.org/permalink/t3tsref:confval-rte-buttons-link-properties-target-default@main).

    The following link handlers are defined by default:

    -   page (for page links)
    -   file (for file links)
    -   folder (for folder links)
    -   url (for external URL links)
    -   telephone (for telephone number css classes)
    -   email (for email css classes)

    You add additional link handlers for custom purposes:

    > [!WARNING]
    > **Attention**
    >
    > The keys in this array uniquely identify the type of link and are used
    > in the TYPO3 link format,
    > for example `t3://record?identifier=my_content&uid=123`. The keys
    > must never be changed because links containing the key in the content will stop
    > working.

    -   **`handler`**

        Fully qualified name of the class containing the backend link handler.

    -   **`configuration`**

        Configuration for the link handler, depends on the `handler`.
        For `\TYPO3\CMS\Backend\LinkHandler\RecordLinkHandler`
        `configuration.table` must be defined.

    -   **`scanBefore` / `scanAfter`**

        Define the order in which handlers are queried when determining
        the responsible tab for editing an existing link.

    -   **`displayBefore` / `displayAfter`**

        Define the order of how the various tabs are displayed in the
        link browser.

#### Example: Display an additional tab in the linkbrowser {#example-display-an-additional-tab-in-the-linkbrowser}

The following page TSconfig display an additional tab with the `label` as
title in the linkbrowser. It then saves the link in the format
`t3://record?identifier=my_content&uid=123`. To render the link in the
frontend you need to define the same key in the TypoScript setup
[config.recordLinks](https://docs.typo3.org/permalink/t3tsref:confval-config-recordlinks@main).

> [!NOTE]
> **See also**
>
> For a complete example see also the [Record link tutorial
> in TYPO3 Explained](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/LinkHandling/Tutorials/RecordLinkBrowser.html#TableRecordLinkBrowserTutorials).

**Page TSconfig definition for identifier `my_content`**

```typoscript
TCEMAIN.linkHandler.my_content {
  handler = TYPO3\CMS\Backend\LinkHandler\RecordLinkHandler
  label = LLL:my_extension.messages:link.customTab
  configuration {
    table = tx_myextension_content
  }
  scanBefore = page
}

```

### permissions {#permissions}

#### Value copyFromParent {#value-copyfromparent}

The value `copyFromParent` can be set for each of the
page TSconfig `TCEMAIN.permissions.*` sub keys. If this value is
set, the page access permissions are copied from the parent page.

##### Example: Inherit the group id of the parent page {#example-inherit-the-group-id-of-the-parent-page}

**EXT:my_extension/Configuration/page.tsconfig**

```typoscript
TCEMAIN.permissions {
  groupid = copyFromParent
  group = 31
  everybody = 0
}

```

By default all new pages created by users will inherit the group of the parent
page. Members of this group get all permissions. Users not in the group get no
permissions.

When an administrator creates a new page she can use the module
**Administration > Permissions** to set a different owner group for this new page.

All subpages created to this new page will now automatically have the new pages
group. The administrator does not have to set custom TSconfig to achieve this.

This behaviour is similar to the "group sticky bit" in Unix for directories.

#### everybody {#everybody}

-   **permissions.everybody**

    -   *Type:* list of strings or integer 0-31
    -   *Default:* 0

    Default permissions for everybody who is not the owner user or member of
    the owning group, key list: `show`, `edit`, `delete`, `new`, `editcontent`.

    Alternatively, it is allowed to set an integer between 0 and 31, indicating
    which bits corresponding to the key list should be set: `show = 1`,
    `edit = 2`, `delete = 4`, `new = 8`, `editcontent = 16`.

    It also possible to set the value
    [copyFromParent](https://docs.typo3.org/permalink/t3tsref:pagetcemain-permissions-copyfromparent@main) to inherit
    the value from the parent page.

###### Example: Set permissions defaults so that everybody can see the page {#example-set-permissions-defaults-so-that-everybody-can-see-the-page}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN.permissions {
  # Everybody can at least see the page, normally everybody can do nothing
  everybody = show
}

```

The page "Community" was created with the settings from the example
above. Compared to the two other pages created with default
permissions you can see the effect: "Everybody" has read access:

![Page with altered permissions for backend users, groups and everybody](../Images/ManualScreenshots/Access/AccessDefaultActions.png)

#### group {#group}

-   **permissions.group**

    -   *Type:* list of strings or integer 0-31
    -   *Default:* show,edit,new,editcontent

    -   **Default permissions for group members, key list: `show`, `edit`, `new`,**

        `editcontent`.

    Alternatively, it is allowed to set an integer between 0 and 31, indicating
    which bits corresponding to the key list should be set: `show = 1`,
    `edit = 2`, `delete = 4`, `new = 8`, `editcontent = 16`.

    It also possible to set the value
    [copyFromParent](https://docs.typo3.org/permalink/t3tsref:pagetcemain-permissions-copyfromparent@main) to inherit
    the value from the parent page.

###### Example: Set permission defaults so that the group can do anything with the new page {#example-set-permission-defaults-so-that-the-group-can-do-anything-with-the-new-page}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN.permissions {
  # Group can do anything, normally "delete" is disabled
  group = 31
}

```

The page "Community" was created with the settings from the example
above. Compared to the two other pages created with default
permissions you can see the effect: The Backend Group can now also
delete the page by default:

![Page with altered permissions for backend users, groups and everybody](../Images/ManualScreenshots/Access/AccessDefaultActions.png)

#### groupid {#groupid}

-   **permissions.groupid**

    -   *Type:* positive integer or string

    By default the owner group of a newly created page is set to the main group
    of the backend user creating the page.

    By setting the value of this property to
    [copyFromParent](https://docs.typo3.org/permalink/t3tsref:pagetcemain-permissions-copyfromparent@main) the owner
    group is copied from the newly created pages parent page.

    The owner group of a newly created page can be hardcoded by setting this
    property to a positive integer greater then zero.

###### Example: Set default user group for permissions on new pages {#example-set-default-user-group-for-permissions-on-new-pages}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN {
  # Owner be_groups UID for new pages
  permissions.groupid = 3
}

```

In this instance, backend group with UID 3 is "test_group". With the configuration
above a new page would be created with this group setting instead of the default,
even if a user who is not member of that group creates the page:

![Page with altered permissions for backend users and groups](../Images/ManualScreenshots/Access/AccessDefaultPermissions.png)

#### user {#user}

-   **permissions.user**

    -   *Type:* list of strings or integer 0-31
    -   *Default:* show,edit,delete,new,editcontent

    Default permissions for owner user, key list: `show`, `edit`, `delete`,
    `new`, `editcontent`.

    Alternatively, it is allowed to set an integer between 0 and 31, indicating
    which bits corresponding to the key list should be set: `show = 1`,
    `edit = 2`, `delete = 4`, `new = 8`, `editcontent = 16`.

    It also possible to set the value
    [copyFromParent](https://docs.typo3.org/permalink/t3tsref:pagetcemain-permissions-copyfromparent@main) to inherit
    the value from the parent page.

###### Example: Set permission defaults so that the pages owner can do anything {#example-set-permission-defaults-so-that-the-pages-owner-can-do-anything}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN.permissions {
  # User can do anything, this is identical to the default value
  user = 31
}

```

#### userid {#userid}

-   **permissions.userid**

    -   *Type:* positive integer or string

    By default the owner of a newly created page is the user that created or
    copied the page.

    By setting the value of this property to
    [copyFromParent](https://docs.typo3.org/permalink/t3tsref:pagetcemain-permissions-copyfromparent@main) the owner
    group is copied from the newly created pages parent page.

    When this property is set to a positive integer the owner of new pages is
    hardcoded to the user of that uid.

###### Example: Set default user for permissions on new pages {#example-set-default-user-for-permissions-on-new-pages}

**EXT:site_package/Configuration/page.tsconfig**

```typoscript
TCEMAIN {
  # Owner be_users UID for new pages
  permissions.userid = 2
}

```

In this instance, backend user with UID 2 is "test". With the configuration
above a new page would be created with this owner setting instead of the default,
even if another user creates the page:

![Page with altered permissions for backend users](../Images/ManualScreenshots/Access/AccessDefaultPermissions.png)

### preview {#preview}

-   **preview**

    -   *Type:* array

    Configure preview link generated for the view button and other frontend view related buttons
    in the backend. This allows different preview URLs depending on the record type. A common
    use case is to have previews for blog and news records, and this feature allows you to define a different
    preview page for content elements as well, which might be handy if they are stored in a folder.

    **EXT:site_package/Configuration/page.tsconfig**

    ```typoscript
    TCEMAIN.preview {
      disableButtonForDokType = 199, 254
      <table name> {
        previewPageId = 123
        fieldToParameterMap {
          uid = tx_myextension_pi1[showUid]
        }
        additionalGetParameters {
          tx_myextension_pi1.controller = MyController # results in tx_myextension_pi1[controller]
          tx_myextension_pi1.action = show # results in tx_myextension_pi1[action]
        }
      }
    }

    ```

    The `previewPageId` is the uid of the page to use for preview. If this setting is omitted the
    current page will be used. If the current page is not a normal page, the root page will be chosen.

    The `disableButtonForDokType` setting allows you to disable the preview button for a given list
    of [doktypes](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/PageTypes/TypesOfPages.html#list-of-page-types). If none are configured, this defaults to: 199, 254 (spacer
    and folder).

    The `useDefaultLanguageRecord` defaults to `1` and ensures that translated records will use the
    uid of the default record for the preview link. You may disable this, if your extension can deal
    with the uid of translated records.

    The `fieldToParameterMap` is a mapping which allows you to select fields of the record to be
    included as GET parameters in the preview link. The key specifies the field name and the value specifies
    the GET parameter name.

    Finally `additionalGetParameters` allow you to add arbitrary GET-parameters and even override others.
    If the plugin on your target page shows a list of records by default you will also need something like
    `tx_myextension_pi1.action = show` to ensure the record details are displayed.

    The core automatically sets the "no_cache" and the "L" parameter. The language matches the language of
    the current record. You may override each parameter by using the `additionalGetParameters` configuration
    option.

    > [!NOTE]
    > Make sure not to set `options.saveDocView.<table name> = 0`, otherwise the view button
    > will not be displayed when editing records of your table.

    > [!WARNING]
    > **Attention**
    >
    > The configuration has to be defined for the page containing the records and `previewPageId`
    > (for example sysfolder holding the records is located outside of your root)

### table {#table}

Processing options for tables. The table name is added, for instance `TCEMAIN.table.pages.disablePrependAtCopy = 1`
or `TCEMAIN.table.tt_content.disablePrependAtCopy = 1`.

It is also possible to set a default value for all tables, for example
`TCEMAIN.default.disablePrependAtCopy = 1`.

### translateToMessage {#translatetomessage}

-   **translateToMessage**

    -   *Type:* string
    -   *Default:* `Translate to %s:`

    Defines the string that will be prepended to some field values if you copy an element to another
    language version. This applies to all fields where the TCA columns property
    [l10n_mode](https://docs.typo3.org/m/typo3/reference-tca/main/en-us/Columns/Index.html#columns-properties-l10n-mode) is set to `prefixLangTitle`.

    The special string "%s" will be replaced with the language title.

    You can globally disable the prepending of the string by setting `translateToMessage` to
    an empty string. You can disable the message to a certain field by setting the `l10n_mode`
    to an empty string.

#### Example: Set a German prefix for newly translated records {#example-set-a-german-prefix-for-newly-translated-records}

**PageTSconfig**

```typoscript
TCEMAIN {
    translateToMessage = Bitte in "%s" übersetzen:
}
```

#### Example: Disable the "\[Translate to ...\]" prefix {#example-disable-the-translate-to-prefix}

**PageTSconfig**

```typoscript
TCEMAIN {
    translateToMessage =
}
```
