---
title: "Configuration Reference"
manual: "RTE by CKEditor"
version: "14.3"
permalink: "https://docs.typo3.org/permalink/typo3/cms-rte-ckeditor:config-ref@14.3"
source: "Configuration/Reference.rst"
rendered: "2026-10-09T09:22:40+00:00"
---

# Configuration Reference {#config-ref}

## YAML Configuration Reference {#config-ref-yaml}

When configuring the CKEditor using YAML, these are the property
names that are currently used:

-   [processing](https://docs.typo3.org/permalink/typo3/cms-rte-ckeditor:processing@14.3)
-   [editor](https://docs.typo3.org/permalink/typo3/cms-rte-ckeditor:editor@14.3)
-   [Link Browser specific options](https://docs.typo3.org/permalink/typo3/cms-rte-ckeditor:link-browser-specific-options@14.3)

### processing {#processing}

Configuring transformations kicks in the RteHtmlParser API of TYPO3, to
only allow certain HTML tags and attributes when saving the database or
leaving the database to the RTE. However, defining transformations towards
RTE is not really necessary anymore. Defining more strict processing options
when storing content in the database also needs to be ensured that CKEditor
allows this functionality too.

This configuration option was previously built within `RTE.proc` and can
still be overridden via Page TSconfig. Everything defined via “processing”
is available in RTE.proc and triggers RteHtmlParser options.

### editor {#editor}

Editor contains all RTE-specific options. All CKEditor-specific options, which one
could imagine are available under “config” property and handed over to CKEditor’s
instance-specific config array.

All other sub-properties are usually handled via TYPO3 and then injected in the
CKEditor instance at runtime. This is useful for registering extra plugins, like
the TYPO3 core does with a custom `typo3-link.js` plugin, or adding
third-party plugins like handling images.

#### editor.config {#editor-config}

-   **editor.config**

    Configuration options  For a list of all options see
    [https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editorconfig-EditorConfig.html](https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editorconfig-EditorConfig.html)

    > [!NOTE]
    > Some configuration options from the official CKEditor 5 documentation
    > do not apply to TYPO3, since they are related to specific plugins
    > (for example: CKBox, CloudServices) which are not bundled in TYPO3's
    > CKEditor build.

-   **editor.config.language**

    defines the editor’s UI language, and is dynamically calculated (if not set otherwise) by
    the backend users’ preference.

-   **editor.config.contentsLanguage**

    defines the language of the data, which is fetched from the
    sys_language information, but can be overridden by this option as well.
    For referencing files, TYPO3's internal "EXT:" syntax can be used, for
    using language labels, TYPO3's "LLL:" language functionality can be used.

-   **editor.config.contentsCss**

    defines the location of one or multiple CSS file(s) of the editor, containing the style
    definitions that will be applied to the backend editor RTE element.

    Example with single file:

    **MyCKPreset.yaml**

    ```yaml
    editor.config.contentsCss:
      - "EXT:rte_ckeditor/Resources/Public/Css/contents.css"
    ```

    This is the default, as defined in [EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml (GitHub)](https://github.com/typo3/typo3/blob/14.3/typo3/sysext/rte_ckeditor/Configuration/RTE/Editor/Base.yaml).

    Example with multiple files:

    **MyCKPreset.yaml**

    ```yaml
    editor.config.contentsCss:
      - "EXT:rte_ckeditor/Resources/Public/Css/contents.css"
      - "EXT:my_sitepackage/Resources/Public/Css/contents.css?v=2"
    ```

    Since the CKEditor element is rendered within the page content of the TYPO3 backend
    (and not in an iframe or web-component), all CSS declarations in that file
    must refer to an actual element hierarchy ending like
    `#data_tt_content__2687__bodytext_ckeditor5 .ck-content`. To achieve this,
    TYPO3 automatically parses the contents of the CSS file with a process called
    "auto-prefixing" (via JavaScript, client-side) and converts all references to
    that "virtual" root hierarchy.

    A CSS declaration like `:root { background-color: green }` gets turned into
    `#data_tt_content__2687__bodytext_ckeditor5 .ck-content { background-color: green; }`.

    You can use a `:root { ... }` declaration, for example to reset
    relative/absolute sizes to ensure the CKEditor area being compatible to your
    usual frontend CSS. Also using `body {...}` is viable.

    > [!NOTE]
    > Referenced CSS stylesheets need to
    > be downloadable via `fetch()` in order for the JavaScript-based
    > prefixing to work.

    > [!NOTE]
    > Also note that the generated CSS file is cached by your browser. If you change
    > the contents of your CSS file, be sure to either reload the browser cache,
    > or use a directive like
    > `editor.config.contentsCss: "EXT:my_sitepackage/Resources/Public/Css/contents.css?v=2"`
    > where you change the `?v=` URI string after any file modification to enforce
    > requesting an updated version of the file.

-   **editor.config.heading**

    Defines headings available in the heading dropdown.

    Example:

    **MyCKPreset.yaml**

    ```yaml
    heading:
      options:
        - { model: 'heading2', view: 'h2', title: 'Heading 2' }
        - { model: 'heading3', view: 'h3', title: 'Heading 3' }
        - { model: 'heading4', view: 'h4', title: 'Heading 4' }
    ```

    It is also possible to set a class for a heading by default
    (for example, `<h2 class="h2">`):

    **MyCKPreset.yaml**

    ```yaml
    heading:
      options:
         - { model: 'heading2', view: { name: 'h2', classes: 'h2' }, title: 'Heading 2' }
         - { model: 'heading3', view: { name: 'h3', classes: 'h3' }, title: 'Heading 3' }
         - { model: 'heading4', view: { name: 'h4', classes: 'h4' }, title: 'Heading 4' }
    ```

    To be able to reset a heading to a paragraph, add also the `paragraph`
    option:

    **MyCKPreset.yaml**

    ```yaml
    heading:
      options:
         - { model: 'paragraph', title: 'Paragraph' }
         - { model: 'heading2', view 'h2', title: 'Heading 2' }
         # ...
    ```

    A title can also be localized with `LLL:EXT:...`.

-   **editor.config.style**

    Defines styles available in the style dropdown.

    Example:

    **MyCKPreset.yaml**

    ```yaml
    style:
      definitions:
        - { name: "Lead", element: "p", classes: ['lead'] }
        - { name: "Multiple", element: "p", classes: ['first', 'second'] }
    ```

-   **editor.config.importModules**

    Imports custom CKEditor plugins. See [EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml (GitHub)](https://github.com/typo3/typo3/blob/14.3/typo3/sysext/rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml)
    or [How do I create a custom plugin?](https://docs.typo3.org/permalink/typo3/cms-rte-ckeditor:config-example-customplugin@14.3)
    for examples.

    The shipped `whitespace` plugin
    (`@typo3/rte-ckeditor/plugin/whitespace.js`) renders non-breaking spaces
    and soft hyphens visibly in the backend editor, as described in
    [Non-breaking spaces and soft hyphens](https://docs.typo3.org/m/typo3/tutorial-editors/14.3/en-us/ContentElements/RichTextEditor/Index.html#rte-whitespace). It replaces the former `SoftHyphen` plugin
    (`@typo3/rte-ckeditor/plugin/soft-hyphen.js`), which has been removed.
    Presets that still import the old module, or reference `SoftHyphen` or
    `softhyphen` in the toolbar, are migrated automatically and log a console
    warning.

### Link Browser specific options {#config-linkbrowser}

There are more configuration options that can be defined in the YAML file of an RTE preset
related to the Link Browser, when managing hyperlinks inside the CKEditor.

Note that the Link Browser can also be displayed based on FormEngine TCA definitions. These
use similar configuration, but from their TCA PHP configuration, and unrelated to the YAML
definition.

The additional example file [EXT:rte_ckeditor/Configuration/RTE/Editor/LinkBrowser.yaml (GitHub)](https://github.com/typo3/typo3/blob/14.3/typo3/sysext/rte_ckeditor/Configuration/RTE/Editor/LinkBrowser.yaml)
lists all of the following options as an example.

These options are a bit fragmented, it is important to watch for the proper indentation as well
the proper option relation.

> [!IMPORTANT]
> Please note that these options are set at the topmost level, and **not** nested inside
> the `editor` YAML structure.

A short overview:

-   `allowedOptions` \- allowed list of additional attribute boxes
-   `allowedTypes` \- list of allowed Link Types inside the RTE
-   `classesAnchor` \- list of default CSS and link target values per Link Type
-   `buttons` \- Additional sub-configuration array for specific dropdowns
-   `buttons.link.options` \- Global options for the Link Browser
-   `buttons.link.relAttribute` \- Configuration for the `rel` attribute block
-   `buttons.link.queryParametersSelector` \- Configuration for the `queryParameter` (URI arguments) attribute block
-   `buttons.link.targetSelector` \- Configuration for the `target` attribute block
-   `buttons.link.properties.class.allowedClasses` \- Allowed additional CSS classes in the `CSS` attribute block
-   `buttons.link.[LinkType].properties.class.default` \- Default CSS class per Link Type
-   `classes` \- Label definitions for CSS class names

#### allowedOptions {#allowedoptions}

This string contains a comma separated list of additional attributes used in the Link Browser.
Available field lists can be found in [EXT:backend/Classes/Controller/AbstractLinkBrowserController.php (GitHub)](https://github.com/typo3/typo3/blob/14.3/typo3/sysext/backend/Classes/Controller/AbstractLinkBrowserController.php),
method `getLinkAttributeFieldDefinitions()`.

Note that the attributes `target`, `class` and `rel` are displayed differently depending on
whether the Link Browser was opened for a TCA element, or a RTE element. See
[EXT:rte_ckeditor/Classes/Controller/BrowseLinksController.php (GitHub)](https://github.com/typo3/typo3/blob/14.3/typo3/sysext/rte_ckeditor/Classes/Controller/BrowseLinksController.php) in method
`getLinkAttributeFieldDefinitions()`.

Valid attributes keys are:

-   **target**

    If set, an input box for link target (for example "\_blank") is available.

-   **title**

    If set, entering the link title is available.

-   **class**

    If set, allowing to enter a CSS class name for the link is available.
    This needs to match the CSS classes made available to the CKEDitor instance.

-   **params**

    If set, additional parameters are allowed to be set for a link.

-   **rel**

    If set, relations (`rel` attribute) for links can be set.

To set all of them, you can use:

**MyCKPreset.yaml**

```yaml
allowedOptions: 'target,title,class,params,rel'
```

To remove all options you can use an empty string:

**MyCKPreset.yaml**

```yaml
allowedOptions: ''
```

#### allowedTypes {#allowedtypes}

This string contains a comma-separated list of all allowed Link Types
for the Link Browser. These are currently:

-   `page`
-   `url`
-   `file`
-   `folder`
-   `email`
-   `...` any custom Link Type

**MyCKPreset.yaml**

```yaml
allowedTypes: 'page,url,file,folder,email,customType'
```

To remove all types you can use an empty string:

**MyCKPreset.yaml**

```yaml
allowedTypes: ''
```

#### classesAnchor {#classesanchor}

This is a sub-array of default CSS classes and target attributes, per Link Type:

**MyCKPreset.yaml**

```yaml
classesAnchor:
  - { class: "customPageCssClass", type: "page", target: "" }
  - { class: "customUrlCssClass", type: "url", target: "_blank" }
  - { class: "customFileCssClass", type: "file", target: "_parent" }
  - { class: "customFolderCssClass", type: "folder" }
  - { class: "customTelephoneCssClass", type: "telephone" }
  - { class: "customEmailCssClass", type: "email" }
```

Note that the available CSS class here must also be part of the
`buttons.link.properties.class.allowedClasses` definition.

#### buttons.link {#buttons-link}

This structure defines both global options as well as Link Type-specific
options:

#### buttons.link.options.removeItems {#buttons-link-options-removeitems}

Can be set to exclude certain Link Types:

**MyCKPreset.yaml**

```yaml
buttons:
  link:
    options:
      removeItems: 'telephone'
```

#### buttons.link.relAttribute.enabled {#buttons-link-relattribute-enabled}

If the `allowedOptions` string list contains `rel` for setting relation
attributes, this option must also be enabled:

**MyCKPreset.yaml**

```yaml
buttons:
  link:
    relAttribute:
      enabled: true
```

#### buttons.link.queryParametersSelector.enabled {#buttons-link-queryparametersselector-enabled}

If the `allowedOptions` string list contains `params` for setting URI argument
attributes, this option must also be enabled:

**MyCKPreset.yaml**

```yaml
buttons:
  link:
    queryParametersSelector:
      enabled: true
```

#### buttons.link.targetSelector.disabled {#buttons-link-targetselector-disabled}

If the `allowedOptions` string list contains `target`, a dropdown is displayed by
default. If you want to hide it, you must set this option to `true`:

**MyCKPreset.yaml**

```yaml
buttons:
  link:
    targetSelector:
      disabled: true
```

#### buttons.link.properties.class.required {#buttons-link-properties-class-required}

A CSS class selection can be forced, so that it may not be empty:

**MyCKPreset.yaml**

```yaml
buttons:
  link:
    properties:
      class:
        required: true
```

#### buttons.link.properties.class.allowedClasses {#buttons-link-properties-class-allowedclasses}

This is the most vital CSS class selection list, based on a comma-separated
string naming all CSS classes that are allowed. Default CSS classes per Link Type
can only be selected, if they are part of this list.

The names of the CSS classes can be adjusted via the `classes` top-level configuration
hierarchy (see below)

**MyCKPreset.yaml**

```yaml
buttons:
  link:
    properties:
      class:
        allowedClasses: 'globalCss1,globalCss1,CustomPageCssClass'
```

#### buttons.link.\[linkType\].properties.class.default {#buttons-link-linktype-properties-class-default}

For each Link Type, a default CSS class can be defined, using the name of the
Link Type as a key:

**MyCKPreset.yaml**

```yaml
buttons:
  link:
    telephone:
      class:
        default: "customTelephoneCssClass"
    email:
      class:
        default: "customEmailCssClass"
```

Note that the CSS class listed here must also be contained in
`buttons.link.properties.class.allowedClasses`.

#### classes.\[CssClassName\] {#classes-cssclassname}

The list of CSS classes defined in `buttons.link.properties.class.allowedClasses`
can set a custom label as well as a styling the select option. Note that styling
select options does not work in every browser, and is not suggested to use.

The name of the structure key must match the CSS class name, with a sub-structure
defining `name` (the actual label) and `value` (the possible CSS styling of the option
inside the dropdown):

**MyCKPreset.yaml**

```yaml
classes:
  globalCss1:
    name: "A Label for globalCss1"
    value: "color: red"
  customEmailCssClass:
    name: "An email-specific class for VIPs"
```

## Page TSconfig {#config-ref-tsconfig}

We recommend you to put all configurations for the preset in the
[YAML](https://docs.typo3.org/permalink/typo3/cms-rte-ckeditor:config-typo3-yaml@14.3) configuration. However, it is still possible to
override these settings through the page TSconfig.

You can find a list of configuration properties in the [Page TSconfig
reference, chapter RTE](https://docs.typo3.org/m/typo3/reference-typoscript/14.3/en-us/PageTsconfig/Rte.html#pagetsrte).
