This project is not covered by Drupal’s security advisory policy.

CKEditor 5 and its Drupal integration are excellent, yet everyday editing still runs into small missing details. CKEditor Extras completes or improves those details without waiting and without forking anything, and gives the maintainers of Drupal core and of CKEditor 5 the time to decide which of these improvements they want and to build them their own way. Think of it as a testing ground: new editing features are tried here on real sites first, and the ones that prove their worth are meant to migrate, sooner or later, into Drupal core or CKEditor 5 itself — at which point the matching submodule retires. Contrib Extras follows the same philosophy for other contributed modules.

The details it covers today are small, but together they cost editors time and trust: you cannot duplicate a table row; copying table cells silently copies nothing when they contain an image, a horizontal line or a nested table; some Style definitions make the text format settings crash; and the Font size button can stack sizes on top of each other instead of replacing them.

All of them live in one maintained package. The base module only ships shared code; every feature is a submodule you enable on its own, and the table tools can also be switched on or off per text format. Nothing in Drupal's output is rewritten or overridden: the submodules extend CKEditor 5 and Drupal core through their public extension points.

New to Drupal? CKEditor is the text box where editors write content. This module adds the small tools editors expect from a word processor — like "duplicate this row" in a table — and fixes a few buttons that do not behave as they promise, without asking a developer to write code.

Features

The package is split into submodules, so a site only turns on what it needs.

CKEditor Extras: Table

  • Adds Duplicate row above and Duplicate row below to the table's Row menu, and Duplicate column left and Duplicate column right to its Column menu, right after CKEditor's own Insert entries.
  • The copy carries everything in the source cells: text, inline styles (backgrounds, borders, padding), classes and attributes, and any widget inside — images, horizontal lines, even nested tables.
  • It works on CKEditor's data model, not through the clipboard. When the selected cells contain a widget, Ctrl+C silently copies nothing: the browser is left with no text to copy and CKEditor never receives the copy event. Duplicating is the reliable way to repeat such rows.
  • The new row or column is created with CKEditor's own table utilities, so merged cells (rowspan/colspan) stay consistent. Heading rows and columns are respected, and left/right follow right-to-left languages the same way core's Insert entries do.
  • Each duplication is a single undo step, and both features can be switched off per text format.

CKEditor Extras: Style

  • Lets the core Style plugin save styles for elements such as li, ul, ol or td (for example li.highlights|Highlights).
  • Without it, core's validation can report a style conflict that no plugin actually owns and throw an OutOfBoundsException while building the error message, so saving the text format ends in "The website encountered an unexpected error".
  • Only that false positive is tolerated. Real conflicts — a style whose class another plugin already manages — still block saving, with core's usual message.

CKEditor Extras: Font

  • For sites using the Font size button of CKEditor 5 Plugin Pack with numeric sizes.
  • Without it, text that already has a size outside the list (pasted from Word or Google Docs, legacy content, or written in Source mode) cannot be changed: picking a new size wraps a new span around the old one, the old size keeps winning, and nothing changes on screen. Removing the size does not work either.
  • With it, the new size replaces the old one and removing a size really removes it. Sizes are written with their unit (font-size:24px).
  • It only acts when the Font size options are numeric; formats using CKEditor's named sizes (Tiny, Small, Big, Huge) are left untouched.

Use cases

  • Price and comparison tables: repeat a styled row — with its backgrounds, borders and a nested table inside — instead of rebuilding it cell by cell.
  • Itineraries, checklists and feature lists: style list items (included / not included, highlights) through the Style dropdown without the text format crashing on save.
  • Content pasted from office documents: let editors actually change or remove the font sizes that came with it.
  • Works in: any content type, Paragraphs, blocks and any entity with a CKEditor 5 text field.

Post-Installation

No configuration pages or content types are created. Enable the base module and the submodules you need:

  1. CKEditor Extras: Table — nothing to configure. In any text format whose toolbar has the core Table button, the new entries appear in the table's Row and Column menus. To hide them in a format, go to Administration → Configuration → Content authoring → Text formats and editors, edit the format, and untick them under CKEditor 5 plugin settings → Duplicate table row / Duplicate table column.
  2. CKEditor Extras: Style — nothing to configure. Define your styles as usual under CKEditor 5 plugin settings → Style; styles on list items and table cells now save.
  3. CKEditor Extras: Font — nothing to configure in this module. Under CKEditor 5 plugin settings → Font Size (from CKEditor 5 Plugin Pack), enter numeric sizes, one per line (for example 12, 16, 24).

If a change does not appear right after enabling a submodule, clear caches (drush cr or Administration → Configuration → Performance).

Additional Requirements

  • Drupal core ^10.3 || ^11 (developed and tested on Drupal 11.4 with CKEditor 5 v47).
  • Core CKEditor 5 module.

No external libraries and no build step: the CKEditor plugins are plain JavaScript loaded through Drupal libraries.

  • CKEditor 5 Plugin Pack — its Font size button is what CKEditor Extras: Font fixes. The submodule does not depend on it and simply does nothing without it.

Similar projects

  • CKEditor 5 Plugin Pack — The official collection of free CKEditor 5 plugins by CKSource (fonts, highlight, find and replace, layout tables and more). It does not duplicate table rows or columns; CKEditor Extras complements it rather than overlapping with it.
  • Editor Advanced Table — Adds class, id and dir attributes to the Table Properties dialog. It works on table attributes; CKEditor Extras works on table structure. Both can be used together.
  • CKEditor5 Table Fix — Restores legacy table markup (tfoot, th scope, caption…) that CKEditor 5 would strip. A different problem: markup preservation, not editing tools.
  • AI: CKEditor Extras — Despite the similar name, an unrelated project: AI paraphrasing and tone adjustment for the Drupal AI ecosystem. CKEditor Extras has no AI features and calls no external services.
  • Copy and paste — The manual approach works for plain text, but not for cells holding widgets (see CKEditor Extras: Table above).

I also maintain and recommend the following modules. None of them rewrite or override Drupal's core output — they integrate cleanly with the existing system, extend its native capabilities, and work perfectly alongside this module:

  • Contrib Extras — The same idea applied to other contributed modules: small missing details are completed from outside, and each submodule retires once the target module adopts the feature.
  • CKEditor Advanced Container — Flexbox containers and columns inside CKEditor 5, with widths, gaps, backgrounds, borders and responsive behavior configured from the editor. A semantic alternative to layout tables.
  • CKEditor Content Groups — Accordions and horizontal or vertical tabs inside CKEditor 5.
  • CKEditor Media Image Style — Adds a style selector button to the CKEditor 5 media toolbar so editors can choose an image style (thumbnail, large, etc.) per embed, without creating new view modes.
  • CKEditor Media Title — Lets editors set a custom title attribute on media images embedded through CKEditor 5, directly from the media toolbar.
  • Media Reference Override — Extends Drupal's standard media reference field to allow per-reference overrides of fields like alt text or title, storing the override on the referencing entity rather than the media entity itself.
  • Advanced Image Media Attributes Formatter — Extends Drupal's native image field formatters to expose additional HTML attributes (alt, title, class, etc.) as configurable options.

Commercial Support

This module is developed and maintained by Nelo.
The maintainer is available for professional consulting and architectural guidance related to CKEditor 5 integrations, media systems, production Drupal implementations, and enterprise content architecture.

Supporting this Module

Check out our sponsor, Dom Host Seo, who made this module possible with their support!

Community Documentation

No external videos or demo sites are available yet. The module includes help text under Help → CKEditor Extras.

For questions, bug reports or feature requests, please use the issue queue on Drupal.org.

Project information

Releases