The world’s most popular CKEditor has been integrated into TYPO3 and it was one of the great decisions. Here, I want to guide you from basic to advanced level CKEditor integration and customization into TYPO3 CMS.
CKEditor helps TYPO3 programmers and editors compared to old so-called htmlArea RTE editors.
Teams extending their editorial workflows with AI can use the AI Foundation for TYPO3 to manage shared AI providers, prompts, permissions, and context centrally. Since a TYPO3 v8, CKEditor is part of the TYPO3 core by replacing old RTE.
Let's get started with a step-by-step guide on TYPO3 CKEditor! Learn about setup, configurations,,`, customization, installing TYPO3 plugins, and much more. This guide covers rich text editor features, CKEditor 5, and HTML text editor options.
How do you configure CKEditor in TYPO3?
Short answer: TYPO3 ships CKEditor 5 in the core extension rte_ckeditor. You configure it with YAML presets: register a preset file in the ext_localconf.php of your sitepackage, set toolbar items, headings and styles under editor.config, and activate the preset with the page TSconfig line RTE.default.preset. Custom plugins are ES6 modules loaded via importModules.
Key takeaways
- TYPO3 v12, v13 and v14 use CKEditor 5. TYPO3 v8 to v11 used CKEditor 4. CKEditor 4 plugins and options such as
toolbarGroups,removeButtonsorstylesSetdo not work in CKEditor 5. - The core ships three presets:
default,minimalandfull. "default" is active unless you select another one. - New presets are registered in
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']inext_localconf.php. This setting cannot be changed in the backend. - Page TSconfig selects the preset per page tree, field or content type, for example
RTE.config.tt_content.bodytext.preset. - Two layers decide which HTML is kept:
htmlSupportin the editor and the processing rules fromProcessing.yamlon save. Keep the Processing.yaml import, it contains security measures. - In TYPO3 v14 the backend editor follows the light or dark mode of the editor's system by default, and the PSR-14 event
AfterRichtextConfigurationPreparedEventlets you change the RTE configuration in PHP.
Tested with / valid for: TYPO3 v13.4 LTS and v14.3 LTS (system extension rte_ckeditor with CKEditor 5). Sections marked "(CKEditor 4)" describe TYPO3 v8 to v11.
Updated: November 2026
What is CKEditor?
CKEditor is an enterprise-grade WYSIWYG HTML text editor with wide browser compatibility, including support for legacy browsers. As a powerful rich text editor, CKEditor 5 offers robust features and functionalities for seamless content creation and editing.
What can you do with CKEditor?
- Copy/paste from Word and Excel, spell check, accessibility checker, and tables.
- Wide range of third-party plugins eg., autocomplete, widgets, code snippets, and Plugins.
- Better control over content: HTML filters and mode of view source code
- Excellent accessibility: WCAG 2.0 AA and Section 508 compliant.
- Long-term support (LTS) versions
- Leverage CKEditor 5 for advanced HTML text editing
Read more at the official website CKEditor.com
What does CKEditor do in TYPO3 CMS?
CKEditor is a third-party feature that is ready-to-go in TYPO3 via the system extension called EXT:rte_ckeditor. TYPO3 people now have cool-editors to easily manage their content.
21.000+ tests
27M+ downloads
400+ plugins
23.000+ questions
Are you new to CKEditor?
No problem, Try by your self this quick demo now ckeditor.com/ckeditor-4/demo/#article
What are the features of CKEditor into TYPO3?
The extension rte_ckeditor incorporates the features of CKEditor and adds additional functionality, configuration presets, and plugins.
Sample Key Features
- Configurable via YAML files
- Default three ready-to-use CKEditor preset in TYPO3
- Flexible to modify of TYPO3 CKEditor Toolbar
- Integrated with TYPO3 link wizard
- Integrated most popular word count CKEditor plugin into TYPO3
Why Did TYPO3 Switch from an HTML Text Editor to a CKEditor?
- Don’t have to fully maintain it by the TYPO3 community, Because other cool OpenSource projects are already well developed and maintained eg., CKEditor.
- CKEditor has good cross-browser & cross-compatibility support
- Complying with the latest TYPO3 accessibility and web accessibility standards
- Cool in-line editing features that help to make better Frontend inline editing
- CKEditor includes a wide range of features such as formatting tools, spell check, and media embedding, which are not available in a basic HTML text editor.
But! wait... You don’t want to switch?
The old htmlArea RTE has been deprecated since TYPO3 v8.
If you have an old TYPO3 website with RTE htmlArea and it’s hard to migrate to CKEditor, then no problem — you can still find updates and further TYPO3 support & maintenance at FriendsOfTYPO3/rtehtmlarea.
CKEditor for TYPO3 Editors
TYPO3 RTE Editing Modes
CKEditor for TYPO3 editors makes content management easy and efficient. Enjoy advanced editing features and a user-friendly interface integrated seamlessly into TYPO3.
Mode 1: Classic Article Mode
The default RTE integrated into TYPO3 backend eg., Add text element get RTE.
Mode 2: Document Editor mode
Editing is similar to using Microsoft Word or Google Docs, where the document looks like a sheet of paper. The focus is on organizing content rather than the layout itself.
Mode 3: Inline Editor mode
Unfortunately, TYPO3 does not include fantastic front-end editing projects within its core. However, you can easily access and use these powerful tools from the TYPO3 Extension Repository (TER) or can get Support for TER to enhance your content management experience.
Basic features of CKEditor in TYPO3
What Are the Major Braking Changes in TYPO3 v12 and Beyond with CKEditor?
TYPO3 v12 introduced CKEditor 5, a completely new and rewritten editor compared to the previous CKEditor 4, which had been integrated into TYPO3 since TYPO3 v8. If you have an older version of TYPO3, you need to complete a TYPO3 upgrade from TYPO3 8 to TYPO3 9 or a higher version to utilize the benefits of the CKEditor RTE.
CKEditor 5 Integration
TYPO3 v12 introduces CKEditor 5 as the default rich text editor, replacing CKEditor 4. CKEditor 5 comes with a completely new architecture and many modern features.
New Plugin System
CKEditor 5 has a new plugin system that is not compatible with CKEditor 4 plugins. This means that any custom plugins or configurations need to be rewritten to work with CKEditor 5.
CKEditor 5 Configuration Changes
This includes changes in toolbar configuration, plugin management, and other settings. Developers need to update their configurations to match the new structure.
Customizations and Extensibility
While CKEditor 5 offers advanced customization and extensibility options, the approach is different. Developers must familiarize themselves with the new ways to extend and customize the editor for efficient TYPO3 development.
Security Enhancements
CKEditor 5 includes enhanced security features to protect against common vulnerabilities associated with rich text editors.
Looking for RTE Help? T3AI TYPO3 AI Co-Pilot is Here!
T3AI Co-Pilot, part of the powerful T3AI TYPO3 AI Extension, is your go-to assistant for simplifying content management within TYPO3 CMS. Designed with specialized features, T3AI Co-Pilot enhances your content creation, translation, and optimization processes directly within the TYPO3 Rich Text Editor (RTE). From drafting new content to translating it accurately and fine-tuning it for SEO, T3AI Co-Pilot helps streamline every step, making your TYPO3 experience more efficient.
What is YAML?
Since CKEditor uses YAML for configuration, it's important to first understand the basics of YAML files.
YAML (a recursive acronym for "YAML Ain't Markup Language") is a human-readable data serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted.
It’s very simple, Try Google with some examples to learn the concept and syntax.
Why TYPO3 Choose YAML?
“Did you know?
The RTE CKEditor has not been configured in PageTSConfig TypoScript anymore, Everything is managed through cool-YAML."
Instead of a bit complicated TypoScript, TYPO3 core team and community choose to have famous well-structured YAML configurations.
- CKEditor uses JavaScript for Integration
- TypoScript with TSConfig is bit hard new TYPO3 integrators and developers
- A new start for a new structure to separate processing and Editor-related configuration
- Allow options to be extended (but no condition or unsetting values)
What are the presets of CKEditor in TYPO3?
CKEditor has default presets to easily configure different variance, What’s preset?
- Define editor look and layout
- Define what tags and styles are allowed
- Define which plugins to load
- Define database processing RTE.proc
How do you configure CKEditor 5 in TYPO3 v13 and v14?
Create a YAML preset in your sitepackage, register it in ext_localconf.php and select it with page TSconfig. The official best practice is to copy the core file typo3/sysext/rte_ckeditor/Configuration/RTE/Default.yaml as a starting point and to keep the three core imports at the top of your file.
The system extension rte_ckeditor is part of the TYPO3 core (Composer package typo3/cms-rte-ckeditor). TYPO3 updates the bundled CKEditor 5 with patch releases: TYPO3 v12.4.0 shipped CKEditor 5 v37, v13.4.0 shipped v43, and the current 13.4 and 14.3 branches require ckeditor5 v48 (Build/package.json).
If several settings apply, TYPO3 uses this order: a preset for a specific field in page TSconfig, then richtextConfiguration in TCA, then the general preset in page TSconfig, then "default" (Configuration Concepts).
| Method | Works in | Best for | Caveat |
|---|---|---|---|
Page TSconfig RTE.default.preset | v11 to v14 | One preset for a site or page tree | The preset must be registered first |
Page TSconfig RTE.config.[table].[field].preset and .types.[type].preset | v11 to v14 | Different editors per field or content type | YAML options overridden here replace arrays and cannot set booleans |
TCA richtextConfiguration | v11 to v14 | Fields of your own extension | A field preset from page TSconfig wins |
PSR-14 AfterRichtextConfigurationPreparedEvent | v14 | Changing the final configuration in PHP | Not available in v13 |
The three steps below give you a working preset. Copy them, replace my_sitepackage with your extension key and flush all caches.
<?php
// EXT:my_sitepackage/ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['my_preset']
= 'EXT:my_sitepackage/Configuration/RTE/MyPreset.yaml'; # EXT:my_sitepackage/Configuration/RTE/MyPreset.yaml
# TYPO3 v13.4 LTS and v14.3 LTS (CKEditor 5), indent with 2 spaces
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
editor:
config:
contentsCss:
- "EXT:rte_ckeditor/Resources/Public/Css/contents.css"
- "EXT:my_sitepackage/Resources/Public/Css/rte.css"
toolbar:
items:
- style
- heading
- '|'
- bold
- italic
- '|'
- bulletedList
- numberedList
- blockQuote
- '|'
- link
- insertTable
- '|'
- removeFormat
- undo
- redo
- sourceEditing
heading:
options:
- { model: 'paragraph', title: 'Paragraph' }
- { model: 'heading2', view: 'h2', title: 'Heading 2' }
- { model: 'heading3', view: 'h3', title: 'Heading 3' }
style:
definitions:
- { name: "Lead", element: "p", classes: ['lead'] }
- { name: "Muted", element: "span", classes: ['text-muted'] }
htmlSupport:
allowEmpty: ['i']
allow:
- { name: 'i', classes: [ 'fa-brands', 'fa-typo3' ] } # EXT:my_sitepackage/Configuration/page.tsconfig
# or: Page properties > Resources > Page TSconfig
RTE.default.preset = my_preset
# Optional: smaller editor for the bodytext of "Text" elements only
RTE.config.tt_content.bodytext.types.text.preset = minimal Which toolbar items can you use in TYPO3 CKEditor 5?
Toolbar items go into editor.config.toolbar.items as a YAML list. Use '|' to separate groups and '-' for a line break. Items from optional CKEditor 5 packages only work after you load the package with importModules, as the core file Full.yaml does.
| Toolbar item | What it does | In core preset | Extra importModules entry |
|---|---|---|---|
heading | Paragraph and heading dropdown, options in heading.options | default, full | No |
style | Style dropdown, entries in style.definitions | default, full | No |
bold, italic | Bold and italic text | default, minimal, full | No |
underline, strikethrough | Underline and strikethrough | full | No |
subscript, superscript, softhyphen | Sub- and superscript, soft hyphen | default, full | No |
bulletedList, numberedList, blockQuote | Lists and quotes | default, full | No |
indent, outdent | Indent blocks, classes in indentBlock | full | No |
alignment | Text alignment as CSS classes | default, full | No |
link | TYPO3 link browser | default, full | No |
insertTable | Tables, cell tools in table.contentToolbar | default, full | No |
findAndReplace, specialCharacters, horizontalLine | Search and replace, special characters, horizontal rule | default, full | No |
removeFormat, undo, redo | Clear formatting, undo, redo | default, full (undo and redo also in minimal) | No |
sourceEditing, selectAll | HTML source view, select all | sourceEditing: default, full; selectAll: full | No |
showBlocks | Shows block outlines | full | @ckeditor/ckeditor5-show-blocks |
fontFamily, fontSize, fontColor, fontBackgroundColor | Font options (since TYPO3 12.4.12) | full | @ckeditor/ckeditor5-font |
textPartLanguage | Marks the language of a text part | full | @ckeditor/ckeditor5-language |
highlight | Marker and pen colors | full | @ckeditor/ckeditor5-highlight |
fullscreen | Fullscreen editing (since TYPO3 13.4.16) | full | @ckeditor/ckeditor5-fullscreen |
Source: the core presets Default.yaml, Minimal.yaml and Full.yaml of TYPO3 13.4 and 14.3 and the rte_ckeditor configuration examples. All options of the toolbar are described in the CKEditor 5 toolbar documentation.
How do you add a custom CKEditor 5 plugin in TYPO3?
Write the plugin as an ES6 module, register it in Configuration/JavaScriptModules.php and load it with editor.config.importModules. Old CKEditor 4 plugins built with CKEDITOR.plugins.add cannot be reused.
The minimal example below follows the timestamp plugin from the TYPO3 documentation. It adds a "Timestamp" button that inserts the current date and time. The CKEditor 4 to 5 migration guide explains the new plugin concepts.
If you prefer ready-made TYPO3 CKEditor plugins to writing your own, the free Community Edition of the CKEditor Pack, built together with the CKEditor team, adds features such as Fullscreen Mode, Find and Replace, Templates and Word Count without a license key.
// EXT:my_sitepackage/Resources/Public/JavaScript/Ckeditor/timestamp-plugin.js
import { Plugin } from '@ckeditor/ckeditor5-core';
import { ButtonView } from '@ckeditor/ckeditor5-ui';
export class Timestamp extends Plugin {
static pluginName = 'Timestamp';
init() {
const editor = this.editor;
// Register the button so it can be used as toolbar item
editor.ui.componentFactory.add(Timestamp.pluginName, () => {
const button = new ButtonView();
button.set({
label: 'Timestamp',
withText: true
});
// Insert the current date and time at the cursor position
button.on('execute', () => {
const now = new Date();
editor.model.change(writer => {
editor.model.insertContent(writer.createText(now.toString()));
});
});
return button;
});
}
} <?php
// EXT:my_sitepackage/Configuration/JavaScriptModules.php
return [
'dependencies' => ['backend'],
// The TYPO3 v13.4 docs add this tag, the v14.3 docs no longer list it
'tags' => [
'backend.form',
],
'imports' => [
'@my-vendor/my-package/timestamp-plugin.js' => 'EXT:my_sitepackage/Resources/Public/JavaScript/Ckeditor/timestamp-plugin.js',
],
]; # EXT:my_sitepackage/Configuration/RTE/MyPreset.yaml
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
editor:
config:
importModules:
- { module: '@my-vendor/my-package/timestamp-plugin.js', exports: [ 'Timestamp' ] }
toolbar:
items:
- bold
- italic
- '|'
- clipboard
- undo
- redo
- '|'
- timestamp Test the cycle
- Edit a text element. Select a sentence and choose Lead text in the styles menu.
- Select a link and choose Button link.
- Save, close and reopen the element. Both styles must still be applied.
- Open the frontend and check the HTML:
<p class="lead">and<a class="btn">.
Without your preset, the editor shows the default toolbar. With it, you see the shorter toolbar from step 1.
If the class disappears on save: the RTE processing removes it. Check the preset imports and that the style definition uses a plain class. If it survives but has no effect: the CSS rule is missing in the frontend stylesheet.
Tips for editors
- Keep the toolbar short. Fewer buttons mean fewer styling mistakes.
- Offer only the heading levels your design uses.
- Remove
sourceEditingfor editors who do not know HTML.
Common mistakes and troubleshooting
Most CKEditor problems in TYPO3 come from a preset that is not active, a YAML indentation error or an old cache. Check these points in this order.
The toolbar or a button does not show
- Check that your preset is registered: System > Configuration > $GLOBALS['TYPO3_CONF_VARS'] (Global Configuration) > RTE.
- Check which preset applies to the field. A field preset in page TSconfig wins over TCA and over
RTE.default.preset. - Indent with two spaces and put a space after each colon. YAML is case sensitive.
- Items such as
fontSize,highlightorfullscreenneed their package inimportModules. If an item is missing, CKEditor logstoolbarview-item-unavailablein the browser console. - CKEditor 4 keys such as
toolbarGroups,removeButtonsandstylesSethave no effect in TYPO3 v12 to v14. Rewrite them astoolbar.itemsandstyle.definitions.
Styles or editor CSS are missing
- The Style dropdown only lists entries from
style.definitions. The v14.3 docs recommend defining CSS classes there instead of inhtmlSupport.allow. - Files in
contentsCssmust be downloadable viafetch(), because TYPO3 prefixes the CSS in the browser. Keep the corecontents.cssin the list if you want its default styling. - Browsers cache this CSS. Change a query string such as
?v=2after each edit. - TYPO3 v14:
contents.cssadapts to light and dark mode. If the editor must stay light, pointcontentsCssto your own file.
Tags or attributes disappear on save
- Allow the element in the editor with
htmlSupport.allowand check that the processing rules (allowTagsin Processing.yaml) keep it. - Do not remove the Processing.yaml import. The documentation warns that this removes security measures.
- Elements unknown to the CKEditor 5 schema, such as
svgor custom elements, cannot be allowed withhtmlSupport.
Changes do not appear at all
Flush all caches after you edit YAML, page TSconfig, ext_localconf.php or JavaScriptModules.php: Admin Tools > Maintenance > Flush TYPO3 and PHP Cache in v13, System > Maintenance in v14, or vendor/bin/typo3 cache:flush on the command line. Then reload the backend.
Want editors to see accessibility problems while they type in CKEditor? Read our post on the live accessibility checker for TYPO3.
Moving from CKEditor 4 to CKEditor 5?
The free Upgrade Playbook for TYPO3 (PDF with 18 pages plus an Excel worksheet) shows the safe path from TYPO3 v11 to v14, one LTS step at a time.
CKEDITOR.editorConfig = function(config) {
config.toolbarGroups = [
{name: 'basicSyles', groups: ['basicStyles']}
];
config.removeButtons := 'Underline,Strike';
} YAML code of CKEditor for TYPO3
editor:
config:
toolbarGroups:
- {name: basicSyles, groups: [basicStyles]}
removeButtons:
- Underline
- Strike - Step 3. Configure your preset, here are examples.
Default: CKEditor Preset
RTE {
default.preset = default
} Full: CKEditor Preset
RTE {
default.preset = full
} Minimal: CKEditor Preset
RTE {
default.preset = minimal
} Override One Field
// Syntax: RTE.config.[tableName].[fieldName].preset
RTE {
config {
tt_content {
bodytext.preset = myFavouritePreset
}
}
} Override One Field: If Type Match
// Syntax: RTE.config.tt_content.bodytext.types.textmedia.preset = minimal
RTE {
config {
tt_content {
bodytext {
types {
textmedia.preset = myFavouritePreset
}
}
}
}
} Override News Extension Field
RTE {
config {
tx_news_domain_model_news {
bodytext.preset = minimal
}
}
} How does the default TYPO3 core CKEditor preset look-a-like?
You don’t require to start and learn each property by heart. A good way to learn from the TYPO3 core’s default configuration.
Just copy TYPO3 core’s YAML /typo3/sysext/rte_ckeditor/Configuration/RTE/Default.yaml to your custom extension /yourextension/Configuration/RTE/
# typo3/sysext/rte_ckeditor/Configuration/RTE/Default.yaml
# Load default processing options
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
# Add configuration for the editor
# For complete documentation see http://docs.CKEditor.com/#!/api/CKEditor.config
editor:
config:
format_tags: "p;h1;h2;h3;h4;h5;pre"
toolbarGroups:
- { name: styles, groups: [ styles, format ] }
- { name: basicstyles, groups: [ basicstyles ] }
- { name: paragraph, groups: [ list, indent, blocks, align ] }
- { name: links, groups: [ links ] }
- { name: clipboard, groups: [ clipboard, cleanup, undo ] }
- { name: editing, groups: [ spellchecker ] }
- { name: insert, groups: [ insert ] }
- { name: tools, groups: [ table, specialchar ] }
- { name: document, groups: [ mode ] }
justifyClasses:
- text-left
- text-center
- text-right
- text-justify
extraPlugins:
- justify
removePlugins:
- image
removeButtons:
- Anchor
- Underline
- Strike
- Styles if (empty($GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets'][MyPreset])) {
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets'][MyPreset] = 'EXT:yourextension/Configuration/RTE/MyPreset.yaml';
} Tip: You can also add the above code into typo3conf/AdditionalConfiguration.php
- Step 2. /yourextension/Configuration/RTE/MyPreset.yaml
# Import basic configuration
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
# Add configuration for the editor
# For complete documentation see http://docs.CKEditor.com/#!/api/CKEditor.config
editor:
config:
# Include custom CSS
contentsCss: "EXT:yourextension/Resources/Public/Css/rte.css" - Step 3. Assign your Custom Preset to CKEditor RTE eg., RTE.default.preset = MyPreset at PageTS.
There are multiple options to perform Step 3 (assign custom preset to RTE) as below.
Option 1: Globally Applied with PageTSConfig
// Page > Properties > Resources > PageTS field
RTE {
default {
preset = MyPreset
}
} Option 2: Setup through TCA
// yourextension/Configuration/TCA/tx_yourextension_domain_model_table.php
'content' => [
'label' => 'YourLabel',
'config' => [
'type' => 'text',
'cols' => 48,
'rows' => 5,
'enableRichtext' => true,
'richtextConfiguration' => 'minimal',
],
], Option 3. Assign Preset to Particular Table/Field with PageTSConfig
// Page > Properties > Resources > PageTS field
// Syntax
RTE {
config {
[table].[field].preset = default
[table].[field].types.[type].preset = full
}
}
// Example
RTE {
config {
tt_content {
bodytext {
preset = minimal
types {
textmedia.preset = default
myfield.preset = full
}
}
}
}
} # yourextension/Configuration/RTE/MyPreset.yaml
# Load default processing options
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
# Add configuration for the editor
# For complete documentation see http://docs.CKEditor.com/#!/api/CKEditor.config
editor:
config:
toolbarGroups:
- { name: clipboard, groups: [ clipboard, cleanup, undo ] } In the above example, the clipboard toolbar group contains three buttons. In this ways, you can configure your favorite editor :)
Explore awesome CKEditor’s UI based to get each button and toolbar at Toolbar Configurator
How can we allow images into CKEditor TYPO3?
Many people may be wondering how we can integrate images into CKEditor. In TYPO3 CMS login, by default such a feature is not available with CKEditor. However, you can enhance your HTML rich text editor experience by adding image integration to this WYSIWYG text editor. With the right configurations, your rich text editor JS setup can support seamless image embedding, making content creation much more dynamic and visually appealing.
- Same image handling as rtehtmlarea (magic images, usual RTE TSConfig supported)
- Image browser as usual in e.g. FAL file selector
- Dialog for changing width, height, alt and title (aspect ratio automatically maintained)
Step 1. Install TYPO3 extension EXT:rte_ckeditor_image
Step 2. Configuration
#1 EXT:yourextension/ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['default'] = 'EXT:yourextension/Configuration/RTE/MyPreset.yaml'; #2 EXT:yourextension/Configuration/RTE/MyPreset.yaml
imports:
# Import default RTE config (for example)
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Default.yaml" }
# Import the image plugin configuration
- { resource: "EXT:rte_ckeditor_image/Configuration/RTE/Plugin.yaml" } # Your PageTSConfig
editor:
config:
# RTE default config removes image plugin - restore it:
removePlugins: null Step 3. Enable RTE config preset
# Page TSConfig
RTE.default.preset = MyPreset Step 4. (Optional) Configuration
Maximum width/height
The maximum dimensions relate to the configuration for magic images which have to be set in Page TSConfig:
# Page TSConfig
RTE.default.buttons.image.options.magic {
maxWidth = 1020 # Default: 300
maxHeight = 800 # Default: 1000
} Usage as lightbox with fluid_styled_content
# Template Constants
styles.content.textmedia.linkWrap.lightboxEnabled = 1 Allowed extensions
By default the extensions from $TYPO3_CONF_VARS['GFX']['imagefile_ext'] are allowed. However you can override this for CKEditor by adding the following to your YAML configuration:
editor:
externalPlugins:
typo3image:
allowedExtensions: "jpg,jpeg,png" # yourextension/Configuration/RTE/MyPreset.yaml
# Load default processing options
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
# Add configuration for the editor
# For complete documentation see http://docs.CKEditor.com/#!/api/CKEditor.config
editor:
config:
allowedContent: true What is an Advanced Content Filter?
- Only tags/classes/styles that are configured should be kept
- Filter content during editing and paste
- Enabled by default
- Makes 'processing' config most of the times obsolete 'RTE.proc'
editor:
config:
format_tags: "p;h1;h2;h3;h4;h5;pre;address;div" 3. The Toolbar Groups
editor:
config:
toolbarGroups:
- { name: clipboard, groups: [clipboard, undo] }
- "/"
- { name: styles } 4 stylesSet
editor:
config:
stylesSet:
- { name: "quote-style", element: "p", attributes: { class: "quote-style"}}
- { name: "Load More Button", element: "a", attributes: { class: "load-more"}}
- { name: "More Content", element: "div", attributes: { class: "more-content"}} 5. extraPlugins
editor:
config:
allowTags:
- address
- label allowTagsOutside:
- address
- label justifyClasses:
- text-left
- text-center
- text-right
- text-justify
- quote-style extraPlugins:
- justify
removePlugins:
- image removeButtons:
- Anchor
- Underline
- Strike 6 contentsCss
The ContentsCSS feature allows you to define various CSS styles for direct usage and viewing in CKEditor.
7. removeButtons
RemoveButtons helps in the removal of individual functions and buttons that result due to the importing of Base.yaml.
buttons:
link:
url:
properties:
class:
default: 'external-link'
properties:
class:
allowedClasses: 'external-link' classes:
external-link:
name: 'External Link' classesAnchor:
externalLink:
class: 'external-link'
type: 'url'
target: '_blank' 'use strict';
(function ()) {
CKEDITOR.plugins.add('example_plugin', {
init: function (editor) {
// Let's add CKEditor Icon
// Note: Please put icon file at /Resources/Public/CkEditorPlugins/icons/mycustom.png
icons: 'mycustom',
// Add button to CKEditor
editor.ui.addButton('MyPreset',{
label: 'My Button',
toolbar: 'basicStyles',
command: 'insertTimestamp'
});
// Execute CKEditor Command
editor.addCommand('insertTimestamp',{
exec: function (editor){
var now = new Date();
editor.insertHtml (
'The current date and time is: <em>' + now.toString() + '</em>'
)
}
});
}
})
} Step 2. /yourextension/Configuration/RTE/MyPreset.yaml
# Load default processing options
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Default.yaml" } editor:
# Let's load our sample custom plugin
externalPlugins:
myplugin: { resource: "EXT:yourextension/Resources/Public/CkEditorPlugins/myplugin.js" } Step 3. Register CKEditor Sample Custom Plugin
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['MyPreset'] = 'EXT:yourextension/Configuration/RTE/MyPreset.yaml'; Step 4. Test-drive with RTE
RTE {
default {
preset = MyPreset
}
} # Create yourextension/Resources/Public/CkEditorPlugins/myplugin.js
'use strict';
(function ()) {
CKEDITOR.plugins.add('example_plugin', {
init: function (editor) {
// Let's add CKEditor Icon
// Note: Please put icon file at /Resources/Public/CkEditorPlugins/icons/mypreset.png
icons: 'mypreset',
// Add button to CKEditor
editor.ui.addButton('MyPreset',{
label: 'My Button',
toolbar: 'basicStyles',
command: 'openExampleModal'
});
// Execute CKEditor Command
editor.addCommand('openExampleModal',{
exec: openModal
});
}
})
}
function openModal() {
require([
'TYPO3/CMS/Backend/Modal'
], function(Modal) {
Modal.show(
'Sample Plugin',
'Hello'
);
})
} Advanced AJAX-based Custom TYPO3 CKEditor Plugin
# /yourextension/Configuration/RTE/MyPreset.yaml
# Let's configure AJAX route of TYPO3
editor:
# Let's load our sample custom plugin
externalPlugins:
myplugin: {
resource: "EXT:yourextension/Resources/Public/CkEditorPlugins/myplugin.js"
route: "configsample_route"
}
# yourextension/Resources/Public/CkEditorPlugins/myplugin.js
function openModal() {
// Get AJAX URL
var url = editor.config.myplugin.routeUrl;
require([
'TYPO3/CMS/Backend/Modal'
], function(Modal) {
// Display modalbox
Modal.cdvanced({
type: Modal.types.iframe,
title: 'Sample Plugin',
content: url,
size: Modal.sizes.large
})
})
} # Create yourextension/Resources/Public/CkEditorPlugins/myplugin.js
'use strict';
(function () {
CKEDITOR.dtd.$removeEmpty.em = 0;
CKEDITOR.dtd.$removeEmpty.i = 0;
CKEDITOR.plugins.add('icon-envelope', {
icons: 'iconenvelope',
init: function (editor) {
editor.ui.addButton( 'IconEnvelope', {
label: 'Icon E-Mail',
toolbar: 'insert',
command: 'insertIconEnvelope'
});
editor.addCommand( 'insertIconEnvelope', {
exec: function (editor) {
var icon = editor.document.createElement('i');
icon.setAttribute('class', 'fa fa-envelope');
editor.insertElement(icon);
}
});
}
});
}); Step 2. Include in YAML Configuration
# /yourextension/Configuration/RTE/MyPreset.yaml
# Load default processing options
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
# Add configuration for the editor
# For complete documentation see http://docs.ckeditor.com/#!/api/CKEDITOR.config
editor:
externalPlugins:
icon-envelope: { resource: "EXT:mytheme/Resources/Public/CkEditorPlugins/icon-envelope/plugin.js" } - Step 1. Search CKEditor plugin which you want to integrate into TYPO3 from CkEditor Plugin
- Step 2. Let's imagine you want to integrate this Codesnippet plugin CKEditor Codesnippet
- Step 3. Download & Unzip the plugin Put the plugin at yourextension/Resources/Public/CKeditor/Plugins/codesnippet/
- Step 4. Configuration/RTE/Plugin.yaml
editor:
externalPlugins:
codesnippet:
resource: "EXT:yourextension/Resources/Public/CKeditor/Plugins/codesnippet/" Step 5. Any extra configuration require in the plugin, check their documentation
Step 6. Clear the cache! You should able to see "Insert Code Snippet"
Step 1.Download & Unzip plugin ckeditor.com/cke4/addon/youtube
Put the plugin at yourextension/Resources/Public/CKeditor/Plugins/youtube/
Step 2. Configuration/RTE/Plugin.yaml
editor:
externalPlugins:
youtube: { resource: "EXT:mx_ext/Resources/Public/RTE/Plugins/youtube/plugin.js" }
config:
youtube_width: '550'
extraAllowedContent: '*(*)[data-*]; iframe' Step 3. Clear the cache! You should able to see "Youtube Video Button"
Word Count TYPO3 CKEditor
Step 1. Download & Unzip plugin https://ckeditor.com/cke4/addon/wordcount
Put the plugin at yourextension/Resources/Public/CKeditor/Plugins/wordcount/
Step 2. Configuration/RTE/Plugin.yaml
# Register wordcount plugin for ckeditor
editor:
externalPlugins:
wordcount:
resource: "EXT:rte_ckeditor_wordcount/Resources/Public/JavaScript/Plugins/wordcount/" Step 3. Import into RTE Preset
imports:
- resource: { "EXT:rte_ckeditor_myplugin/Configuration/RTE/Plugin.yaml" }
editor:
config:
wordcount:
showCharCount: true Step 4. Clear the cache! You should be able to see the "WordCount” button.
editor:
config:
defaultContentLanguage: "de"
defaultLanguage: "de"
contentsLanguage: "de"
language: "de"
scayt_autoStartup: true # Spellcheck always on
scayt_sLang: "de_DE" # spellcheck language
wsc_lang: "de_DE" Popular TYPO3 CKEditor Extensions
Font Awesome Icons into TYPO3 CKEditor
Step 1. Install TYPO3 Extension rte_ckeditor_fontawesome
Step 2. TS Config
# For the default template to the CKE-Editor
RTE.default.preset = defaultFA4
# For the full template of CKE-Editor
RTE.default.preset = fullFA4 Step 3. TYPO3 Constants
# Include your font-awesome path
plugin.tx_ckeditor_fontawesome.css = {$path}
# Inlcude font-awesome through CDN
plugin.tx_ckeditor_fontawesome.css = https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css Step 4. Import to Your RTE Config
To add this Plug-In in your own RTE Config. Import the Config in your preset.
imports:
- { resource: "EXT:rte_ckeditor_fontawesome/Configuration/RTE/PluginFA5.yaml" } At the next step, you need to extend your individual Toolbar-Config to add the Clickable Icon.
editor:
config:
toolbar:
- [ 'Bold', 'Italic', .....]
...
- [ 'ckeditor_fa5' ] Do you want to migrate RTE htmlArea to CKEditor in TYPO3?
Unfortunately, TYPO3 does not provide any automatic migration from old RTE htmlArea to CKEditor.
You should carefully migrate it manually, but no worries, It’s not that much hard. Because, most of them are looking very similar so go one by one each configuration.
RTE htmlArea PageTSConfig
RTE.default {
showButtons(
bold, italic, underline,
left, center, right, justifyfull,
orderedlist, unorderedlist, indent, outdent,
line, link, removeformat,
copy, cut, paste, undo, redo
)
toolbarOrder(
bold, italic, underline, bar,
left, center, right, justifyfull,
orderedlist, unorderedlist, bar, indent, outdent, linebreak,
line, link, removeformat, bar,
copy, cut, paste, bar, undo, redo
)
} RTE CKEditor YAML
editor:
config:
toolbar:
- [ 'Bold', 'Italic', 'Underline', '-' ]
- [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ]
- [ 'NumberdList', 'BulletedList', '-', 'Indent', 'Outdent' ]
- '/'
- [ 'HorizontalRule', 'Link', 'RemoveFormat', '-' ]
- [ 'Copy', 'Cut', 'Paste', '-' , 'Undo', 'Redo']
extraPlugins:
- justify More questions about TYPO3 CKEditor
Which CKEditor version do TYPO3 v13 and v14 use?
TYPO3 v13.4 LTS and v14.3 LTS both use CKEditor 5 through the core extension rte_ckeditor. The exact CKEditor 5 release changes with TYPO3 patch releases: v13.4.0 shipped CKEditor 5 v43, and the current 13.4 and 14.3 branches require v48. CKEditor 4 was used from TYPO3 v8 to v11.
Can I reuse CKEditor 4 plugins in TYPO3 v13 or v14?
No. CKEditor 5 has a different plugin architecture, and the TYPO3 documentation states that CKEditor 4 plugins are not compatible with it. Rewrite each plugin as an ES6 module based on the CKEditor 5 Plugin class, register it in JavaScriptModules.php and load it via importModules. Check first whether CKEditor 5 or an extension already offers the feature.
How do I insert images in CKEditor in TYPO3 v13 and v14?
The TYPO3 core removed rich text image handling in v10, so you need an extension. EXT:rte_ckeditor_image (Composer package netresearch/rte-ckeditor-image) version 13.10 supports TYPO3 13.4.21 and later and 14.3. After installation, enable its site set netresearch/rte-ckeditor-image, which adds the insertimage button and the frontend rendering.
Where can I see which RTE presets are available?
Open System > Configuration in the backend, choose $GLOBALS['TYPO3_CONF_VARS'] (Global Configuration) and expand RTE. You see every registered preset name and the YAML file behind it. The core registers default, minimal and full. Extensions and your sitepackage can add more presets in ext_localconf.php.
Can editors use CKEditor in the TYPO3 form editor?
Yes, since TYPO3 v14.2 and therefore in v14.3 LTS. The form editor can use CKEditor 5 for textarea fields, for example the StaticText element, checkbox labels with links and the confirmation finisher. Integrators enable it in the form YAML with enableRichtext and choose any registered RTE preset with richtextConfiguration.
Free TYPO3 guides for your team
Upgrade, accessibility, multilingual and relaunch playbooks for TYPO3 projects, free to download.
Wrap-up!
Thanks for reading a long article.
I hope you enjoyed and explored more about cool CKEditor with our beloved awesome TYPO3 CMS.
What’s your favorite feature in CKEditor? Do you have any questions on CKEditor integration with TYPO3? Did we miss any important feature integration of CKEditor in TYPO3?
Please feel free to write any questions, feedback, or issues at the below comment box. We will be happy to write you back.
And if you’re excited about how AI is changing the TYPO3 world, don’t miss what’s happening in the TYPO3 AI Universe — where TYPO3 and AI come together to simplify workflows and inspire innovation.
Have a Happy Editing!
Sovereign TYPO3 AI: AI Foundation is free and open source, six AI extensions build on it.
Explore TYPO3 AI
Wolfgang Weber
Brand & Communication LeadWolfgang Weber shapes TYPO3 with passion and expertise. As a TYPO3 enthusiast at T3Planet Shop, he has contributed to TYPO3 projects that make websites faster and more secure. Outside of TYPO3, you’ll probably find him exploring local cafés and enjoying football.
More From Author