Use when developing CKEditor 5 custom plugins for TYPO3 v12+, configuring RTE presets, migrating from CKEditor 4, customizing toolbars, or fixing rich text editing issues. Also triggers on: CKE5, RTE config, YAML preset, editor plugin, jQuery removal, backend JS.
From typo3-ckeditor5npx claudepluginhub netresearch/claude-code-marketplace --plugin typo3-ckeditor5This skill uses the workspace's default tool permissions.
checkpoints.yamlreferences/ckeditor5-architecture.mdreferences/migration-guide.mdreferences/plugin-development.mdreferences/typo3-integration.mdscripts/verify-ckeditor5.shSearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides agent creation for Claude Code plugins with file templates, frontmatter specs (name, description, model), triggering examples, system prompts, and best practices.
CKEditor 5 integration patterns for TYPO3: custom plugins, configuration, and migration.
references/ckeditor5-architecture.md - Core MVC, schema, conversionreferences/typo3-integration.md - TYPO3-specific patternsreferences/plugin-development.md - Custom plugin guidereferences/migration-guide.md - CKEditor 4->5 migration$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['my_preset'] = 'EXT:my_ext/Configuration/RTE/MyPreset.yaml';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['ckeditor5']['plugins']['my-plugin'] = [
'entryPoint' => 'EXT:my_ext/Resources/Public/JavaScript/Ckeditor/my-plugin.js',
];
packages/my-plugin/src/
├── myplugin.js # Main: requires Editing + UI
├── mypluginediting.js # Schema, converters, commands
├── mypluginui.js # Toolbar buttons (ButtonView, componentFactory)
└── myplugincommand.js # Command: execute() + refresh()
// Schema: always register with allowIn/allowAttributes
schema.register('myElement', { inheritAllFrom: '$block', allowAttributes: ['type'] });
// Converters: both upcast + downcast required
conversion.for('upcast').elementToElement({ view: { name: 'div', classes: 'my-el' }, model: 'myElement' });
conversion.for('downcast').elementToElement({ model: 'myElement', view: 'div' });
// Command: must implement execute() AND refresh()
class MyCommand extends Command {
refresh() { this.isEnabled = /* check model state */; }
execute() { this.editor.model.change(writer => { /* ... */ }); }
}
TYPO3 backend JS is dropping jQuery without deprecation period. CKEditor 5 plugins must use native APIs only:
querySelector/querySelectorAll instead of $()fetch() + async/await instead of $.ajax/$.getJSONPromise instead of $.DeferredProperty name mismatch is the #1 bug. Frontend JS must match exact backend response property names.
// Backend returns: { content: "...", model: "...", usage: {...} }
const text = result.content; // CORRECT (not result.completion)
CKEditor 5 is a complete rewrite -- no compatibility layer. Migration requires full plugin rewrite:
CKEDITOR.plugins.add() to class-based extends Plugineditor.widgets.add() with schema + converters + commandsConfiguration/RTE/*.yaml)./scripts/verify-ckeditor5.sh /path/to/extension
Contributing: https://github.com/netresearch/typo3-ckeditor5-skill