CKEditor 5 changelog
This is the CKEditor 5 changelog guide. Here you will find information about the most important changes introduced in the release, new features, and bug fixes.
Information about both major and minor breaking changes is available, too, if the release introduces them. You can read more about breaking changes in CKEditor 5 in the Versioning policy guide.
You can find more information about each release in the blog posts linked at the start of each entry.
This guide provides the changelog information for the 3 latest releases of CKEditor 5. For older releases, refer to the release notes on GitHub.
# CKEditor 5 45.0.0 release
The CKEditor 5 v45.0.0 release brings powerful new features and improvements, making content creation smoother and more versatile. From enhanced email editing to a refined linking experience and a brand-new full-screen mode, this update is packed with valuable upgrades.
# Release highlights
# Email editing enhancements
We are making it easier to create and edit emails directly in CKEditor 5 with several enhancements. This release introduces the following new features:
- Export with Inline Styles (⭐) provides the ability to export email content with automatically inlined styles, ensuring compatibility and proper rendering across different email clients.
- Email Configuration Helper (⭐) is a new configuration helper plugin that provides guidance for integrators to correctly set up an email-friendly editor while avoiding common pitfalls.
- Layout tables: are a new type of tables that has been introduced to simplify the creation of structured email designs, offering better control over layout, alignment and spacing.
Apart from these new features, this update also brings various fixes and improvements related to table behavior, enhanced HTML support, and better handling of complex email structures. These refinements help ensure a more seamless email editing experience, reducing inconsistencies and improving compatibility with external email clients.
# The fullscreen feature
A long-requested feature has finally arrived with the introduction of full-screen editing for the classic and decoupled editor types. This new mode provides a focused writing experience by making the editor the centerpiece of the screen. The expanded screen space allows for better visibility of content in sidebars such as comments, suggestions, and document outlines, enhancing your overall workflow.
# Improved linking experience
Linking in CKEditor 5 has been significantly upgraded with a redesigned user interface, making adding and editing links more intuitive. Users can now easily link to bookmarks within the document and select links from predefined lists (defined by the developer). These improvements make inserting and managing links faster and more flexible than ever before.
During this initiative, we also aligned visual and technical components of the editor. Each balloon got a header with the tile, we also unified the toolbar behavior and keystrokes of Link and Bookmarks with other widget’s toolbars like image and tables.
[!NOTE]
The UI got updated in several places: main view, link properties (decorators), and also its technical implementation changed. Make sure to give special attention to the update if you did any customizations to the link interface.
# New installation methods improvements: icons replacement
We are continuing to strengthen the new installation methods while phasing out older solutions. We added one of the key components you asked for: replacing our icons with your custom ones. It is now possible to replace the icons via the package’s override mechanism.
[!NOTE]
To achieve a proper solution for icons replacement for the npm builds, we needed to introduce a breaking change. If you used our icons for any purposes, make sure to update their paths.
# ⚠️ Deprecations in old installation methods: stage 1 completed
We are progressing with deprecation according to our sunset plan. From this release, predefined builds’ packages, such as @ckeditor/ckeditor-build-classic
, are now officially deprecated. We also dropped support for Webpack 4 in both the old and new installation methods.
By the end of 2025, custom builds that rely on webpack and DLL builds will also be deprecated. Refer to our documentation and migration guides to ensure a smooth transition.
We are committed to making CKEditor 5 even better. Stay tuned for more improvements in upcoming releases! If you have any feedback, let us know — we are always listening.
Please refer to the update guide to learn more about these changes.
Happy editing!
# MAJOR BREAKING CHANGES
- bookmark: The
BookmarkUI#actionsView
is no longer available. The bookmark feature is now using theWidgetToolbarRepository
instead. - build-*: CKEditor 5 predefined builds are no longer available.
- link: The
LinkUI#actionsView
is no longer available. The bookmark feature now uses theLinkUI#toolbarView
(an instance of theToolbarView
class) instead of the customLinkActionsView
.
# MINOR BREAKING CHANGES
- link: The
createBookmarkCallbacks()
helper is now replaced by theisScrollableToTarget()
andscrollToTarget()
helpers. - table: The
FormRowView
class was moved to the@ckeditor/ckeditor5-ui
package. - table: The
form.css
component was moved to the@ckeditor/ckeditor5-theme-lark
package. - All CKEditor 5 icons are now available in the
@ckeditor/ckeditor5-icons
package.
# Features
- email: Introduced a new package to validate the editor configuration for email compatibility. It helps prevent misconfigurations by enforcing best practices and future-proof rules. Added utilities for post-processing CSS, improving support across various email clients by adjusting styles for better rendering consistency.
- export-inline-styles: Added a new package for exporting content with inline styles. Ensures CSS classes (
[class]
) and IDs ([id]
) are inlined within elements, improving compatibility with email clients that strip external styles. It helps maintain consistent formatting across different email clients, reducing rendering issues. - fullscreen: Introduced the fullscreen mode feature. Closes #18026. (commit)
- html-support: Introduced the ability to render the
<style>
elements from the<head>
section of editor data content using theFullPage
plugin. See #13482. (commit) - revision-history: Added a new property
RevisionHistory#isRevisionViewerOpen
that indicates whether the revision history is opened or not. - source-editing-enhanced: The one-dark theme is now built-in and available via
config.sourceEditingEnhanced.theme
by passing the'dark'
value. This change enables the use of the dark theme with the CDN installation method, which does not support externalCodeMirror
dependencies. Additionally, if you previously used theoneDark
extension directly, you can now switch totheme: 'dark'
for built-in support. - table: Introduced the layout tables feature to enable constructing grids with tables, for example for email editing. These tables are designed for layout purposes, and include the
role="presentation"
parameter for accessibility. Users can insert layout tables via the editor toolbar and switch between content and layout tables. The editing view now closely matches the rendered output. Closes #18132. (commit) - table: Added the ability to toggle between content tables and layout tables. Users can switch table types using a split button in the table properties UI. While captions and
<th>
elements may be lost, table structure remains intact. Closes #18131. (commit) - table: Dragging and dropping a table into another table no longer merges them. Instead, the dropped table is placed as a whole inside the target cell. Pasting tables remains unchanged. Closes #18126. (commit)
- template: Inserting a template containing a table into another table no longer merges them. Instead, the template is placed as a whole inside the target cell. See #18126.
- theme-lark: Introduced the
form.css
component . (commit) - ui: Added the
MenuBarView#disable()
andMenuBarView#enable()
methods. They disable/enable all top-level menus in menu bar. Closes #17940. (commit) - ui: Added the
ToolbarView#switchBehavior()
method to switch toolbar behavior after the editor has been initialized. Closes #18159. (commit) - ui: Introduced the
FormRowView
class. (commit) - Moved all icons to the
@ckeditor/ckeditor5-icons
package. Related to #16546. (commit) - Added the
@ckeditor/ckeditor5-icons
package to the core DLL package. (commit)
# Bug fixes
- ckbox: Resolved an issue where images from private categories were not appearing in the selector. Closes #18044. (commit)
- emoji: Fixed the emoji panel not being visible while used in comments archive. Closes #17964. (commit)
- engine: The selection should not move to another table row while switching heading rows. Closes #17962. (commit)
- heading: Added the missing
converterPriority
type definition toHeadingOption
interface. Closes #18182. (commit) - html-support: The floated tables are now loaded and showed as expected in the editor’s view. Closes #18203. (commit)
- link: The
Autolink
feature will now correctly autolinkhttp://localhost
andhttp://localhost:port
. Closes #18185. (commit) - mention: Fixed the mention panel not being visible while used in comments archive. Closes #17964. (commit)
- revision-history: Revisions will now correctly retain data for HTML embed widget, as well as
<script>
and<style>
tags enabled by the General HTML Support feature. Before, when revision was saved, these elements were saved empty, and this lead to data loss when such revision was restored. Note, that this will not fix revisions that are already affected by this error. - revision-history: Fixed a crash when viewing a revision which had an HTML comment node in its data (reproducible with General HTML Support plugin).
- revision-history: Fixed handling
UIElement
s andRawElement
s by revision history (may concern third-party custom plugins). - revision-history: Fixed a crash when viewing a revision which had a collapsed marker in its data (may concern third-party custom plugins).
- table: Removed
[role="textbox"]
from the<td>/
` editables. Windows Narrator no longer reads table dimensions as 0 by 0. Closes #16923. (commit) - track-changes: The editor no longer crashes during initialization when the
ShiftEnter
plugin is removed. - ui: Do not open disabled menu bar menu items on arrow down press. Closes #17915. (commit)
- ui: The
ButtonView#icon
property can now be set/reset after the button’s first render. (commit) - table: Widgets UI elements should be visible when they are inside tables. Closes #18268.
- table: Nested tables outline should not be cut of at the bottom during hovering. Closes #18262.
- link: Link balloon no longer disappears when scrolling the page slightly on iOS. Closes #18022.
# Other changes
- bookmark: The Bookmark feature now uses the
WidgetToolbarRepository
instead of a customActionsView
to display the bookmark toolbar in the contextual balloon. The new toolbar uses components registered in theComponentFactory
. (commit) - bookmark: Form styles and structure are now unified with use of
ck-form
andck-form__row
. (commit) - collaboration-core: Translations are now supported in the date formatter used by comments and suggestions, allowing for localizing dates.
- engine: Added the read-only
DomConverter#domDocument
property. Closes #18146. (commit) - image: Image and custom resize form styles and structure now unified with use of
ck-form
andck-form__row
. (commit) - link: The link feature now uses the
ToolbarView
instead of a customLinkActionsView
to display the link toolbar in the contextual balloon. The new toolbar uses components registered in theComponentFactory
. (commit) - link: Form styles and structure are now unified with use of
ck-form
andck-form__row
. (commit) - real-time-collaboration: Added a more modern look to the presence list collapsed view (used when many users are connected to the document).
- revision-history: The document outline will now be hidden when the revision history is opened.
- source-editing: Document outline and annotations will now be hidden when editor is in source editing mode. Closes #17978. (commit)
- table: Extracted the
form.css
to@ckeditor/ckeditor5-theme-lark
package. (commit) - table: Extracted the
FormRowView
to@ckeditor/ckeditor5-ui
package. (commit) - ui: The
IconView
now throws a meaningful error if the provided icon content is not a valid SVG. (commit) - widget: The
WidgetToolbarRepository#register()
now accepts a customized list of desired balloon positions. (commit) - Added the
Belarusian
language translations for CKEditor 5. Huge thanks to @karavanjo. (commit) - Upgraded the minimal version of Node.js to 20.0.0 due to the end of LTS. (commit)
- Updated TypeScript
target
toes2022
. Closes #17886. (commit) - Replaced
lodash-es
withes-toolkit
. See #16395. (commit) - The
@ckeditor/ckeditor5-build-*
packages are no longer maintained. (commit)
# CKEditor 5 44.3.0 release
We are happy to announce the release of CKEditor 5 v44.3.0.
# Release Highlights
This release brings a couple of minor improvements and bug fixes:
- Link Decorators: We fixed the behavior of the multiple manual link decorators that set the
rel
attribute. The fix happened so deep in the engine that we improved the overall performance of the editor slightly as well. - Added a new
EmptyBlock
plugin: From now on, new plugin prevents adding
to the output data of blocks, works similarly to thefillEmptyBlocks
configuration in CKEditor 4. - Support for the
<hr>
element in the General HTML Support plugin enhanced: attributes of the<hr>
element are now properly preserved if configuration allows it. - Emoji: We enhanced emoji support for better compatibility with users’ older devices.
For more details, see the changelog below.
# MINOR BREAKING CHANGES
- engine: The
ViewConsumable.consumablesFromElement()
is removed and replaced with theview.Element#_getConsumables()
internal method. You should useViewConsumable.createFrom()
to create consumables if needed. - engine: The
ViewElementConsumables
now accepts and outputs only normalized data. TheViewConsumable
still accepts normalized or non-normalized input. - engine: The
Matcher#match()
andMatcher#matchAll()
output is now normalized. TheMatchResult#match
now contains normalized data compatible with changes in theViewConsumable
.
# Features
- engine: Export the
SchemaContext
class from package. Closes #18003. (commit) - html-support: Added support for the
<hr>
element. Closes #12973. (commit) - html-support: Add the
EmptyBlock
plugin that prevents adding
to output data. (commit)
# Bug fixes
- collaboration-core: User initials will now be generated based on the words that start with letters, ensuring that only valid alphabetic characters are used in the initials.
- comments: Annotations will no longer be lost during real-time collaboration when a user removes and immediately reverts (undo) content containing comment markers.
- comments: The editor will no longer crash when one user removes content containing a comment that another user is editing.
- engine: The link
[rel]
attribute will now allow mixing manual link decorators for the same attribute, as it will be now handled as a token list. Closes #13985, Closes #6436. (commit) - mention: Mention should not be wrapped with an additional
<span>
when GHS is enabled. Closes #15329. (commit) - ui: Fixed an issue where the first selected color was applied instead of the second selected color when using the font color picker for the first time after loading the page. Closes #17069. (commit)
- typing: Removing a nested editable does not remove an entire widget when the selection is placed at the beginning of that element. (commit)
# Other changes
- clipboard: Export the
viewToPlainText()
function. Closes #17950. (commit) - collaboration-core: Introduced a new configuration option:
config.users.getInitialsCallback
. It allows providing a custom callback function for user initials generation. - emoji: Improved emoji support by expanding the range of versions compatible with users’ devices. Closes #18014. (commit)
- emoji: Icons representing categories in the grid come from the same Unicode version to avoid rendering the non-supported ones. (commit)
- emoji: Introduced the
emoji.useCustomFont
option to disable the filtering mechanism. Closes #18029. (commit) - engine: The whitespaces around a block filler (
) are ignored while loading editor data. (commit)
# CKEditor 5 44.2.1 release
We are happy to announce the release of CKEditor 5 v44.2.1.
During a recent internal audit, we identified a cross-site scripting (XSS) vulnerability in the CKEditor 5 real-time collaboration package (CVE-2025-25299
). This vulnerability can lead to unauthorized JavaScript code execution and affects user markers, which represent users’ positions within the document.
This vulnerability affects only installations with real-time collaborative editing enabled.
You can read more details in the relevant security advisory and contact us if you have more questions.
# Bug fixes
- comments: Fixed a few scenarios for which creating a new comment thread was impossible (for example, when a selection was made on multiple table cells). This was a regression introduced in v44.2.0.
# Other changes
- real-time-collaboration: Improved displaying usernames in the user marker.
Every day, we work hard to keep our documentation complete. Have you spotted outdated information? Is something missing? Please report it via our issue tracker.
With the release of version 42.0.0, we have rewritten much of our documentation to reflect the new import paths and features. We appreciate your feedback to help us ensure its accuracy and completeness.