Sign up (with export icon)

CKEditor 5 changelog

Contribute to this guide Show the table of contents

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 47.0.0 release

Copy link

We are happy to announce the release of CKEditor 5 v47.0.0.

Release highlights

Copy link

CKEditor AI (early access)

Copy link

We are introducing CKEditor AI, a set of versatile AI-powered features that integrate directly into CKEditor 5. It brings generation, summarization, correction, contextual chat help, reviews, and many other capabilities, right into the editor. With CKEditor AI, users will no longer need to switch between the editor and AI tools.

Three features are available in this early access phase:

  • Chat: a conversational AI for dynamic, multi-turn interactions that support various context sources, model selection, which can perform changes directly on the document.
  • Quick actions: one-click transformations and instant insights for selected text.
  • Review: automatic checks for grammar, tone, correctness, style, and more, with UX optimized for performing full-document review.

Each feature is powered by our state-of-the-art AI service, available in the Cloud today and coming soon for on-premises deployments. This makes CKEditor AI a true plug-and-play solution that works out of the box, eliminating the need for months of custom development.

CKEditor AI is available as part of our free trial in early access.

Long-term Support (⭐)

Copy link

We are introducing the CKEditor 5 LTS (Long-term Support) Edition, giving teams up to 3 years of stability with guaranteed updates.

The first LTS release is v47.0.0 (October 2025). It will receive 6 months of active development with new features and fixes, then 2.5 years of maintenance with security and critical compatibility updates.

For v47.x, the Maintenance phase starts in April 2026. From then, the next versions in the v47.x line will be available only under a commercial LTS Edition license. Therefore, starting in April, integrators without an LTS license should migrate to v48.x (the next regular release).

If you need long-term stability, contact sales or read more about CKEditor 5 LTS Edition.

Other improvements and fixes

Copy link

This release also brings several smaller but important enhancements and fixes:

  • Widgets: the default Tab/Shift+Tab navigation now works better inside nested editables, improving usability. This change is also reflected in the editor’s current widgets (like tables), leading to more intuitive keyboard navigation.
  • UI: dialogs in custom features can now be positioned programmatically with more flexible options (Dialog#show()).
  • Comments: confirmation views for deleting comments and threads now use simplified CSS selectors (.ck-confirm-view). You may need to adjust custom styles accordingly.

Please refer to the update guide to learn more about these changes.

MAJOR BREAKING CHANGES

Copy link
  • ai: Due to the release of the new AI feature, the ai.* configuration structure has changed. Until now, the configuration object was used for the former AIAssistant feature. Now, this configuration space is used for all AI related features. Configuration for the AIAssistant was moved. The changes are:
    • ai.aiAssistant -> ai.assistant,
    • ai.useTheme -> ai.assistant.useTheme,
    • ai.aws -> ai.assistant.adapter.aws,
    • ai.openAI -> ai.assistant.adapter.openAI.

MINOR BREAKING CHANGES

Copy link
  • table, widget: The Widget feature implements the default handling for Tab/Shift+Tab to navigate nested editable elements in the editor content. Closes #19083. The listeners are registered on the low priority bubbling event in the context of widgets and editable elements. Please verify if your custom Tab/Shift+Tab handling does not collide with the default one.
  • ai: The internal structure of the package has changed. Importing AIAssistant from the source should be done via @ckeditor/ckeditor5-ai/src/aiassistant/aiassistant.js path instead of the previous @ckeditor/ckeditor5-ai/src/aiassistant.js.
  • comments: Changed the CSS selectors used to style the confirmation view displayed when attempting to remove a comment or an entire comment thread. For now, CSS classes will be more generic, for example: .ck-confirm-view instead of .ck-thread__remove-confirm. If you override styles for these components, you will need to update the selectors.
  • undo: The UndoCommandRevertEvent type was renamed to UndoRedoBaseCommandRevertEvent and moved to the basecommand.ts file. Adjust your code if you have used this type in your custom integration. See #19168.
  • Updated to TypeScript 5.3.

Features

Copy link
  • ai: Introduced CKEditor AI, a brand-new set of versatile AI-powered features, including: chat, quick actions, and document review capabilities.
  • ui: The position parameter in Dialog#show() now can be a function that takes dialogRect and domRootRect parameters and should return an object with top and left properties or null. It can be used to specify a custom positioning for the dialog. Closes #19167.

Bug fixes

Copy link
  • engine: The markerToHighlight() converter did not clone the view configuration if passed as plain object leading to incorrect behavior. This affects only custom plugins that used this converter in the described way. Closes #19105.

  • engine: The bubbling events now trigger event callbacks according to the registered priorities even if multiple custom contexts are provided. See #19083.

  • export-inline-styles: Fix specificity calculation to handle :where() selectors correctly.

  • link: The link manual decorators are no longer lost when caption is added to an image. Closes #19024.

  • pagination: Pagination lines should calculate properly for pages with larger horizontal margins.

  • revision-history: Fixed a crash which happened under specific circumstances when a revision was created when document was exported using the Cloud Services REST API (GET /documents/ endpoint).

    Although the fix was necessary in Revision History feature code, it was only reproducible in scenarios involving using the mentioned export endpoint.

Other changes

Copy link
  • comments: Corrected types for the resolvedBy parameter in CommentThread#resolve. It was previously typed as undefined | null, and is now properly typed as undefined | string.
  • undo: RedoCommand will now fire 'revert' event when executed, similarly to UndoCommand. Type UndoCommandRevertEvent was renamed to UndoRedoBaseCommandRevertEvent and moved to basecommand.ts file. Closes #19168.

CKEditor 5 46.1.1 release

Copy link

We are happy to announce the release of CKEditor 5 v46.1.1.

Release highlights

Copy link

This is an internal release focused on improving our development infrastructure and the release process. These changes have no impact on integrators but represent significant improvements to our development workflow.

Development environment modernization

Copy link

We have migrated our package management from Yarn Classic to pnpm, delivering substantial benefits:

  • Faster installations through efficient linking mechanisms,
  • Improved dependency management with stricter resolution and better peer dependency handling,
  • Better disk efficiency by eliminating duplicate packages across projects.

We have also introduced dependency locking mechanisms that provide greater stability and predictability in our build process, ensuring consistent environments across development setups and CI/CD pipelines.

What this means for you

Copy link

As an integrator, you will not notice any changes in functionality or API. This release maintains full backward compatibility while laying the foundation for more efficient development cycles and faster future releases.

If you fork the repository and develop using source code, you will need to update your development setup according to our development environment guide.

CKEditor 5 46.1.0 release

Copy link

We are happy to announce the release of CKEditor 5 v46.1.0.

Release highlights

Copy link

Smoother drag & drop of widgets on iOS

Copy link

We updated the implementation for more reliable drag-and-drop on iOS touch devices. The behavior on the desktop devices remains unchanged.

Pagination improvements

Copy link

We reverted a low-level change to improve stability in pagination, especially in scenarios including long tables.

Hide a user in the Server-side editing API

Copy link

The Server-side editor API now supports a hidden_in_presence_list user flag. You can use this mechanism to prevent automation script users from appearing in the editor’s presence list while scripts run.

Comments’ markers clean up

Copy link

We provided a better handling of edge cases where a marker points to a non-existing comment thread (for example, due to integrator mistakes). Such markers are now removed automatically to keep the editor stable.

MINOR BREAKING CHANGES

Copy link
  • real-time-collaboration: CloudServicesCommentsAdapter#getCommentThread no longer throws an error when a comment thread does not exist. Instead, it now returns null.

Features

Copy link
  • real-time-collaboration: The user will not be displayed in the Presence List when a server-side editor API script is executed with the hidden_in_presence_list parameter.
  • table: The table caption feature now has a configuration option table.tableCaption.useCaptionElement that changes the HTML for table captions. With this option set to true the output HTML for table caption changes from figure.table > figcaption to figure.table > table > caption. Closes #18988.

Bug fixes

Copy link
  • clipboard, engine, widget: Improved drag & drop of widgets with selection handle on iOS devices. Closes #16335.
  • engine: Spaces at the end of list items are correctly preserved when saving and loading data. Closes #18960.
  • engine: Fixed an issue where the editor could crash if the selection was moved to a non-existent node during the blur event. Closes #18744.
  • merge-fields: Editor no longer incorrectly adds an empty paragraph (that does not exist in data) when loaded data contains a block merge field with a marker (such as comment) on it.
  • pagination: Adjusted theme for <caption> vs <figcaption> element in tables. See ckeditor/ckeditor5#18988.
  • paste-from-office: Ensure consistent formatting of content pasted from Google Docs by replacing tab characters with spaces in preformatted text blocks. Closes #18995.
  • revision-history: Fixed an error that prevented previewing a revision that included a removed block merge field.
  • uploadcare: Fixed an issue where the Uploadcare image uploader and editor did not work correctly with custom upload URLs or custom CDN canonical names.
  • watchdog: Fixed an issue where Watchdog incorrectly restored collaboration data (comment threads and suggestions) after a crash in load and save integrations. Closes #19033.
  • widget: Read-only mode no longer focuses the editor and displays UI when selecting nested editables. Closes #18965.

Other changes

Copy link
  • comments, real-time-collaboration: Comment markers linked to non-existing threads are now removed automatically (instead of throwing an error) in real-time collaboration, ensuring the editor remains fully functional.
  • track-changes: Error track-changes-user-not-found will now be thrown with additional data to help with debugging: authorId (the ID of the missing user) and suggestionId (the ID of the suggestion for which the error was thrown).