We are happy to announce the release of CKEditor 5 v43.0.0.
Release highlights
Merge fields
The new merge fields feature is a game-changer for creating document templates and other kinds of personalized or dynamic content. Thanks to this feature, you can insert placeholders into your content, indicating where actual values should go. These places are marked in the final content in a distinctive way, making it easy to later process the template and fill it with the actual values. The feature supports a preview mode too - you can define preview data sets, and see how the content will look like when real values are used directly in the editor. The plugin is highly customizable to fit various applications and scenarios. Finally, merge fields are fully integrated with our Export to Word, Export to PDF, and Import from Word features, both when they are used from the editor and via REST API.
We are extremely happy to share with you this highly demanded feature, and we cannot wait to listen to your feedback!
Make sure to visit our builder or documentation to learn more about the feature.
Export to Word V2 as the default version
The V2 version of the export to Word feature introduced significant improvements, optimizations, and fixes. This update enhances the overall performance, making the export process faster and more reliable, especially for large documents. Key improvements include better handling of table borders, automatic detection of Word styles from CSS, and support for more text-related CSS properties, ensuring your documents maintain their intended formatting.
Starting this version, the V2 configuration becomes the default in the ExportWord
plugin. Make sure to migrate your configuration if you are using it.
Improved sidebar accessibility and navigation
We have introduced multiple enhancements to make the sidebar more accessible. Among other improvements, you can now use the Shift+Ctrl+E keystroke to move focus from the editor marker to the active annotation. When your comment reply is ready, you can quickly submit it using the new Ctrl+Enter shortcut. Also, navigation from one annotation to another is now possible by using arrow keys.
The full lists of keyboard supported actions can be reviewed in our Accessibility support guide.
Important bug fixes and improvements
This release brings notable bug fixes and improvements to enhance your editing experience.
- Several improvements have been made to typing in the editor, especially for Android IME and Safari. On Android, issues like duplicated characters and reverse writing effects have been resolved. In Safari, the reverse typing effect after focus change has been fixed.
- A couple of UI improvements:
- We replaced the visual indication of the selected option in dropdowns (blue background) with the checkbox marks to better indicate selected options, aligning visual cues across the toolbar and menu bar.
- All editor types now support the menu bar.
- Additionally, the special characters UI has been moved from a dropdown to a dialog. This unifies the action between the menu bar and toolbar, and also gives content creators quicker access to the always-on-top dialog.
- We have improved the drawing of page break line algorithm to address the pagination feature issues. We also improved the performance of the plugin.
React and Vue integrations updates
We have released new major versions of the React and Vue integrations. In both of them, we have migrated to JavaScript modules (ESM) and rewritten large parts of the codebases to support the latest versions of these frameworks and to follow the latest recommendations for writing the components.
We strongly recommend that you follow the release highlights to update to the latest versions:
MAJOR BREAKING CHANGES ℹ️
- ckeditor5: Global name for the
ckeditor5
package in the UMD builds has been changed toCKEDITOR
. - ckeditor5-premium-features: Global name for the
ckeditor5-premium-features
package in the UMD builds has been changed toCKEDITOR_PREMIUM_FEATURES
. - export-word: Export to Word V1 configuration format is deprecated, V2 is set as default. The
exportWord.converterOptions
configuration should be adjusted to new API. See the migration guide. - export-word: The
auto_pagination
configuration option inexportWord.converterOptions
is set tofalse
by default.
MINOR BREAKING CHANGES ℹ️
- ckbox: The
CKBoxUtils#getWorkspaceId()
andCKBoxUtils#getToken()
methods now return a promise instead of a resolved value. - comments:
AnnotationView#focus()
will focus the first view in thecontent
collection instead of the view DOM element. - comments:
Sidebar#addAnnotation()
will expect the annotation view to meet theFocusableView
interface (previously any UIView
). - engine:
Schema
callbacks added throughaddChildCheck()
will no longer add event listeners withhigh
priority and will no longer stopcheckChild
event. Instead, these callbacks are now handled onnormal
priority, as a part of the defaultcheckChild()
call. This also means that listeners added tocheckChild
event onhigh
priority will fire before any callbacks added bycheckChild()
. Earlier they would fire in registration order. This may impact you if you implemented custom schema callback using bothaddChildCheck()
and direct listener tocheckChild
event. All above is also true foraddAttributeCheck()
andcheckAttribute
event and callbacks. - html-embed: HTML Embed plugin configuration value
sanitizeHtml
was moved from thehtmlEmbed
space to top-level configuration space.config.htmlEmbed.sanitizeHtml
is now deprecated. It will still be used if it set, however we recommend updating the configuration as this property may be removed in upcoming releases. - real-time-collaboration: The size of avatars in the user presence list has been changed, which may affect integrations that depend on their dimensions. In addition, a focus border has been added to these avatars, which extends beyond the editor container. Please refer to the styling guide to learn how to change the look of the list.
- real-time-collaboration: The collaboration user presence list dropdown now has a conditional
overflow: scroll
style (previously the style was permanent). - special-characters: Special characters plugin now uses a dialog (instead of a toolbar dropdown).
- theme-lark: The
--ck-list-button-padding
custom property has been removed from the codebase. - track-changes: A substantial part of the
SuggestionThreadView
template was moved to a new viewSuggestionView
. It may affect you if you provided customization for suggestions annotations through an extendedSuggestionThreadView
orBaseSuggestionThreadView
class. Please review updated API documentation forSuggestionThreadView#getTemplate()
andSuggestionView#getTemplate()
. You can extendSuggestionView
the same way asSuggestionThreadView
andBaseSuggestionThreadView
, and provide the extended class through the newly added configuration propertyTrackChangesConfig#SuggestionView
. - ui: We changed styles for "active" items inside menu bar and dropdowns lists. Previously, an active (chosen, enabled, opened, etc.) item was highlighted with a blue background. Now, the active element has a checkmark icon on the left.
Features
- ckbox: The image upload and edit buttons are now disabled if the user has no permission to upload an asset. (commit)
- ckbox: Added more configuration options passed down to the CKBox. Closes #3695. (commit)
- collaboration-core: Introduced the
AriaDescriptionView
class that bringsaria-describedby
functionality to any view. - collaboration-core: Introduced the
LateFocusButtonView
andLateFocusDropdownButtonView
classes that are specific buttons, for whichfocus
event is fired aftermouseup
instead ofmousedown
. This delays all focus-related actions until the button action is performed. - comments: Introduced keyboard navigation and screen reader support to the annotations sidebar.
- editor-balloon: Added support for the menu bar. Closes #16571. (commit)
- editor-inline: Added support for the menu bar. Closes #16571. (commit)
- engine:
Schema#addChildCheck()
andSchema#addAttributeCheck()
can now register a callback for a specific item or attribute, which should improve performance when using custom callback checks. Callback checks should be added only for specific item or attribute if possible. See the API reference. Closes #15834. (commit) - export-word: Added
config.exportWord.converterOptions.language
configuration property to set the language of the exported Word document. The editor's content language will be used by default. - heading: Simplify TypeScript types of the
Heading
plugin configuration. (commit) - image: The image upload and edit buttons are disabled if the user has no permission to upload any asset. (commit)
- import-word: The comments and suggestions imported from Word documents will preserve the original dates respecting the local timezone.
- List: The list styles can be enabled for selected list types. Closes #15554. (commit)
- merge-fields: Introduced the merge fields feature.
- real-time-collaboration: Made the real-time collaboration user presence list accessible to screen reader users.
- special-characters: Added menu bar integration for special characters. New component
menuBar:specialCharacters
is now by default added in "Insert" menu. Closes #16501. (commit) - track-changes: Introduced keyboard navigation and screen reader support to the annotations sidebar.
- ui: Introduced keystroke handler options in
FocusCycler#constructor()
to allow for fine-tuning of the class behavior. (commit) - ui: Implemented a new
FocusCycler#chain()
method to connect multiple focus cyclers and provide seamless keyboard navigation across complex user interfaces. (commit) - ui: Redesigned "active state" style for menu bar dropdown items. Closes #16572. (commit)
- utils: Introduced events filtering in
KeystrokeHandler#set()
to allow for fine-tuning of the helper's behavior. (commit)
Bug fixes
- ai: Opening AI Assistant with a selection containing an empty line will no longer cause a crash.
- ai: AI Assistant will now correctly handle selected content containing empty lines.
- ckbox: Use a safer way to convert numbers to strings to avoid issues with some bundlers. Closes #16040. (commit)
- comments: The user had to click the annotation button twice to execute an action as the first click focused the annotation and caused it to move away, which prevented the click.
- engine:
Schema#checkChild()
will now correctly check custom callback checks for each item in the context. (commit) - engine:
insertcontent-invalid-insertion-position
exception is no longer thrown after pasting content containingblock element
+non-paragraph
+block element
elements. Closes #16321. (commit) - engine: Predictive text should not get doubled while typing. Closes #16106. (commit)
- engine: The reverse typing effect should not happen after the focus change. Closes #14702.Thanks, @urbanspr1nter!. (commit)
- engine: Typing on Android should avoid modifying DOM while composing. Closes #13994, #14707, #13850, #13693, #14567. Closes: #11569. (commit)
- engine: Formatting should not get lost on a text with a marker in a table cell during upcast. (commit)
- export-word: The author name of suggestions from an imported Word document will be correctly persisted after exporting and importing this document again.
- find-and-replace: Allow to pass
searchTerm
when usingfindCallback
infind
command. (commit) - link: Creating a link in sentences containing an empty line will no longer cause a crash. Closes #16660. (commit)
- list: Text nodes directly inside
<ul>
or<ol>
should not be removed while loading editor data. Closes #16450. (commit) - mention: Escape mentions markers when building regular expression to prevent crashes when markers like '' are used. Closes #16818. (commit)
- pagination: No longer generate an extra empty page after placing a page break after an element with a margin.
- pagination: Should not apply additional styles on
pageBreak
element. - pagination: The pagination feature no longer skips pages when handling large tables. Closes #14426.
- pagination: The pagination renders pages differently depending on user selection.
- real-time-collaboration: The deleted comment thread will no longer be brought back after restoring a revision in which it existed.
- table: Horizontal split button no longer splits larger table cell spans into more than two parts. Closes #14658. (commit)
- theme-lark: Addressed a regression in the height of buttons displayed inside lists (such as buttons in annotation menus). (commit)
- track-changes: The user had to click the annotation button twice to execute an action as the first click focused the annotation and caused it to move away, which prevented the click.
- track-changes: Fixed editor crash when accepting or discarding a replace suggestion with multiple parts including adding or merging a block element (paragraph, etc.).
- typing: Predictive text should not get doubled while typing. Closes #16106. (commit)
- typing: Typing on Android should avoid modifying DOM while composing. Closes #13994, #14707, #13850, #13693, #14567. Closes: #11569. (commit)
- ui: Hide the pinned balloon panel view when the pin target is no longer visible. Closes #16739. (commit)
- ui: Block toolbar button no longer remains fixed in the same position while scrolling the editable content. Closes #5460. (commit)
- ui: The user should be able to move the focus back to where it came from upon
Esc
key press while navigating the menu bar. Closes #16683. (commit) - ui: Add
/* #__PURE__ */
comments before mixin calls to properly tree-shake unused classes. Closes #16651. (commit) - ui: Improve accessibility of toggleable menu bar items by marking them as
menucheckbox
aria roles. (commit) - ui: Fixed element tag name from
<label>
to<span>
in the color picker component to improve the accessibility. (commit) - ui: Changed the place of restricted editing buttons in the menu bar to correct ones. Closes #16609. (commit)
- UI: The aria-live views will no longer violate the a11y aXe rule:
landmarks should be unique
. Closes #16544. (commit)
Other changes
- autoformat: The
blockAutoformatEditing
and theinlineAutoformatEditing
are now exported from the package index. Closes #16815. (commit) - ckbox: The plugin no longer slows down the editor startup because it fetches the token in the background instead of during the editor’s initialization. Closes #16760. (commit)
- ckeditor5: Global name for the
ckeditor5
package in the UMD builds have been changed toCKEDITOR
. Closes #16798. (commit) - ckeditor5-premium-features: Global name for the
ckeditor5-premium-features
package in the UMD builds have been changed toCKEDITOR_PREMIUM_FEATURES
. - engine: Introduced
Schema#trimLast()
. (commit) - engine: The
Model#insertContent()
method should keep inline objects in the same auto paragraph as text nodes and other inline objects. See #16321. (commit) - engine: The
Schema#checkMerge()
method should returnfalse
if one of the elements is a limit element. See #16321. (commit) - export-word: Set export word v2 as default.
- html-embed: HTML Embed plugin configuration value
sanitizeHtml
was moved from thehtmlEmbed
space to top-level configuration space.config.htmlEmbed.sanitizeHtml
is now deprecated. - page-break: No longer generate an extra empty page after placing a page break after an element with a margin. (commit)
- pagination: Enhance the performance of rendering large documents when the pagination plugin is enabled.
- special-characters: Special characters plugin now uses a dialog (instead of a toolbar dropdown). (commit)
- track-changes: Part of the
SuggestionThreadView
template was moved to a new viewSuggestionView
. - track-changes: Configuration property
SuggestionView
was added to enable theSuggestionView
class customization. - track-changes: Made the track changes icon more in line with other icons in the icon set.
- ui: Added the
LabelWithHighlightView
andButtonLabelWithHighlightView
components to the UI library. (commit) - ui: Added the
filterGroupAndItemNames()
helper to the UI library. (commit) - ui: The
SearchTextView#reset()
method will also reset the scroll of itsfilteredView
to the top. (commit) - Updated translations. (commit, commit, commit, commit)
Released packages
Check out the Versioning policy guide for more information.
New packages:
Major releases (contain major breaking changes):
Minor releases (contain minor breaking changes):
Other releases:
Released packages (summary)