Skip to content

Latest commit

 

History

History
4002 lines (3348 loc) · 507 KB

CHANGELOG.md

File metadata and controls

4002 lines (3348 loc) · 507 KB

Changelog

36.0.1 (2023-02-06)

Release highlights

This is a patch release that resolves two recent issues:

  • The broken release to npm of the @ckeditor/ckeditor5-highlight package. We mistakenly published TypeScript source next to JavaScript files and that breaks some setups, making it harder to integrate the v36.0.0 of CKEditor 5 in your systems. See #13373 for more details.
  • The performance regression in drag&drop of images on the newest version of Firefox (109.0.1). This is an issue caused by a change in Firefox itself and while Firefox’s team plans to revert it, we want to ship the workaround as soon as possible to you. See #13366 for more details.

Bug fixes

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Other releases:

36.0.0 (2023-01-23)

Release highlights

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

  • Faster editor load time thanks to delayed dropdown initialization.
  • Improved performance when the editor includes the table column resize plugin.
  • Improved inline annotations positioning.
  • Configurable special characters categories order.
  • Vite integration.

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

MAJOR BREAKING CHANGES ℹ️

  • core: The EditorUI class was moved from @ckeditor/ckeditor5-core to @ckeditor/ckeditor5-ui.

MINOR BREAKING CHANGES ℹ️

  • The addToolbarToDropdown() and addListToDropdown() helpers create content panels on the first dropdown open. Make sure that you access the dropdown panel after the dropdown is open. See #12890.
  • Toolbar views are filled with items on the first appearance. Make sure that you access toolbar items after the toolbar is visible. See #12890.
  • Contextual balloon panels are created on the first appearance. See #12890.

Features

Bug fixes

  • engine: Markers that are next to an auto-paragraphed text nodes will be moved to the new paragraph together with the text. (commit)
  • engine: Fixed focus handling issue which happened on Chrome after a nested editable was clicked. (commit)
  • engine: Fixed markers that were not properly set on list items and on elements in table cells, resulting in losing comments and suggestions after re-loading the document. Closes #13285. (commit)
  • find-and-replace: Disabled the find and replace popup in source mode. Closes #12939. (commit)
  • import-word: Enabled the .dotx extension in the file dialog.
  • list: The default list marker for an unordered list should be disc (instead of circle). Closes: #13206. (commit)
  • list: Fixed markers that were not properly set on list items and on elements in table cells, resulting in losing comments and suggestions after re-loading the document. Closes #13285. (commit)
  • paste-from-office: Fixed pasting images from MS Word 2016. Closes #11993. (commit)
  • table: Table and table cell property commands should not be called before changing any value to avoid creating unnecessary suggestions in the track changes mode. Closes #13262. (commit)
  • table: The editor should not crash on getData() call if the PlainTableOutput plugin is used with the TableColumnResize feature. Closes #13164. (commit)
  • table: Fixed markers that were not properly set on list items and on elements in table cells, resulting in losing comments and suggestions after re-loading the document. Closes #13285. (commit)
  • track-changes: Indent and outdent suggestions made on block images in document lists are now working correctly when accepted.
  • track-changes: Suggestions are now correctly highlighted after typing inside own the deletion suggestion.

Other changes

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Releases containing new features:

Other releases:

35.4.0 (2022-12-07)

Release highlights

We are happy to announce the release of CKEditor 5 v35.4.0.

  • Allow list indexing to start from 0.
  • Added track changes integration for lists, document list properties, and table resize features.
  • Introduced the trackChanges.trackFormatChanges configuration property which can be used to disable tracking of format changes.
  • Added an option for dynamic filenames in the editor’s configuration for PDF/Word export.
  • More editor packages migrated to TypeScript.

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v35.4.0-with-track-changes-expansions--and-better-control-over-the-pdf-and-word-converters/

MINOR BREAKING CHANGES ℹ️

  • engine: HtmlDataProcessor skips HTML comments by default. Set its skipComments property to false to retain comments (or use the HtmlComment plugin).

Features

  • image: Upcast the <img> element with the display:block style as a block image. Closes #12811. (commit)
  • lists: Allow list indexing to start from 0. Closes #12827. (commit)
  • track-changes: Added track changes integration for lists, document list properties, and table resize features.
  • track-changes: Introduced the trackChanges.trackFormatChanges configuration property which can be used to disable tracking of format changes.

Bug fixes

  • clipboard: Replace a tab with four spaces when pasting data from clipboard. Closes #12806. (commit)
  • comments: It is no longer necessary to make two mouse clicks to move the selection if the annotation in a wide sidebar was focused before.
  • comments: Long user names will no longer break annotations styling in inline and narrow sidebar display modes.
  • comments: Comment view should not lose focus or hide after clicking the cancel icon in the deletion confirmation box.
  • comments: Removing a comment thread imported from a Word file with at least one reply, no longer results in an error where only the first comment was removed instead of the whole thread.
  • engine: Fixed a bug which in some scenarios caused rendering with an outdated selection state when the editor was focused (on Chromium browsers). Closes #12967. (commit)
  • engine: The Model#insertObject() method should not crash when attempting to set a selection after inserting an inline element. Closes #12809. (commit)
  • html-support: Markers should not be lost while upcasting a plain table (without the <figure> element). (commit)
  • html-support: Basic styles formatting now works well with the remove format feature. Closes #12626. (commit)
  • real-time-collaboration: In some scenarios the document content was not updated by remote changes until the editor was focused.
  • special-characters: The special character label in dropdown should be updated when navigating with keyboard. Closes #12393. (commit)
  • special-characters: Special characters form a header should use a heading markup. Closes #12464. (commit)
  • table: The table width and height attributes should be upcasted from the <figure> element if it exists. Closes #12812. (commit)
  • Table: Improved the label positioning in RTL editor mode in the insert table dropdown. Closes #12833. (commit)
  • track-changes: Fixed editor crash when the TrackChangesData plugin was used with some editor configurations including real-time collaboration plugins.
  • track-changes: Fixed editor crash when the TrackChangesData plugin was used with pagination plugin.
  • track-changes: Fixed various incorrect scenarios related to the document list integration with track changes.
  • track-changes: Use all ranges in the markMultiRangeFormatBlock suggestion accept.
  • track-changes: Fixed the editor crash when the document list properties config is overwritten.
  • ui: The keyboard navigation in grid dropdowns should not be reversed in RTL editor. Closes #12871. (commit)
  • ui: The split button divider should stretch to the edges of the button. Closes #10936. (commit)
  • widget: Screen readers should now read the keyboard shortcuts to type around a widget. Closes #11936. (commit)

Other changes

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Releases containing new features:

Other releases:

35.3.2 (2022-11-18)

Bug fixes

  • engine: Improved support for dictation (via VoiceControl) on iOS and multi-line text replacements on macOS. Closes #2045, #11443. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Other releases:

35.3.1 (2022-11-11)

Release highlights

Due to a vulnerability issue in the socket.io-parser package (CVE-2022-2421) used by packages to offer real-time collaboration services, we strongly advise updating to the latest CKEditor 5 version if your integration includes one of the following features:

Bug fixes

  • import-word: The Import from Word feature should accept a function specified in the configuration as importWord.tokenUrl.

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Other releases:

35.3.0 (2022-11-02)

Release highlights

We are happy to announce the release of CKEditor 5 v35.3.0.

This release introduces the following new features:

There were also bug fixes:

  • External comments are no longer assigned to the user who imported them. Im means these are not editable by them and do not behave like they were created by that user (e.g. they do not join with other suggestions created by them).
  • Tooltips handling has been improved to better follow user interface events.
  • Fixed incorrect annotations order in the sidebar when a comment or a suggestion was set on a multi-line text (and in similar cases).

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v35.3.0-with-a-revamped-typing-and-ime-handling-better-external-annotations-handling/

MINOR BREAKING CHANGES ℹ️

  • clipboard: The DataTransfer class has been moved to the @ckeditor/ckeditor5-engine package.
  • track-changes: The SuggestionDescriptionFactory#getItemLabel() method now takes element object instead of an element name.
  • track-changes: The SuggestionDescriptionFactory#registerElementLabel() method now requires a second parameter to be a function (before, strings were also accepted). This may affect you if you provide custom plugins and use the track changes feature.
  • The input command is now deprecated, you should use the insertText command instead. See #11438.

Features

  • engine: Typing and text composition (IME) support has been refactored to use beforeInput DOM events instead of DOM mutations and keystrokes. Closes #11438. (commit)
  • enter: Typing and text composition (IME) support has been refactored to use beforeInput DOM events instead of DOM mutations and keystrokes. Closes #11438. (commit)
  • track-changes: Added track changes integration for document lists feature.
  • track-changes: Added track changes integration for table caption feature.
  • typing: Typing and text composition (IME) support has been refactored to use beforeInput DOM events instead of DOM mutations and keystrokes. Closes #11438. (commit)

Bug fixes

  • comments: Fixed incorrect annotations order in the sidebar when a comment or a suggestion was set on a multi-line text (and in similar cases).
  • comments: External comments (e.g., imported from a Word file) should not be editable by the user who imported them.
  • engine: The ModifySelection class with word unit should not stop at the attribute boundary. Closes #12673, #12657. (commit)
  • engine: Fixed conversion of the non-collapsed selection anchored between the <br> elements (in Safari). (commit)
  • table: The selection should not change when a table caption is turned off. (commit)
  • theme-lark: The SwitchButtonView's text and background color should stay the same regardless of the state because the toggle switch carries all the necessary information. Closes #12519. (commit)
  • track-changes: Fixed incorrect annotations order in the sidebar when a comment or a suggestion was set on a multi-line text (and in similar cases).
  • track-changes: External suggestions (e.g., imported from a Word file) should not behave like suggestions created by the user who imported them (e.g., should not join with other suggestions created by the user, etc.).
  • ui: A tooltip should also hide when the element it is attached to hides. Closes #12492. (commit)
  • ui: Improvements to the IconView component now allow rich colorful icons. Closes #12597, #12599. (commit)
  • ui: Preserved presentational attributes from the icon source on the <svg> element (#12597). (commit)
  • ui: It is possible to opt out from the icon color inheritance (#12599). (commit)
  • ui: Excluded icon internals from the CSS reset (#12599). (commit)
  • ui: UI tooltips should continue showing up until the last editor gets destroyed. Closes #12602. (commit)

Other changes

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

35.2.1 (2022-10-10)

This is a hotfix release which addresses problems discovered after publishing code for our previous main release. Please make sure to check the changelog for version 35.2.0 below as well.

Bug fixes

  • track-changes: Suggestions imported from Word file were not saved in the database.

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v35.2.0-with-the-import-from-word-plugin-new-toolbar-functionality-and-annotations-performance-improvement/

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Other releases:

35.2.0 (2022-10-04)

Release highlights

We are happy to announce the release of CKEditor 5 v35.2.0.

This release introduces the following new features:

There were also bug fixes:

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v35.2.0-with-the-import-from-word-plugin-new-toolbar-functionality-and-annotations-performance-improvement/

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

MINOR BREAKING CHANGES ℹ️

  • basic-styles: The bold icon has been moved to the @ckeditor/ckeditor5-core package.
  • comments: Introduced external comments and suggestions which require special handling when saving them in the database. This will concern you, if you use non real-time collaboration and the import from Word feature. Read more about it in the migration guide.
  • comments: The templates for CommentView and SuggestionThreadView have changed. This may concern you, if you use custom annotation views or templates and the import from Word feature.
  • paragraph: The paragraph icon has been moved to the @ckeditor/ckeditor5-core package.
  • widget: Renamed WidgetResizer#visibleResizer to selectedResizer. Resizer#isEnabled no longer directly changes resizer visibility. Instead, Resizer#isVisible was introduced. Resizer#isVisible value depends on Resizer#isEnabled and (new) Resizer#isSelected. This may concern you if you implemented a custom widget that can be resized.
  • comments: Comment input editor is now initialized on demand instead of being created in the CommentInputView constructor and initialized on render. CommentInputView#editor is now null right after the instance is created. This may concern you, if you use custom comment views.
  • comments: Annotations with targets set to markers or DOM elements inside the editor editable must now be registered in EditorAnnotations#registerAnnotation() after they are created. This will concern you, if you have a custom feature that creates Annotation instances inside the editor. This does not affect the comments outside the editor feature.

Features

  • comments: Introduced integration for the import from Word feature to handle comments and suggestion included in the imported Word file.
  • comments: Introduced support for comments and suggestions that come from an external source (e.g. an imported document). Annotations for these items will be labelled to differentiate them from regular comments and suggestions. To mark an annotation as external, set the @external attribute when creating a comment or a suggestion.
  • html-support: The General HTML Support (GHS) feature can exclude elements from the allowed list of elements. (commit)
  • import-word: Added a new package (@ckeditor/ckeditor5-import-word), that allows importing Word documents into CKEditor 5.
  • track-changes: Introduced integration for the import from Word feature to handle comments and suggestions included in the imported Word file.
  • track-changes: Introduced support for comments and suggestions that come from an external source (e.g. an imported document). Annotations for these items will be labelled to differentiate them from regular comments and suggestions. To mark an annotation as external, set the @external attribute when creating a comment or a suggestion.
  • ui: Allowed grouping toolbar items into drop-downs by using a declarative config. Closes #12490. (commit)

Bug fixes

  • comments: It is now possible to switch between annotations when multiple inline annotations are displayed in the contextual balloon.
  • engine: Fixed editor throwing the Maximum call stack size exceeded error when huge number of nodes were inserted at once into an element. Closes #12428. (commit)
  • html-support: Redefined most GHS-elements as not blocks in the schema. Closes #12430. (commit)
  • image: The image insertion pane should not be empty if opened with the arrow down keystroke. Closes #12215. (commit)
  • image: Alternative text button now indicates whether any value is applied. Closes #12268. (commit)
  • link: Fixed incorrect behavior when text before the auto-linked url was removed by pressing backspace. Previously, the removed text was reinserted on backspace press. Closes #12447. (commit)
  • link: Corrected autolinking URLs without a protocol given. Closes #11040. (commit)
  • list: Improved styles for indented lists. Closes #12179. (commit)
  • list: To-do list items should not interrupt the Tab key navigation across the editor content. Closes #6535. (commit)
  • list: List properties changes made on a list inside a container element (e.g. block quote) are now correctly propagated also to a list directly after that container. Closes #11082. (commit)
  • media-embed: The focus will move to the editor after inserting a media. Closes #12186. (commit)
  • pagination: Pagination should work correctly for blocks with inline elements and soft breaks.
  • paste-from-office: Extra line breaks should not be generated while pasting from Google Docs. Closes #10217. (commit)
  • table: Table cell widths will be preserved after pasting into the editor with table column resize feature and without table cell properties one. Closes #12426. (commit)
  • table: Added keyboard (spacebar) support for the table insertion dropdown. Closes #12344. (commit)
  • table: Made color pickers in table and table cell properties forms accessible for keyboard users. Closes #12193. (commit)
  • track-changes: Fixed editor crashing or disconnecting from real-time collaboration session when the initial content contained big number of suggestions.
  • track-changes: The word count plugin callback will no longer be called when track changes data plugin is used.
  • track-changes: Styles dropdown integration will correctly create suggestions for block quotes and other elements containing block elements.
  • ui: DropdownView should close when it gets blurred. Also, DropdownView should focus its #buttonView only when it gets closed and the focus is inside its panelView. Closes #12178, #12005. (commit)
  • ui: The block toolbar should close upon clicking its button. Closes #12184. (commit)
  • widget: The image resizer handle should not be visible when the resizer is not enabled (e.g. in comments-only mode). Closes #11891. (commit)

Other changes

  • comments: Introduced substantial performance improvements in scenarios with big number (hundreds) of comments and suggestions. Improved editor initialization time and editor responsiveness.
  • comments: Introduced EditorAnnotations#registerAnnotation().
  • comments: Introduced the optional @external attribute for comments and suggestions. @external is an object that contains fields with author name (authorName) and date (createdAt). The attribute is read-only and can be set only when a comment or suggestion is created.
  • engine: Model#insertContent() will now insert markers added to DocumentFragment#markers. Closes #12467. (commit)
  • engine: Reimplemented Position#isTouching() in order to achieve better editor performance. (commit)
  • special-characters: Added missing arrow characters (, , , ) into the selection table. Closes #6167. (commit)
  • style: Improved keyboard navigation in the style feature drop-down. Closes #12250. (commit)
  • track-changes: Introduced substantial performance improvements in scenarios with big number (hundreds) of comments and suggestions. Improved editor initialization time and editor responsiveness.
  • track-changes: Introduced optional @external attribute for comments and suggestions. @external is an object that contains fields with author name (authorName) and date (createdAt). The attribute is read-only and can be set only when a comment or suggestion is created.
  • utils: Dropped using lodash isElement() in Rect class in order to achieve better editor performance. (commit)
  • Updated translations. (commit, commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

New packages:

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

35.1.0 (2022-08-29)

Release highlights

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

This release introduces the following new features:

  • Accessibility improvements.
  • Changes in the editor theme improve the UI.
  • The column resize feature has been improved.
  • Migration to TypeScript takes another step.

There were also bug fixes:

  • Fixed revision history crashes during various actions when the revision data contained <br> at the end of a block element (like <p>).
  • Fixed the focus after inserting an image - it is now moved to editable.

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v35.1.0-with-an-updated-interface-table-improvements-and-more-typescript/

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

MINOR BREAKING CHANGES ℹ️

  • ui: The enableToolbarKeyboardFocus() helper has been removed. Please use the EditorUI#addToolbar() method instead to enable accessible toolbar navigation (and focusing) using the Alt+F10 and Esc keystrokes (see #10368).
  • ui: The TooltipView UI component has been removed. Please use the new tooltip API instead. Please note, that this change does not affect the integrations that configure tooltips using the ButtonView#tooltip property.
  • ui: The static properties of BalloonPanelView have been renamed. The BalloonPanelView.arrowVerticalOffset static property is now arrowHeightOffset and BalloonPanelView.arrowHorizontalOffset is now arrowSideOffset.

Features

  • core: Enabled toolbar focusing and navigation across various editor implementations and features. Closes #10368, #5146, #9906, #10025. (commit)
  • table: Added keyboard support for the table insertion dropdown. Closes #3176. (commit)
  • ui: Implemented a TooltipManager class to manage the UI tooltips across components and features. Closes #12067. (commit)
  • ui: Introduced the addKeyboardHandlingForGrid() helper to handle grid keyboard navigation. Closes #11851. (commit)

Bug fixes

  • font: Removed an unnecessary tooltip for the "Remove color" button. Closes #12277. (commit)
  • font: Fixed focus order for color grid in the font color and background drop-downs. Closes #11841. (commit)
  • highlight: Restored the correct functionality of the "Remove highlight" toolbar button. Closes #12265. (commit)
  • image: Fixed the focus after inserting an image - it is now moved to editable. Closes #12229. (commit)
  • image: Toggling an image or a table caption should focus the editing root. Closes #12165. (commit)
  • list: Unified focus handling and keyboard navigation in the list properties drop-downs. Closes #11041. (commit)
  • revision-history: Fixed revision history crashes during various actions when the revision data contained <br> at the end of a block element (like <p>).
  • special-characters: Added keyboard support to the special characters dropdown. Closes #9037. (commit)
  • theme-lark: Changed the color of the pressed button text or an icon to improve contrast. Improved the border contrast of inputs and editing roots. Improved the look of the focused state of switch buttons. Closes #1405, #11842. (commit)
  • table: Resizing a table with column count changed by another user no longer breaks the real-time collaboration. Closes #12325. (commit)
  • ui: Added a semantic attribute for marking the dropdown button as expanded. Closes #12258. (commit)

Other changes

  • engine: Rewriten the ckeditor5-engine package to TypeScript. Closes #11724. (commit)
  • utils: Introduced a new way to apply mixins. Instead of using the mix() util, classes should extend the base created by EmitterMixin(), ObservableMixin() and DomEmitterMixin() or extend Emitter or Observable directly. Closes #12077. (commit)
  • utils: Added support for typed events in EmitterMixin. Closes #12076. (commit)
  • Updated translations. (commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Major releases (contain major breaking changes):

Releases containing new features:

Other releases:

35.0.1 (2022-08-03)

Due to network issues, while publishing the CKEditor 5 packages, we deployed an empty @ckeditor/ckeditor5-utils package. To fix the problem, we decided to publish a new release marked 35.0.1.

Please read the changelog entries for the 35.0.0 version to learn about the latest CKEditor 5 release.

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Other releases:

35.0.0 (2022-07-29)

Security fix

We are happy to announce the release of CKEditor 5 v35.0.0 that contains a security fix for the Markdown GFM, HTML support and HTML embed packages. Even though this issue affects only a narrow group of integrators, an upgrade is highly recommended! You can read more details in the relevant security advisory and contact us if you have more questions.

Release highlights

This release introduces the following new features:

  • Various accessibility improvements.
  • The styles dropdown feature is now integrated with track changes.
  • The @ckeditor/ckeditor5-utils package is now written in TypeScript.
  • We have updated and corrected translations. 39 languages are now fully covered by professional translators.

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v35.0.0-with-collaboration-and-typescript-migration/

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

MAJOR BREAKING CHANGES ℹ️

  • The source element is not updated automatically after the editor destroy.

MINOR BREAKING CHANGES ℹ️

  • engine: The DomConverter#viewToDom() and DomConverter#viewChildrenToDom() parameter lists have changed (the 2nd parameter – the DOM document instance is no longer accepted).
  • image: The ImageInsertPanelView#dropdownView property is no longer accessible. Use editor.plugins.get( 'ImageInsertUI' ).dropdownView instead to access the image insert dropdown instance. See #11654.
  • ui: Before, preventDefault() was called on the mousedown event to prevent the ButtonView class from "stealing" the focus from the editing root. Starting this release, to improve the accessibility of the editor, all instances of the ButtonView class (and its child classes) will automatically focus in DOM when clicked. It is recommended for features using buttons to manage the content to call editor.editing.view.focus() after the button was executed in order to bring the DOM focus back to the editing root to allow users type right away.

Features

  • core: Introduced the updateSourceElementOnDestroy configuration option. (commit)
  • media-embed: Support timestamp in embedded youtube videos. Closes #12006. (commit) Thanks to @Recursing!
  • real-time-collaboration: Enabled resuming an unsaved revision for integrations using Cloud Services editor bundle.
  • track-changes: Added track changes integration for the styles dropdown feature.

Bug fixes

  • ckbox: Replaced the CloudServicesCore requirement in favor of the CloudServices plugin for CKBox. Closes #12040. (commit)
  • editor-balloon: The editing area of the editor should have a clear accessible label. Closes #11836. (commit)
  • engine: The editor should not crash while making a selection after having a collapsed selection with styles applied. Closes #12026. (commit)
  • image: Allowed setting an accessible label in the toWidgetEditable() helper. Added missing labels for assistive technologies to image captions. Closes #11837. (commit)
  • link: Link manual decorators should be properly down-casted on the document selection. Closes #12046. (commit)
  • revision-history: Fixed a bug where custom plugins were filtered out from revision history preview if they required the track changes plugin.
  • table: Added a proper label for color buttons in the table properties panel so that it is available for screen readers. Closes #11895. (commit)
  • track-changes: A suggestion will be discarded from document data if the TrackChangesAdapter#addSuggestion() method has errored.
  • ui: The default value of the aria-pressed DOM attribute of a toggleable button should be false instead of undefined. Closes #11115. (commit)
  • ui: Opening a dropdown should focus the first item (or the first active item) for easier navigation and accessibility. Closes #11838, #2000, #11568, #3215, #5859. (commit)

Other changes

  • engine: The DomConverter should use a separate DOM document instance in the data pipeline. (commit)
  • image: Introducing the ImageInsertViaUrl plugin enabling insertion of images via URL without the requirement of the UploadPlugin. Closes #11654. (commit)
  • style: StyleCommand#execute() now expects to be passed an object with properties styleName and optional forceValue instead of a single string. (commit)
  • utils: The utils package is now written in TypeScript. (commit)
  • Updated 38 translations to 100%. (commit, commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

34.2.0 (2022-06-27)

Release highlights

We are happy to announce the release of CKEditor 5 v34.2.0.

This release introduces the following new features:

  • A unsaved revision will now be resumed when the editor is re-initialized (instead of creating a new revision). Note, that currently, this feature does not work for real-time editing integrations that use an editor bundle uploaded to Cloud Services.
  • Integrated the track changes feature with the code block and HTML embed features.
  • Integrated CKEditor 5 with the CKBox service.

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v34.2.0-with-ckbox-resuming-unsaved-revisions-and-a-new-installation-walkthrough/

Features

  • ckbox: Added a new package (@ckeditor/ckeditor5-ckbox), which integrates the CKBox service with CKEditor 5. (commit)
  • comments: Introduced the annotations property for the WideSidebar, NarrowSidebar and InlineAnnotations plugins. The property is an AnnotationsCollection instance which keeps all annotations added to the given UI.
  • html-support: Custom elements should be preserved by the General HTML Support feature. Closes #11432. (commit)
  • real-time-collaboration: Introduced the cloudServices.connectionTimeout and cloudServices.requestTimeout configuration options that allow for changing timeout values for connecting to Cloud Services and for handling a single request.
  • revision-history: Unsaved revision will now be resumed when the editor is re-initialized (instead of creating a new revision). Introduced the revisionHistory.resumeUnsavedRevision configuration option that turns on and off this behavior (defaults to true).
  • track-changes: Added track changes integration for the code block and HTML embed features.

Bug fixes

  • engine: The order of attributes should not get reversed while loading editor data. Closes #11850. (commit)
  • engine: Inline filler should not be removed while updating a text node. Closes #11472. (commit)
  • engine: The view element renderUnsafeAttributes option should not be lost for an AttributeElements. Closes #11879. (commit)
  • engine: Whitespaces between block elements should not trigger auto-paragraphing. Closes #11248. (commit)
  • revision-history: Fixed long revision history loading time when Context is used.
  • source-editing: The formatHtml() helper should not crash when a pathological <iframe> content is passed. Closes #10698. (commit)
  • toolbar: Added a toolbar button tooltip when focused improving accessibility for keyboard users. Closes #5581. (commit)
  • ui: The secondary button of the SplitButtonView component should display a tooltip while being hovered over by the user. Closes #11833. (commit)

Other changes

  • code-block: The IndentCodeBlockCommand and the OutdentCodeBlockCommand are now using model.insertContent() and model.deleteContent() for easier extendability. (commit)
  • engine: Use innerText instead of innerHTML in view/filler. (commit)
  • real-time-collaboration: Raised default timeout settings for connecting to Cloud Services (to 10 seconds) and for handling a single request (to 20 seconds).
  • revision-history: Added support for replacing editor data with revision data also for non-real-time editing integration.
  • Updated translations. (commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

New packages:

Releases containing new features:

Other releases:

34.1.0 (2022-05-23)

Release highlights

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

This release introduces the following new features:

There were also a few bug fixes:

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v34.1.0-with-table-column-resize-feature-revision-history-enhancements-and-bugfixes/

Cloud Services compatibility

⚠️ Important message for CKEditor 5 Collaboration Server On-Premises users.

The new version of CKEditor 5 real-time collaboration is not compatible with the current version of CKEditor 5 Collaboration Server On-Premises (4.6.0).

Please wait for the new release of the CKEditor 5 Collaboration Server On-Premises solution and update the backend service first, before updating the CKEditor 5 packages.

Features

  • engine: Improved the History API. You can find the changes summary in the related issue. Closes #11226. (commit)
  • list: Added support for the type attribute of the <ul> and <ol> elements in addition to the list-style-type style. Closes #11615. (commit)
  • real-time-collaboration: Introduced better support for revision history when editor bundle is used. This greatly reduced the number of calls and revision data passed to Cloud Services.
  • table: Added support for table column resizing, which allows to set the width of each column in a table using a resize handle. (commit)

Bug fixes

  • code-block: Redundant text nodes should be removed from <pre> on upcast to avoid breaking the code block. Closes #11616. (commit)
  • engine: Attributes should not be set if a parent was converted into a collapsed range. Closes #11000. (commit)
  • engine: The elementToAttribute() upcast helper should consume an element itself while consuming its attribute. See #10800. (commit)
  • html-support: Extracted upcasting attributes of the figure view element to separate converters for the table, image and media integrations. Closes #11688. (commit)
  • html-support: The <div> elements should be upcast to container-like elements when there is a block among their descendants. Closes #11513. (commit)
  • html-support: Inline elements handled by a native editor plugin should not be handled by the GHS. Closes #10800, #10954. (commit)
  • html-support: Unlinking should remove a link even if there were some additional attributes handled by the GHS. See #10800. (commit)
  • language: Fixes the interference between TextPartLanguage and CodeBlock. Closes #11538, #11563. (commit)
  • mention: The mention UI should not show up when matching an existing mention following a white space. Closes #11400. (commit)
  • pagination: The PaginationLookup plugin should destroy parent class and stop listening to events from external emitters. Closes #1148.
  • paste-from-office: Fixes pasting multiple lines from Google Docs into a code block. (commit) Thanks to @skylerfenn!
  • restricted-editing: Standard editing mode post-fixers will no longer create marker operations with invalid base versions. Closes #11644. (commit)
  • revision-history: Incorrect HTML was generated from a revision if there was a space at the end of a block which lead to crashes when comparing multiple revisions.
  • style: The block style should be applied to all matching selected blocks. Closes #11582. (commit)
  • style: Inline style can be removed from an inline widget. Closes #11584. (commit)
  • style: Inline styles should not be enabled inside a code block. Closes #11581. (commit)
  • style: Container styles (for example, a block quote style) should be applied properly. Closes #11576. (commit)
  • style: A grid with styles should render properly with two styles in a row. Closes #11575. (commit)

Other changes

  • engine: Exported some of the engine.View classes in index.js. (commit)
  • html-support: Introduced DataFilter#processViewAttributes() that is helpful when integrating the GHS with a custom feature. Closes #10827. (commit)
  • list: Copying content from a single list item should not wrap it with a list in the clipboard. Closes #11608. (commit)
  • real-time-collaboration: Revision dates will now be based on the server time instead of the local time.
  • revision-history: A revision date can now be updated on backend when the revision is saved using the revision history adapter. See the API reference for RevisionHistoryAdapter#updateRevisions to learn more.
  • watchdog: Improved the ContextWatchdog queueing mechanism. Closes #11664. (commit)
  • Updated translations. (commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Releases containing new features:

Other releases:

34.0.0 (2022-04-08)

Release highlights

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

This release introduces the following new features:

There were also a few bug fixes:

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v34.0.0-with-redesigned-lists-new-styles-implementation-and-extended-dll-builds/

Please refer to the Migration to v34.x guide to learn more about these changes.

MAJOR BREAKING CHANGES ℹ️

  • The Editor#isReadOnly property is now not editable directly. Starting this release, the property is controlled by Editor#enableReadOnlyMode( lockId ) and Editor#disableReadOnlyMode( lockId ), which allow changing the Editor#isReadOnly state by more than one feature without collisions. See the migration guide to learn more.

  • real-time-collaboration: The new version of CKEditor 5 real-time collaboration works only with the new CKEditor 5 Cloud Services backend. If you use the CKEditor 5 Cloud Services On-Premise solution, please update the backend service if you decide to update the CKEditor 5 packages.

MINOR BREAKING CHANGES ℹ️

  • engine: The isAllowedInsideAttributeElement option has been removed, so the AttributeElement elements can wrap any view element (according to positions). Make sure that you are not wrapping any of the ContainerElement elements by accident by not checking the target in the converter. These would previously get wrapped by the AttributeElement element which would immediately be removed by the ContainerElement element within it so there would be no visible effect.
  • engine: The handling of Tab and Shift+Tab keystrokes have been switched to the 'tab' view document event across the project. If your integration uses KeystrokeHandler for Tab key handling, we recommend you migrate to the 'tab' event to avoid unpredicted errors.
  • engine: If your integration uses the Model#insertContent() and findOptimalInsertionRange() methods to insert widgets into the content, we recommend you migrate your code to the Model#insertObject() method for best results. This is particularly relevant for compatibility with the document lists feature (see #11198).
  • html-support: The $htmlSection, $htmlObjectBlock, and $htmlObjectInline element types are no longer available for custom elements registered via theregisterBlockElement() method to inherit from. Please use $container, $blockObject, and $inlineObject instead (see #11197).

Features

  • core: Introduced the lock mechanism for the Editor#isReadOnly property. The read-only mode can now be separately enabled and disabled by multiple features, which allow for proper control without conflicts between features. Closes #10496. (commit)
  • core: MultiCommand now allows setting the priority (the order) of registered subcommands. Closes #11083. (commit)
  • engine: Added the new Model#insertObject() method for inserting elements defined as objects by model schema (see #11198). (commit)
  • engine: Introduced the inheritable $container, $blockObject, and $inlineObject element types in the model Schema (see #11197). (commit)
  • engine: Introduced the TabObserver observer that allows listening to pressing down the Tab key in the specified context. (commit)
  • engine: Added the new Schema#getAttributesWithProperty() method that retrieves attributes from a node which has a given property (see #11198). (commit)
  • engine: Added the new Schema#setAllowedAttributes() method that validates whether attributes are allowed on a given element before setting them (see #11198). (commit)
  • html-support: Changes to GHS model attributes will be reflected in the editing view (see #5700). (commit)
  • html-support: Added support for document list in the GeneralHtmlSupport feature. Closes #11454, #11359, #11358. (commit)
  • list: Introducing the document list feature (multiple blocks per list item). Closes #2973, #10812. (commit)
  • list: Introducing the document list properties feature (list styles, start index, reversed list). Closes #11065. (commit)
  • paragraph: Added an optional options.attributes parameter to the InsertParagraph command that allows setting attributes on a created paragraph (see #11198). (commit)
  • style: Implemented the configurable style feature with the style UI dropdown. Closes #5700. (commit)
  • theme-lark: Implemented a .ck-reset_all-excluded CSS class that excludes certain elements from CSS reset. Closes #11451. (commit)

Bug fixes

  • engine: Marker changes sometimes did not trigger change:data event which resulted in errors in features using markers (for example, annotations not showing up in the sidebar). (commit)
  • html-support: GHS should not convert already consumed inline elements (e.g. handled by other editor features). Closes #11447. (commit)
  • html-support: Prevent the TypeError error in the mergeViewElementAttributes() function. Closes #10657, #11450, #11477. (commit)
  • html-support: Skip inline image upcast conversion inside not supported element. Closes #10703. (commit)
  • image: The image upcast converter should consume the [src] attribute. Closes #11530. (commit)
  • link: The link decorators should be converted on block images only once (should not wrap block image with an additional link). (commit)
  • list: Soft enter (Shift+Enter) is no longer captured by the document list enter key listener, allowing to insert soft breaks in empty list items. Closes #11539. (commit)
  • list: The view list split converter should not fire if the change was already consumed. Closes #11490. (commit)
  • list: List properties should remain the same after a paragraph following a list is toggled into a list item. Closes #11408. (commit)
  • pagination: Fixed updating pagination lines after resizing the editing root ancestor.
  • revision-history: Editor will not get stuck if the revision diff data could not be loaded due to an error when opening or using the revision viewer.

Other changes

  • code-block: The handling of Tab and Shift+Tab keystrokes switched to the 'tab' view document event and now respects the event context. (commit)
  • core: The Editor#isReadOnly property is now marked as read-only. (commit)
  • engine: The Differ change entries for insert and remove types are extended with a map of attributes that were set while inserting an element or that belonged to an element that got removed. (commit)
  • engine: The DowncastHelpers are passing an additional parameter to the creator functions (the data that provides more context to the element creator callback). (commit)
  • engine: The isAllowedInsideAttributeElement option was removed, from now on AttributeElements are allowed to wrap any view element. (commit)
  • engine: The ConversionApi provided by the UpcastDispatcher was extended by an additional keepEmptyElement() method that marks an element that was created during splitting a model element that should not get removed on conversion even if it is empty. (commit)
  • engine: Improved model.TreeWalker#next() efficiency. See ckeditor/ckeditor5#11463. (commit)
  • html-support: Updated default schema definitions for various elements taking advantage of the $container, $blockObject, and $inlineObject elements in model schema (see #11197). (commit)
  • media-embed: Added the optional findOptimalPosition parameter to the insertMedia() helper that allows for inserting media model element without breaking the content (see #11198). (commit)
  • revision-history: Improved revision history performance for large documents in the following areas: editor initialization time, revision saving time and revision comparison time.
  • revision-history: The @ckeditor/ckeditor5-revision-history package exposes the DLL build.
  • table: Exports PlainTableOutput plugin from the table package. Closes #11516. (commit)
  • watchdog: Improved performance of the getSubNodes() utility of Watchdog. (commit)
  • Updated translations. (commit, commit)
  • CKEditor 5 uses PostCSS@8 now. Closes #11460. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

New packages:

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

33.0.0 (2022-03-07)

Release highlights

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

This release introduces the following new features:

There were also a few bug fixes:

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v33.0.0-with-improved-conversion-system-and-dll-builds-for-collaboration-features/

MAJOR BREAKING CHANGES ℹ️

  • engine: Removed the Differ#refreshItem() method from the public API. Replaced by EditingController#reconvertItem() (see #10659).
  • engine: The downcast dispatcher will throw an error if any of the model items were not consumed while converting. Read the conversion-model-consumable-not-consumed error documentation for more information.
  • engine: The DowncastDispatcher#conversionApi property is no longer available. The instances of DowncastConversionApi are created at the start of conversion.
  • engine: Support for the triggerBy option for downcast helpers was removed and replaced with the new elementToStructure() options.
  • list: The ListEditing, ListUI, ListStyleEditing, ListStyleUI, TodoListEditing, TodoListUI plugins were moved to their dedicated subdirectories (list, liststyle, todolist).

MINOR BREAKING CHANGES ℹ️

  • image: Image caption utilities were converted to the ImageCaptionUtils plugin.
  • table: The downcast converters of the table feature were rewritten with the use of elementToStructure() and the re-conversion mechanism. See #10502.
  • table: The table selection utilities were moved to the TableUtils plugin.
  • config.initialData will now always be set, even if it is not passed in the editor configuration.

Features

  • engine: The DowncastWriter#createContainerElement() method should accept a list of children so that bigger view structures can be created in one call. Closes #10714. (commit)
  • engine: The elementToElement() downcast helper will log a console warning if multiple elements have been created. Closes #10610. (commit)
  • engine: The downcast dispatcher will throw an error if any of the model items were not consumed while converting. Closes #10377. (commit)
  • engine: Introduced the convertItem(), convertChildren() and convertAttributes() methods in the downcast conversion API interface. (commit)
  • engine: Added support for reconversion in the DowncastHelpers#elementToElement() downcast helper. Closes #10359. (commit)
  • engine: Added the DowncastHelpers#elementToStructure() downcast helper with reconversion support. Closes #10358. (commit)
  • engine: It is now possible to trigger a nested conversion while downcasting an element. (commit)
  • engine: The DeleteCommand was changed to delete the whole multi-character emoji at once. Closes #6504. (commit)
  • engine: Introduced Marker#getData(). (commit)
  • html-support: Added the <style> element support in the General HTML Support feature. Closes #11104. (commit)
  • table: Introduced the PlainTableOutput plugin to override the default figure>caption markup in the data pipeline (it outputs the table as table>caption). Closes: #10892. (commit)

Bug fixes

  • engine: Setting a marker to the same range it was will no longer trigger the change:data event. This will prevent unnecessary autosave callbacks. Closes #9901. (commit)
  • html-support: Prevent the removal of the <script> and <style> elements when they are the only content in the editor. Closes #11247. (commit)
  • image: Always create new instances of the default options for the ImageStyle plugin. Closes #11328. (commit)
  • table: Prevent the plain table output converter from interfering with other features' caption converters. Closes #11394. (commit)
  • Fixed the "Unknown option --dev" error when building DLL files with the development mode enabled. Closes #11170. (commit)

Other changes

  • engine: Implemented the EditingController#reconvertMarker() method to be used instead of Writer#updateMarker() for marker reconversion purposes. Implemented the EditingController#reconvertItem() method to replace Differ#refreshItem(). Closes #10659. (commit)
  • engine: The conversion events for attribute and child nodes are fired by the lowest priority handler for the insert event instead of the DowncastDispatcher itself. Closes #10376. (commit)
  • engine: Events are fired by the DowncastDispatcher even if they were previously consumed. It is the conversion handler's responsibility to check if it can be consumed or if it has already been consumed by other converters. (commit)
  • engine: The DowncastDispatcher#convert() method was introduced as a replacement for the previously used convertInsert(). The new method not only handles the nodes conversion but also the markers. (commit)
  • engine: The <style> element will not interfere with the editing experience. See #11104. (commit)
  • font: Moved the utilities functions to plugins to make them available in DLLs. (commit)
  • list: The ckeditor5-list package was restructured into subdirectories. Closes #10811. (commit)
  • list: The downcast conversion should consume the downcasted attributes. (commit)
  • table: Table downcast conversion was migrated to the elementToStructure() downcast helper. Closes #10502. (commit)
  • Updated translations. (commit)
  • Editor.create() will now set the config.initialData value based on the first parameter if initialData has not been set in the editor configuration. As a result, plugins can now easily read and modify the editor initial data. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Major releases (contain major breaking changes):

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

32.0.0 (2022-01-26)

Release highlights

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

This release introduces the following new features:

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v32.0.0-with-new-list-properties-support-for-the-script-tag-and-enhanced-mentions/

MAJOR BREAKING CHANGES ℹ️

  • engine: Batch#type was deprecated. It will always return the 'default' value and reading it will log a warning in the console. Use Batch#isUndoable, Batch#isLocal, Batch#isUndo and Batch#isTyping instead.
  • revision-history: Multiple changes to Revision properties were introduced that impact revision history integrations. Introduced #fromRevision and #toRevision properties. Renamed #data to #diffData. The #isLocked property was removed. These changes have an impact on what data should be saved in your database and how the revision history plugin should be integrated. Please refer to the migration guide and the API documentation to learn more about these changes.
  • revision-history: The RevisionHistoryAdapter interface has changed. Also, RevisionTracker no longer uses RevisionHistoryAdapter#getRevisions() to fetch revisions during the editor initialization. You should add revisions data in your integration plugin. Please refer to the migration guide and the documentation to learn how to update your revision history integration.
  • revision-history: RevisionTracker#updateRevision() was removed while the #update() and #saveRevision() methods have been introduced instead. This may have an impact on your revision history integration (e.g. with autosave). Please refer to the migration guide and the documentation to learn how to update your revision history integration.
  • typing: Input#isInput() was removed. Use Batch#isTyping instead.
  • Upgraded the minimal versions of Node.js to 14.0.0 due to the end of LTS.

MINOR BREAKING CHANGES ℹ️

  • engine: The string value for the Batch type and Model#enqueueChange() is now deprecated. Using a string value will log a warning in the console. Use an object value instead. For more information, refer to the API documentation.
  • revision-history: RevisionTracker#isLocked was removed.
  • revision-history: The flow for saving and updating a revision has changed. See the documentation to learn what it looks like after the changes.
  • The previously named #_getTemplate() methods in CommentThreadView, CommentView and SuggestionThreadView were renamed to #getTemplate(). These methods are used in annotations customization when changing the default templates.

Features

  • autosave: Autosave#save() will now return a promise that is resolved when the autosave callback has finished. (commit)
  • comments: Introduced Annotation#refreshVisibility() and Annotations#refreshVisibility() that refresh the visibility of the annotations based on the visibility of their target elements.
  • comments: Introduced the Annotation#isVisible observable property that allows controlling the visibility of the annotation.
  • html-support: Added support for the <script> elements. Closes #10891. (commit)
  • list: Implemented the numbered list properties UI. Closes #10877. (commit)
  • list: Added support for reversed lists and list start index (reversed and start HTML attributes). Closes #10673. (commit)
  • mention: The mention plugin now allows searching mentions that include space characters. Closes #9741. (commit)
  • paste-from-office: Added support for start index in ordered lists. Closes #11043. (commit)
  • revision-history: Introduced Revision#fromVersion and Revision#toVersion.
  • revision-history: Introduced new methods in the RevisionHistory plugin: #addRevisionData(), #getRevision(), #getRevisions().
  • ui: Introduced the InputNumberView class and the createLabeledInputNumber() helper for creating number inputs (see #10877). (commit)
  • ui: Introduced the InputView class for other inputs such as InputTextView to inherit from (see #10877). (commit)
  • utils: Introduced the isVisible() helper to detect whether DOM elements are visible to the user in the DOM (see #10877). (commit)
  • Replaced Batch#type with a set of flags: Batch#isUndoable, Batch#isLocal, Batch#isUndo, Batch#isTyping which better represent the batch type. The Batch constructor and Model#enqueueChange() now expect an object. Closes #10967. (commit)

Bug fixes

  • comments: DOM listeners will be detached when destroying annotation collections, which prevents memory leaks.
  • engine: HTMLDataProcessor#toView() should preserve leading non-layout elements while loading partial HTML. Closes #11110. (commit)
  • list: The list properties feature will no longer crash when removing content from the last list item which is next to a non-list element. Closes #8642. (commit)
  • pagination: The page number input view should not stretch. Used InputNumberView to render the page number input in PageNavigatorView.
  • revision-history: Fixed a crash when a revision contained overlapping suggestions.
  • revision-history: Fixed a crash when content selected by triple-click was copied and pasted into the editor.
  • track-changes: Fixed a crash that was happening during real-time editing when one of the users used Enter inside a suggestion.
  • typing: Fixed an editor crash when an unrecognized transformation was provided in the configuration (as a string). (commit)
  • watchdog: Prevented EditorWatchdog from crashing during the editor destruction process when one of the plugins tries to change the data at that moment. Closes #10643. (commit)

Other changes

  • autosave: The Autosave plugin will now ignore changes coming from remote clients during real-time collaboration. Closes #9233. (commit)
  • build-decoupled-document: Enabled the startIndex and reversed list properties in the document build. Closes #11037. (commit)
  • comments: Renamed CommentThreadView#_getTemplate() to #getTemplate(). Renamed CommentView#_getTemplate() to #getTemplate().
  • list: Renamed the ListStyle plugin to ListProperties. Closes #10964. (commit)
  • real-time-collaboration: Collaboration updates will now be sent with shorter delays after they are rejected. This should allow for a better user experience when multiple users are typing at the same time.
  • real-time-collaboration: The RealTimeCollaborationClient#offset property is now private.
  • real-time-collaboration: The real-time collaboration feature will now create batches with the #isLocal flag set to false.
  • revision-history: Renamed Revision#data to Revision#diffData. The Revision#isLocked property was removed.
  • revision-history: The RevisionHistoryAdapter interface has changed. Removed #getRevisions(), #updateRevision() and #addRevision(). Added #updateRevisions().
  • revision-history: The revision history UI will now be blocked if the editor is in read-only mode.
  • revision-history: Added the index parameter in RevisionRepository#addRevision().
  • revision-history: Removed RevisionTracker#isLocked.
  • revision-history: Removed RevisionTracker#updateRevision() and added #update() and #saveRevision() instead.
  • revision-history: RevisionTracker no longer uses RevisionHistoryAdapter#getRevisions() to fetch revisions during the editor initialization.
  • revision-history: An error is now thrown when the revision history plugin configuration is missing.
  • revision-history: RevisionHistoryAdapter#getRevision() and #updateRevisions() now receive the #channelId parameter.
  • track-changes: Renamed SuggestionThreadView#_getTemplate() to #getTemplate().
  • typing: The typing feature will now create batches with the #isTyping property set to true. (commit)
  • ui: FocusCycler should skip elements that are invisible to the user (see #10877). (commit)
  • undo: The undo feature will now create batches with the #isUndo property set to true. (commit)
  • users: The anonymous user will now be added to the Users plugin automatically when the editor initializes.
  • Updated translations. (commit, commit)
  • Updated the required version of Node.js to 14. Closes #10972. (commit)
  • Project migration to webpack 5. Closes #10668. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Major releases (contain major breaking changes):

Releases containing new features:

Other releases:

31.1.0 (2021-12-03)

Release highlights

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

This release introduces the following new features:

There were also a few bug fixes:

Read about release highlights in a dedicated blog post: https://ckeditor.com/blog/ckeditor-5-v31.1.0-with-enhanced-copy-and-paste-and-reconnection-handling/

MINOR BREAKING CHANGES ℹ️

  • table: Changed table elements' attributes' names introduced by the TablePropertiesEditing plugin by prefixing them with table to be in line with other plugins' attributes naming. The affected attribute include: borderStyle, borderColor, borderWidth, backgroundColor, alignment, width, height. See #9369.
  • table: Changed tableCell elements' attributes' names introduced by the TableCellPropertiesEditing plugin by prefixing them with tableCell to be in line with other plugins' attribute naming. The affected attributes include: backgroundColor, padding, width, height, borderStyle, borderColor, borderWidth, verticalAlignment, horizontalAlignment. See #9369.
  • table: The upcastBorderStyles() helper parameters were modified (added the modelAttributes param).

Features

  • comments: Introduced the AnnotationsUIs#refilterAnnotations() method which runs annotation UI filtering callback against all annotations and moves them to proper annotation UIs (or removes them).
  • link: Added the possibility to open a link by Ctrl/Cmd+click or Alt+Enter. Closes #1381. (commit)
  • track-changes: Introduced color boxes for color-related suggestions.
  • utils: Introduced env.isiOS for detection of user agents running in iOS environments (see #7707). (commit)

Bug fixes

  • core: Support language configuration passed in defaultConfig option through editor's constructor. Closes #8510. (commit)
  • engine: Merge intersecting ranges that are not adjacent to each other on ranges array. Closes #10628. (commit)
  • find-and-replace: Replace functionality no longer replaces text when 'Replace with...' input is focused and user hits the Enter key but the search criteria changed. Closes #10712. (commit)
  • find-and-replace: Fixed adjacent whole words being missed by find and replace. Closes #10719. (commit)
  • image: Manual decorators on the linked inline images should be preserved while loading editor content. Closes #10828. (commit)
  • image: The <figure> element should not get replicated while GHS is enabled. Closes #10279. (commit)
  • real-time-collaboration: The whole reconnection mechanism was improved. More reconnection scenarios are now handled without editor crashing or data loss. Note: these changes require Collaboration Server On-Premises in version higher than 4.2.0. Otherwise, the fix will not be applied.
  • table: Disabled alignment button on main editor toolbar for tables in order to have a more unified behavior. Closes #9369. (commit)
  • track-changes: Creating document color suggestions no longer causes the editor to crash.
  • ui: Changed the look and position of the BalloonToolbar in Safari on iOS to avoid clash with native text selection handles. Closes #7707. (commit)
  • utils: Fixed DomEmitterMixin to correctly manage listeners for different options (useCapture & usePassive) set for the same DOM node. Closes #7830. (commit)

Other changes

  • engine: Allowed unsafe view element attributes so they get rendered in the editing pipeline. Attribute names can be specified when creating elements using DowncastWriter (DowncastWriter#createAttributeElement(), DowncastWriter#createContainerElement(), etc.). (commit)
  • track-changes: Changed suggestion description for a highlighted text fragment.
  • typing: Added support for the Shift+Delete keystroke on Windows to cut the selected content. Closes #9326. (commit)
  • Updated translations. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

31.0.0 (2021-10-25)

Release highlights

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

This release introduces the following new features:

There were also a few bug fixes:

Read more in the blog post: https://ckeditor.com/blog/ckeditor-5-v31.0.0-with-enhanced-restricted-modes-handling-and-new-collaboration-samples/

MAJOR BREAKING CHANGES ℹ️

  • html-embed: The InsertHtmlEmbedCommand and UpdateHtmlEmbedCommand have been replaced by HtmlEmbedCommand which is now responsible for both tasks. The command can be executed via editor.execute( 'htmlEmbed' ). See the API reference for more information.

Features

  • core: Introduced the Command#affectsData flag to indicate whether a given command should stay enabled in editor modes with restricted write permissions (e.g. read-only mode). Closes #10670. (commit)
  • engine: The DataController#get() is now decorated and fires a get event on the method call. See #10505. (commit)
  • mention: Added the configuration option for customizing the maximum number of items in the list after typing the trigger character. Closes #10479. (commit)
  • real-time-collaboration: Introduced the RealTimeCollaborationClient#serverHistory property. See the API reference for more information.

Bug fixes

  • comments: Features that do not change the content, should work properly in editor modes with restricted write permissions (e.g. read-only mode). See ckeditor/ckeditor5#10670.
  • comments: The comment data was not updated on remote clients after the local client edited the comment.
  • engine: DOM selection updates in Renderer when the selection is made using the mouse was blocked. Random glitching in Chrome when the user starts selection in a link (or a marker) at the beginning of the block was limited. Closes #10562. (commit)
  • engine: Makes order of markers in downcast data pipeline consistent. Thanks @bendemboski! Closes #10650. (commit)
  • engine: Fixed a bug in the selection post-fixer (when the selection is stuck in a limit element that cannot contain text). Closes #10487. (commit)
  • export-pdf: Features that do not change the content should work properly in editor modes with restricted write permissions (e.g. read-only mode). See ckeditor/ckeditor5#10670.
  • find-and-replace: The FindCommand and FindNextCommand commands should work properly in editor modes with restricted write permissions (e.g. read-only mode). Closes #10636. (commit)
  • find-and-replace: Do not replace find results removed by collaborators that landed in the $graveyard root. (commit)
  • html-embed: Embed buttons should reflect the read-only state of the editor and the HTML embed command. Closes #10182. (commit)
  • html-support: Adds HTML support for all headings given in the configuration of the headings feature. Closes #10539. (commit)
  • mention: Th mention panel will now hide when the editor becomes read-only. Closes #4645. (commit)
  • restricted-editing: The feature should work properly in editor modes with restricted write permissions (e.g. read-only mode). Closes #10634. (commit)
  • select-all: The SelectAllCommand command should work properly in editor modes with restricted write permissions (e.g. read-only mode). Closes #10635. (commit)
  • source-editing: Calling editor.getData() while in the source editing mode should return the data from the source editor passed through the model. Closes #10505. (commit)
  • source-editing: Improve source editing textarea field size and scrolling behaviour. Closes #10422. (commit)
  • source-editing: Safari browser uses monospace font for text in source editing mode. Closes #10585. (commit)
  • table: The SelectColumnCommand and SelectRowCommand commands should work properly in editor modes with restricted write permissions (e.g. read-only mode). See #10635. (commit)
  • table: Color dropdown buttons in the table properties form should not be misaligned in Safari. Closes #10589. (commit)
  • table: A nested widget in a multi-cell table selection should not have the selection handle. Closes #9491. (commit)
  • ui: The ContextualBalloon positioning should use the dynamic editor.ui.viewportOffset value instead of static config.ui.viewportOffset. Closes #10597. (commit)
  • ui: The InputTextView class should update its #isEmpty property on every #input instead of #change to stay in sync. Closes #10431. (commit)
  • utils: Properly stringify objects containing circular references in the CKEditorError class. Closes #4959. (commit) Thanks to @marcellofuschi.

Other changes

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Major releases (contain major breaking changes):

Releases containing new features:

Other releases:

30.0.0 (2021-09-27)

Release highlights

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

This release introduces the following new features:

There were also a few bug fixes:

Read more in the blog post: https://ckeditor.com/blog/ckeditor-5-v30.0.0-with-better-handling-of-automated-actions-and-plugin-development-tool/

MAJOR BREAKING CHANGES ℹ️

  • The config.toolbar.viewportTopOffset property was moved to config.ui.viewportOffset and it now accepts an object.

MINOR BREAKING CHANGES ℹ️

  • engine: The Matcher class is more strict in handling Elements provided to the match() and matchAll() methods. It will not accept other Nodes now.
  • html-support: The public helper function html-support/converters~disallowedAttributesConverter has been removed due to a change in the approach to filtering disallowed elements and attributes.
  • widget: The centeredBalloonPositionForLongWidgets() helper was removed from widget utils. Use BalloonPanelView.defaultPositions.viewportStickyNorth instead. See #9892.
  • widget: toWidgetEditable() will now set highlight handling for the editable element. If you used this method in conversion in your custom plugin it may affect your element styling when there is a marker on that element (e.g. a comment or a suggestion).

Features

  • autoformat: Allowed reverting the automatic Markdown-like formatting by pressing Backspace. See #10413. (commit)
  • html-support: Added the General HTML Support integration for the image feature. Closes #9916. (commit)
  • image: Allowed using backspace to undo automatic the image insertion transformations. Closes #10413. (commit)
  • ui: Introduced a new position type (viewportStickyNorth) in BalloonPanelView.defaultPositions. See #9892. (commit)
  • Introduced the editor.ui.viewportOffset property, which allows modifying the viewport's offset in runtime. This value is used by the editor e.g. to position its sticky toolbar and contextual balloons. Additionally, the config.toolbar.viewportTopOffset property was moved to config.ui.viewportOffset and it now accepts an object. Closes #9672. (commit)

Bug fixes

  • engine: Added system colors names from the CSS Color Module Level 3 so that pasting tables from MS Word works correctly. Closes #10383. (commit)
  • engine: Fixed the Matcher class handling global flag in the RegExps patterns. Closes #10282. (commit)
  • find-and-replace: The toolbar should not lose focus after escaping from the find and replace dropdown. Closes #10420. (commit)
  • find-and-replace: Improved the performance of the find feature by reducing the number of model.change() calls. Closes #10302. (commit)
  • image: Attributes from a marker conversion descriptor will now be correctly added on view elements during marker downcast. Closes #10425. (commit)
  • revision-history: Fixed widget highlight in the revision comparison in some cases with nested edits added by different users.
  • table: Made reordering table rows and columns possible without breaking the view in tables with heading rows or heading columns. Closes #10463. (commit)
  • table: Cancelling the table cell properties UI no longer results with a warning in the console. Closes #6266. (commit)
  • table: Fixed handling of a non-collapsed selection inside a table cell. Closes #10391. (commit)
  • track-changes: Fixed crash happening in some scenarios in track changes mode after an image element split a non-paragraph element.
  • track-changes: Fixed missing data-suggestion attributes on table cells and image captions.
  • typing: Restricted mathematical text transformation, so that it requires no alphanumeric character before and after the fraction. Closes #9170. (commit)
  • ui: The editor no longer crashes when a button has withKeystroke set to true but no keystroke property is provided. Closes #9412. (commit)
  • widget: Fixed arrow keys navigation when there is an inline widget at the edge of a table cell. Closes #9380. (commit)

Other changes

  • engine: The MarkerCollection#has() method now also accepts an instance of a marker. Closes #9985. (commit)
  • image: Upcast images with or without the empty src attribute. Closes #9238. (commit)
  • image: Prevent leaving an unconsumed figure element after conversion. (commit)
  • link: Upcast linked images with or without the empty src attribute. See #9238. (commit)
  • media: The figure element should not be consumed if the media embed is unknown. (commit)
  • media-embed: Prevent leaving an unconsumed figure element after conversion. (commit)
  • widget: toWidgetEditable() will now set the default highlight handling for the editable element. (commit)
  • widget: setHighlightHandling() received default parameters for the highlight add and remove functions which handle classes and attributes. (commit)
  • The viewport offsets will be taken into consideration when calculating the position of contextual balloons (such as the table toolbar). Closes #9892. (commit)
  • Updated translations. (commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Major releases (contain major breaking changes):

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

29.2.0 (2021-08-30)

Release highlights

We are happy to announce the release of CKEditor 5 v29.2.0.

This release introduces several new features:

There were also a few bug fixes:

Read more in the blog post: https://ckeditor.com/blog/ckeditor-5-v29.2.0-with-redesigned-find-and-replace-and-localized-dll-builds/

MINOR BREAKING CHANGES ℹ️

  • find-and-replace: The layout, styling, and view structure of the find and replace form have changed radically, which may affect integrations that either customized or extended this form (see #10229).
  • revision-history: The revision data now includes a new property: authorsIds. This property needs to be handled (saved and loaded) similarly to other revision properties. For revisions that are already saved in your database, set this value to an array with one string, equal to the creatorId value (e.g. ["user1"]). Check the updated revision history integration guide to see an example.
  • revision-history: The documentation for revision history adapter has been updated. Please check the RevisionHistoryAdapter#addRevision() and updateRevision() documentation to make sure that you correctly handle all the data passed to these methods.

Features

Bug fixes

  • comments: The Comment#setAttribute() and Comment#removeAttribute() methods will now correctly set the attribute value and fire the adapter call also for comments created by other users.
  • find-and-replace: Changing the search text should reset the results. Closes #10304. (commit)
  • find-and-replace: Toggling search options should reset the results. Closes #10021. (commit)
  • find-and-replace: The find and replace form should be responsive. Closes #10019. (commit)
  • find-and-replace: The search term should be allowed to contain a trailing or leading space when searching "whole words only". Closes #10131. (commit)
  • html-support: All pasted HTML comments will now be filtered. Closes #10213. (commit)
  • html-support: Extended the schema definition for $root to allow storing a comment's content as the $root attribute. Closes #10274. (commit)
  • revision-history: Enabled multiple authors in one revision. Introduced the authorsIds property in the revision data.
  • revision-history: Visual improvements to how nested changes are displayed.
  • source-editing: The selection is now set to the beginning of the source editing view. Closes #10180. (commit)
  • source-editing: The source editing feature will send a warning to the console when the restricted editing feature is loaded. Closes #10228. (commit)
  • theme-lark: The label of the labeled field should stay at the top when the field is disabled and not empty to not cover the field's text (see #10229). (commit)

Other changes

  • ckeditor5: The ckeditor5 package offers translation files for several core CKEditor 5 packages: utils, core, engine, ui, clipboard, enter, paragraph, select-all, typing, undo, upload, and widget, used in the DLL builds. (commit)
  • clipboard: The DataTransfer.files property is not evaluated more than once. Closes #10287. (commit)
  • comments: Raised comments character limit to 65000.
  • core: Merged a duplicated translation context from ckeditor5-ui and ckeditor5-find-and-replace packages. Closes #10400. (commit)
  • find-and-replace: Moved the search result translation context to ckeditor5-core. Closes #10400. (commit)
  • find-and-replace: Visually revamped the find and replace form. Closes #10229. (commit)
  • find-and-replace: Increased the contrast between selected and unselected find and replace results. Closes #10242. (commit)
  • highlight: Toggling highlight does not remove it when the caret is at the end of the highlighted range. Closes #2616. (commit)
  • language: The "Remove language" option of text part language dropdown is now the first one in the list. Closes #10338. (commit)
  • revision-history: Some CSS styling improvements for suggestions and changes highlights.
  • theme-lark: Moved the presentational find and replace form styles to the theme (see #10229). (commit)
  • ui: Moved the page label translation context to ckeditor5-core. Closes #10400. (commit)
  • Updated translations. (commit, commit)
  • The content styles stylesheet for the guide will now be generated on-demand using the {@exec...} feature. Closes #10299. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

29.1.0 (2021-08-02)

Release highlights

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

This release introduces several new features:

There were also a few bug fixes:

Read more in the blog post: https://ckeditor.com/blog/ckeditor-5-v29.1.0-with-content-minimap-html-comments-and-revision-history-autosave/.

MINOR BREAKING CHANGES ℹ️

  • html-embed: The preview content will not be centered anymore.
  • image: Several conversion helpers have been renamed and removed from the public API:
    • viewFigureToModel() -> upcastImageFigure(),
    • srcsetAttributeConverter() -> downcastSrcsetAttribute(),
    • modelToViewAttributeConverter() -> downcastImageAttribute().
  • revision-history: RevisionTracker#saveRevision() was renamed to RevisionTracker#updateRevision(). This is to better reflect what the method actually does. Since revision locking was introduced, saveRevision( { name: ... } ) calls should be replaced with updateRevision( { name: ..., isLocked: true } ) calls.
  • revision-history: The Revision#name property is now read-only. You need to use Revision#setName() instead.

Features

  • autosave: Introduced the Autosave#save() function. Closes #10215. (commit)
  • engine: Introduced the new (skipComments) option in DomConverter#domToView() (false by default) to make it possible to decide whether HTML comments should be removed from the data. (commit)
  • html-support: Introduced the HTML comment plugin. Closes #8822. (commit)
  • html-support: Added support for elements that can act both as a paragraph and a sectioning element depending on the content context. Closes #10085. (commit)
  • html-support: Added General HTML Support integration for the table feature. Closes #9914. (commit)
  • image: Implemented the <picture> element support in the image feature. Closes #9833. (commit)
  • minimap: Basic implementation of the content minimap feature. Closes #10079. (commit)
  • revision-history: Introduced the possibility to update a revision after it was created. Provided a way to integrate revision history with the autosave plugin. See the revision history guide.
  • revision-history: Introduced the Revision#setName() function. Revision#name is now read-only.
  • revision-history: Introduced several properties: Revision#isLocked, Revision#lock() and RevisionTracker#isLocked.
  • table: Introduced an editor configuration option allowing to set default headings for newly created tables. Closes #10039. (commit)
  • track-changes: Enabled export to Word in track changes mode.

Bug fixes

  • autoformat: Autoformat will apply the previous language choice for the code block feature. Closes #10005. (commit)
  • autosave: Autosave callback should not be called while the editor is initialized. Closes #10214. (commit)
  • build-decoupled-document: The editing area in the sample should have a solid white background. Closes #10095. (commit)
  • collaboration-core: User initials for user names longer than two word will now be composed of the first letters of the first and last word of the name. This is better for names with a middle name or with a last name having a prefix.
  • engine: White spaces around inline object elements such as <img> or <button> should not be lost in the data. Closes #10147. (commit)
  • engine: Matcher should not match the style and class attributes with the object attributes pattern. Closes #9813. (commit)
  • find-and-replace: Find and replace feature now works correctly with a multi-root editor. Closes #10146. (commit)
  • link: Link decorators should use class and style properties instead of directly matching style and class HTML attributes. Closes #9813. (commit)
  • paste-from-office: Fixed a crash when pasting lists from Word to the editor. Closes #9055, #9954. (commit)
  • revision-history: The Autosave plugin now will be filtered by RevisionHistory plugin, so it will not be included in the revision history view editor instance as this caused errors.
  • revision-history: Tables will be now correctly handled after a change in a table was undone.
  • table: Fixed model mappings in a table cell if a paragraph is bound to its parent. (commit)
  • table: Fixed editor freezing when providing invalid colspan or rowspan attribute values. Closes #10042. (commit)
  • track-changes: The Autosave plugin will no longer cause editor crashes when used together with the TrackChangesData plugin.
  • widget: Remove references to and destroy resizers of widgets no longer in the document. Closes #10156. (commit)
  • widget: The editor should not crash when a widget with a resizer is moved in the model document. Closes #10266. (commit)

Other changes

  • engine: The elementToMarker() upcast helper is no longer marked as deprecated. (commit)
  • export-word: Introduced the config.exportWord.dataCallback option to define a custom data provider for conversion. This brings support for multi-root editors.
  • html-embed: The preview content for the HTML embed plugin will not be centered. Closes #9486. (commit)
  • revision-history: RevisionTracker#saveRevision() was renamed to RevisionTracker#updateRevision().
  • revision-history: Revision will be updated (or an autosave callback will be fired) when the revision history view is opened. This replaces the temporary "Unsaved changes" revision.
  • revision-history: Restoring an unnamed revision will now create a revision with a name containing the restored revision's date.
  • Updated translations. (commit)
  • The ckeditor5-metadata.json file will be published on npm along with the package's code. Closes ckeditor/ckeditor5#10004. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

New packages:

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

29.0.0 (2021-07-05)

Release highlights

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

This release introduces several new features:

There were also a few bug fixes:

Read more in the blog post: https://ckeditor.com/blog/CKEditor-5-v29.0.0-with-boosted-images-find-and-replace-and-the-source-editing-feature/.

MAJOR BREAKING CHANGES ℹ️

  • build-decoupled-document: The official preconfigured decoupled document build now ships with the ImageResize plugin enabled by default. Learn more about it in the Migration to v.29.x guide.
  • image: The Image plugin works as a glue for both the ImageBlock and ImageInline features now (previously it only supported block images). If you do not want inline images to be allowed, consider replacing the Image plugin with ImageBlock in your editor configuration. Otherwise, all images without the <figure> wrapper will be loaded into the editor content as inline images, which in some cases may affect content semantics and styling. Check the updated image installation guide for more details about this change.
  • image: The ImageEditing plugin is no longer standalone, as the majority of its logic was extracted to the ImageBlockEditing and ImageInlineEditing plugins. The logic remaining in the ImageEditing is common for both ImageBlockEditing and ImageInlineEditing plugins.
  • image: The image caption is no longer displayed automatically when the user selects a block image. Instead, its presence is controlled using the 'toggleImageCaption' toolbar button and a ToggleImageCaptionCommand for better integration with the revamped image styles system.
  • image: The API of the image features has changed, please make sure to update your integrations.
  • image: The linked image indicator (icon) rendered as a <span> with the .ck-link-image_icon CSS class has been removed. To alter the look of the indicator (including the icon), please use the figure.image > a::after (for linked block images) and a span.image-inline::after (for linked inline images) CSS selectors instead.
  • image: The srcsetAttributeConverter() and modelToViewAttributeConverter() conversion helpers now require the imageType parameter.
  • table: The in-cell pseudo-paragraph used for data tables is no longer styled using the inline style attribute but a .ck-table-bogus-paragraph CSS class instead.
  • Several plugins are not loaded automatically as dependencies of other plugins anymore. From now on, they need to be provided by the editor creator manually (via the config.plugins configuration option). Learn more about it in the Migration to v.29.0.0 guide. This list includes:
    • The CKFinder plugin is no longer automatically importing the Image plugin as a dependency.
    • The EasyImage plugin is no longer automatically importing the Image plugin as a dependency.
  • Several functions are no longer a part of the public API. This list includes:
    • getSelectedImageWidget()
    • getViewImgFromWidget()
    • isImageAllowed()
    • isImage()
    • isImageWidget()
    • toImageWidget()
    • captionElementCreator()
    • isCaption()
    • checkSelectionOnObject()
  • Several functions or constants have been renamed. The list of changes includes:
    • The getCaptionFromImage() helper is now available as getCaptionFromImageModelElement().
    • The matchImageCaption() helper is now available as matchImageCaptionViewElement().
    • The defaultIcons are now available as DEFAULT_ICONS.
    • The defaultStyles are now available as DEFAULT_OPTIONS.
    • The findOptimalInsertionPosition() helper is now findOptimalInsertionRange() and returns a model range. Also, instead of searching for a position next to the currently selected block, it will now attempt to replace that block (see #9102).
    • The isImageAllowed() helper is now available as isLinkableElement().
    • Some helpers from the image utilities module (@ckeditor/ckeditor5-image/src/image/utils.js) have been moved to the ImageUtils plugin. The helpers are still accessible via the editor.plugins.get( 'ImageUtils' ) namespace, for instance, editor.plugins.get( 'ImageUtils' ).insertImage( ... ).
  • The API of several functions or modules has been changed. Refer to the documentation to learn more. This list of changes includes:
  • The default user permissions have been changed. Now, by default, it is possible to remove other users' comment threads. This applies to non-real-time editing integrations and to real-time editing integrations using the writer role. This behavior can be changed using the Permissions plugin API (for non-real-time editing integrations) or by setting permissions for a given user in the user token (for integrations using CKEditor Cloud Services).

Features

  • code-block: When inserting a new code block, instead of applying the default language (the first in the dropdown view), the feature now re-uses the language of the last inserted code block. Closes #8722. (commit)
  • collaboration-core: Introduced the Permissions plugin. Now it is possible to manage the editor's level of access using permissions. See the user roles and permissions guide.
  • comments: Introduced the CommentsRepository#isReadOnly() method.
  • comments: Introduced the CommentThread#isRemovable property which is related to current permissions. By default, comment threads can now be removed by any user.
  • engine: Improved engine view matcher with new pattern syntax allowing to match attribute keys using regular expressions. Unified the pattern syntax between attributes, styles, and classes. Closes #9872. (commit)
  • engine: Added the special expand option to the StylesMap.getStyleNames() and view Element.getStyleNames() methods allowing to expand shorthand style properties. (commit)
  • engine: Introduced the batchType option in editor.data.set() which can be used to preserve the undo/redo steps and to add an additional item to the undo stack. Note that it will still replace the whole content and should not be used with real-time collaboration. (commit)
  • html-support: Introduced the General HTML Support feature. Closes #9970. (commit)
  • image: Introduced support for inline images in the editor content. Available out–of–the–box in all ready–to–use editor builds, inline images can be uploaded, styled, resized, and linked and complement the already supported block images. See the image feature overview guide to see inline images in action. For more information about breaking changes, migration path, and tips, check out the migration to v29.0.0 guide. (commit)
  • image: It should now be possible to define the dropdown menu as an object in the config.image.toolbar configuration. Closes #9340. (commit)
  • link: The feature functionality now covers both block and inline images. Closes #8871, #9017, #9167. (commit)
  • revision-history: Enabled the Revision History feature in multi-root editors.
  • source-editing: Introduced the Source editing feature for the predefined classic editor build. Closes #9647. (commit)

Bug fixes

  • clipboard: All toolbars shall be hidden when the widget is dragged and shown back when the drag ends. Closes #9566. (commit)
  • code-block: The code block feature should not allow for inserting inline widgets as its content. Closes #9567. (commit)
  • engine: Fixed the downcast conversion of collapsed markers at the conversion range boundary. Closes #8485. (commit)
  • engine: Added missing HTML block element names to the DomConverter.blockElements array. Closes #9801, #7863. (commit)
  • engine: Markers should not be split in view on the caret position. Closes #9513. (commit)
  • engine: FocusObserver should not force the view to render in random moments. See #9513. (commit)
  • engine: Disallowed inline images in the caption elements. Closes #9794. (commit)
  • image: The image should not resize to 100% if the resize command was overridden (canceled). (commit)
  • image: The side-aligned images should always have some max-width property to not take up the whole editor width. Closes #9342. (commit)
  • image: The floating block images, except for the side images, should be displayed side by side by default. Closes #9183. (commit)
  • image: An image should never overflow the widget boundaries while changing its size. Closes #9166. (commit)
  • image: The size label should be displayed above the image if it does not fit inside. See #9166. (commit)
  • image: An image caption placeholder text should not wrap or overflow. Closes #9162. (commit)
  • link: The link UI should be shown when clicking a linked inline widget. Closes #9607. (commit)
  • restricted-editing: The editor will not crash when a restricted area marker is removed. Closes #9650. (commit)
  • revision-history: The highlights for suggestions created in earlier revisions are now properly shown.
  • revision-history: Revision history will no longer crash if the table plugin has not been added to the editor.
  • widget: Selected inline widgets wrapped in an attribute in the view should create a fake selection. Closes #9524, #9521. (commit)

Other changes

  • build-decoupled-document: The editor document build now includes the ImageResize plugin. Closes #9507. (commit)
  • comments: The Comment#isRemovable property is now bound to CommentThread#isRemovable. Comment#isRemovable is set to true if the local user is the author, or if the comment thread is removable and the comment is the first comment in the thread.
  • core: Added several new icons for new image styles (see #8909). (commit)
  • easy-image: Removed the Image plugin dependency from the EasyImage plugin. Closes #9399. (commit)
  • engine: Fixed parsing leading HTML comments by HtmlDataProcessor.toView(). Closes #9861. (commit)
  • horizontal-line: New widgets will replace the selected block instead of being added next to it on insertion (see #9102). (commit)
  • image: The default image style is now called block, instead of full. Its label now reads "Centered image" and it is represented by the appropriate icon in the image toolbar. See #9545. (commit)
  • image: Turned the image utilities module into an editor plugin to allow sharing utilities outside the package. See #8871. (commit)
  • image: The image toolbar should be visible if the selection is placed inside an image caption. Closes #9136. (commit)
  • image: The image caption should be controlled using the toolbar button and a command for a better integration with image styles. Closes #8907. (commit)
  • real-time-collaboration: Made collaboration features compatible with inline images.
  • table: Added the .ck-table-bogus-paragraph CSS class to the in-cell pseudo-paragraph used for data tables for easier and safer styling. (commit)
  • ui: Added the class property to the SplitButtonView UI component. Closes #8909. (commit)
  • widget: Safeguarded the way the Widget plugin sets the fake selection. Closes #9580. (commit)
  • widget: Replaced the findOptimalInsertionPosition() helper with findOptimalInsertionRange() that will now attempt to replace selected blocks when inserting new widgets. Closes #9102. (commit)
  • Optimized icons. (commit)
  • Updated translations. (commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

New packages:

Major releases (contain major breaking changes):

Releases containing new features:

Other releases:

28.0.0 (2021-05-31)

Release highlights

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

This release introduces several new features:

There were also a few bug fixes:

Read more in the blog post: https://ckeditor.com/blog/revision-history-is-officially-live-ckeditor-5-v28.0.0-released/.

MAJOR BREAKING CHANGES

Note: Check out the Migration to CKEditor 5 v28.0.0 guide for more detailed information on how to upgrade to the current version.

MINOR BREAKING CHANGES ℹ️

  • engine: Styles definitions for the border:* property produced by the styles processor will now be merged as a single border:* property if all its properties (width, style and color) for all edges (top, right, bottom, left) are the same.
  • table: The TablePropertiesView and TableCellPropertiesView classes require an additional property in the object as the second constructor argument (options.defaultTableProperties for the table and options.defaultTableCellProperties for table cells).
  • table: The upcastBorderStyles() conversion helper requires a third argument called defaultBorder. The object defines the default border (width, color, style) properties.
  • table: The following conversion helpers: upcastStyleToAttribute(), downcastAttributeToStyle(), downcastTableAttribute() accept two arguments now (the conversion and the options objects). Previous usage: conversionHelper( conversion, /* ... */ ) should be replaced with conversionHelper( conversion, { /* ... */ } ).
  • table: Values for the borderColor, borderStyle, borderWidth, and padding model attributes are unified (to values produced by the editor itself) when upcasting the table or table cells if all sides (top, right, bottom and left) have the same values. Previously, the <table style="border: 1px solid #ff0"> element was upcasted to <table borderStyle="{"top":"solid","right":"solid","bottom":"solid","left":"solid"}" borderColor="{...}" borderWidth="{...}">. Now the object will be replaced with the string value: <table borderStyle="solid" borderColor="#ff0" borderWidth="1px">. The same structure is created when using the editor's toolbar. If border values are not identical, the object notation will be inserted into the model (as it is now).
  • table: The following classes require the second argument called defaultValue which is the default value for the command:
    • TableCellHorizontalAlignmentCommand,
    • TableCellVerticalAlignmentCommand,
    • TableCellBackgroundColorCommand,
    • TableCellBorderColorCommand,
    • TableCellBorderStyleCommand,
    • TableCellBorderWidthCommand,
    • TableCellHeightCommand,
    • TableCellPropertyCommand,
    • TableCellWidthCommand,
    • TableCellPaddingCommand,
    • TableAlignmentCommand,
    • TableBackgroundColorCommand,
    • TableBorderColorCommand,
    • TableBorderStyleCommand,
    • TableBorderWidthCommand,
    • TableHeightCommand,
    • TablePropertyCommand,
    • TableWidthCommand.

Features

  • Introduced the Revision History feature that allows the users to create, view and restore content versions.
  • engine: Introduced the SchemaItemDefinition#allowChildren property simplifying the defining of which other items are allowed inside this schema item definition. Closes #9261. (commit)
  • engine: Introduced the 'mouseover' and 'mouseout' events in the MouseObserver class. Closes #9338. (commit)
  • engine: The StylesProcessor reducer for the border:* CSS property was extended to be able to merge to the border:* property if all its properties (width, style and color) are specified. Otherwise, the border-(width|style|color) definition should be returned. Closes #9490. (commit)
  • table: Added support for table captions. Closes #3204. (commit)
  • table: Added support for the default table cell properties. Read more about it in the table feature guide. (commit)
  • table: Added support for the default table properties. Read more about it in the table feature guide. Closes #8502, #9219. (commit)

Bug fixes

  • comments: Fixed comments marker conversion that would fail if the comment marker is in a model document fragment.
  • engine: Added checks for the upcast attribute-to-marker converter before changing the data and consuming view elements. Part of #9779. (commit)
  • engine: Updated downcastwriter to allow setting up attribute element's priority to 0. Closes #5797. (commit)
  • engine: The model.deleteContent() method should not exclude a block widget at the end of the deletion range. (commit)
  • engine: The conversion upcast elementToAttribute() and attributeToAttribute() functions should not call the model.value() callback if the element will not be converted. Closes #9536. (commit)
  • engine: The renderer should not crash when removing multiple DOM nodes in the same render cycle. Closes #9534. (commit). Thanks to bendemboski!
  • html-embed: Allow rendering the <script> element inside the HTML preview. Closes #8326. (commit)
  • link: All text attributes starting their names with link will be removed when typing over a link or clicking at the end of the link. Closes #8462. (commit)
  • list: Fixed a crash when applying a spell checker suggestion to a word inside a list item. Closes #9325. (commit)
  • media-embed: Added support for more Google Maps URL formats (goo.gl/maps, maps.google.com, maps.app.goo.gl). Closes #2762. (commit)
  • track-changes: Fixed a crash happening in some scenarios when a block quote deletion suggestion was accepted.
  • track-changes: Fixed a crash with inline formatting suggestion in the content with a <br> tag.
  • ui Fixed arrow handling with the toolbar focused in case of RTL language UI. Closes #5585. (commit)
  • widget: Pasting plain text while the widget fake caret is active should not remove the widget. Closes #9477. (commit)
  • All non-DLL packages will re-export their modules instead of exporting the default object with these modules as the object entries. Closes #9134. (commit)

Other changes

  • comments: Improved performance for handling a huge number of annotations.
  • engine: In the marker-to-data conversion, attributes for marker boundaries will be used every time the marker starts or ends before or after the model element, instead of only where a text is not allowed by the model schema. Closes #9622. (commit)
  • export-pdf: The exportPdf command will not be disabled if the editor goes into read-only mode as it does not impact the data.
  • export-word: The exportWord command will not be disabled if the editor goes into read-only mode as it does not impact the data.
  • table: Border definitions produced by the TableProperties and TableCellProperties features will be merged into a group if possible. Instead of producing the border-(top|right|bottom|left):* property, the border:* definition will be returned. The same applies to the table cell padding. See #9490. (commit)
  • Updated translations. (commit, commit)
  • Added plugin metadata to packages. Introducing new guides for the metadata and the present HTML output of the features. Closes #6642. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

27.1.0 (2021-04-19)

Release highlights

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

This release introduces some new features:

There were also a few bug fixes:

Read more in the blog post: https://ckeditor.com/blog/ckeditor-5-v27.1.0-with-table-and-block-quote-nesting/.

MINOR BREAKING CHANGES ℹ️

  • engine: Added the new useFillerType() method in the DataProcessor interface. Classes based on this interface should implement useFillerType() to avoid errors.
  • upload: The asynchronous SimpleUploadAdapter#upload() method resolves to an object with normalized data including the urls object, which was only returned before. This may affect all integrations depending on the SimpleUploadAdapter uploading mechanism.

Features

  • alignment: Added support for the deprecated align attribute. Closes #9193. (commit)
  • block-quote: Added support for nested block quotes. Check the migration guide if you want to disable this behavior and disallow nesting quotes. Closes #9210. (commit)
  • engine: Introduced new "markedNbsp" block filler mode in DomConverter, in which <span data-cke-filler="true">&nbsp;</span> is inserted, to prevent leaking extra space characters into the data. (commit)
  • engine: Introduced useFillerType() in HtmlDataProcessor and XmlDataProcessor to switch between using marked and regular nbsp block fillers. Closes #9345. (commit)
  • engine: Enabled marker downcast for document fragments. Closes #9460. (commit)
  • image: Introduced the uploadComplete event in ImageUploadEditing that allows customizing the image element (e.g. setting custom attributes) based on the data retrieved from the upload adapter. Closes #5204. (commit)
  • media-embed: Introduced the config.mediaEmbed.elementName to allow setting semantic element name. Closes #9373. (commit)
  • table: Added support for nested tables. Check the migration guide if you want to disable this behavior and disallow nesting tables. Closes #3232. (commit)
  • upload: The upload adapters' asynchronous #upload() method resolves to an object with additional properties along with the urls hash. See more in #5204. (commit)

Bug fixes

  • clipboard: The selection was stuck and impossible to change in read-only mode. Closes #9372. (commit)
  • clipboard: The nested editable element should not be dragged. Closes #9370. (commit)
  • code-block: Markers created in or on code block element are now preserved after the document is loaded. Closes #9402. (commit)
  • core: The MultiCommand.execute() method prevents calling undefined commands. (commit)
  • engine: While setting attributes upon upcast conversion, do not override attributes that have already been set. The correct behavior is to keep the attributes applied by the deepest nodes in the view tree as, in most cases, the deepest node will have precedence (e.g. an inline style applied by the deepest node). Closes #8921. (commit)
  • track-changes: Accepting multiple "turn on/off list item" suggestions (created by multiple users) that should cause the same effect will have a correct result now.
  • watchdog: Removed imports from the ckeditor5 package. Closes #9315. (commit)
  • widget: Hide the selection handler in the nested widget if the outer widget is hovered or selected. Closes #9453, #8964. (commit)
  • The editor was not initialized with the empty data for config.initialData set to an empty string. Closes #8974. (commit)

Other changes

  • list: Introduced the config.forceValue option to ListCommand that forces turning list items on or off instead of toggling. (commit)
  • Updated translations. (commit)
  • real-time-collaboration: The Editor.create() method will throw an error if the initial websocket connection cannot be established.

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:

27.0.0 (2021-03-22)

Release highlights

We are happy to announce the release of CKEditor 5 v27.0.0 that contains security fixes for multiple packages: ckeditor5-engine, ckeditor5-font, ckeditor5-image, ckeditor5-list, ckeditor5-markdown-gfm, ckeditor5-media-embed, ckeditor5-paste-from-office, ckeditor5-widget. Even though this is a low impact issue and only affects the victim's browser with no risk of data leakage, an upgrade is highly recommended! You can read more details in the relevant security advisory and contact us if you have more questions.

The CKEditor 5 team would like to thank Yeting Li for recognizing and reporting these vulnerabilities.

Starting from this version, collaboration features release notes will be included in the CKEditor 5 changelog. Changes for the previous releases are available on https://ckeditor.com/collaboration/changelog/.

This release introduces some new features:

Read more in the blog post: https://ckeditor.com/blog/ckeditor-5-v27.0.0-with-drag-and-drop-text-part-language-and-bubbling-events/.

MAJOR BREAKING CHANGES ℹ️

Note: Check out the Migration to CKEditor 5 v27.0.0 guide for more detailed information on how to upgrade to this version.

  • clipboard: The inputTransformation event is no longer fired by the Clipboard plugin. Now the ClipboardPipeline plugin is responsible for firing this event (see #9128).
  • clipboard: The clipboardInput and inputTransformation events should not be fired or stopped in the feature code. The data.content property should be assigned to override the default content instead. You can stop this event only if you want to completely disable pasting or dropping of some content. Read more about the clipboard pipeline in the migration to v27.0.0 guide. See #9128.
  • Introduced bubbling of the view.Document events, similar to how bubbling works in the DOM. This allowed us to re-prioritize many listeners that previously had to rely on the priority property. However, it means that existing listeners that use priorities may now be executed at a wrong time. The listeners to such events should be reviewed in terms of when they should be executed (in what context/element/phase). Read more about event bubbling in the migration to v27.0.0 guide. See #8640.

Features

  • alignment: Introduced an option to use classes instead of inline styles. Closes #8516. (commit)
  • autoformat: Typing [x] will insert a checked to-do list item. Closes #8877. (commit)
  • clipboard: Implemented basic support for content drag and drop. Closes #9128. (commit)
  • clipboard: The contentInsertion event is fired from ClipboardPipeline to enable customization of content insertion (see #9128). (commit)
  • core: Created the universal caption icon. Closes #9196. (commit)
  • engine: Introduced bubbling of the view.Document events, similar to how bubbling works in the DOM. Bubbling allows listening on a view event on a specific kind of element, hence simplifying code that needs to handle a specific event for only that element (e.g. enter in blockquote elements only). Read more in the Event system deep-dive guide. Closes #8640. (commit)
  • engine: Introduced ArrowKeysObserver. See #8640. (commit)
  • language: Added support for setting the text part language. Closes #8989.

Bug fixes

  • engine: DataController#toView() should have a default value for the options parameter. Closes #9293. (commit)
  • highlight The remove highlight button now also gets disabled along with the main highlight command. Closes #9174. (commit)
  • utils: The EmitterMixin#listenTo() method is split into listener and emitter parts. The ObservableMixin decorated methods reverted to the original method while destroying an observable. (commit)

Other changes

  • clipboard: The paste as plain text feature was extracted to the dedicated PastePlainText plugin (see #9128). (commit)
  • engine: The mouseup event is fired by the MouseObserver (see #9128). (commit)
  • table: The mouseup event is no longer fired by the MouseEventsObserver from the @ckeditor/ckeditor5-table package (now handled by MouseObserver) (see #9128). (commit)
  • typing: The TwoStepCaretMovement feature is now using bubbling events. Closes #7437. (commit)
  • utils: Added the language.getLanguageDirection helper function allowing to determine the text direction based on the language code. (commit)
  • Optimized icons. (commit)
  • Updated English translations for the text part language feature. (commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

New packages:

Major releases (contain major breaking changes):

Releases containing new features:

Other releases:

26.0.0 (2021-03-01)

Release highlights

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

This release brings some new features:

There were also some important bug fixes and improvements:

Read more in the blog post: https://ckeditor.com/blog/ckeditor-5-v26.0.0-with-extensible-builds-inline-widget-styling-and-annotations-guides/.

Collaboration features

The CKEditor 5 Collaboration features changelog can be found here: https://ckeditor.com/collaboration/changelog.

MAJOR BREAKING CHANGES ℹ️

Note: Check out the Migration to CKEditor 5 v26.0.0 guide for more detailed information on how to upgrade to this version.

  • Several plugins are not loaded automatically as dependencies of other plugins anymore. From now on, they need to be provided by the editor creator manually (via config.plugins). This list includes:

    • The CloudServicesUploadAdapter plugin no longer loads CloudServices. Make sure to add CloudServices to the editor plugins when using the CloudServicesUploadAdapter or EasyImage features.
    • The EasyImage plugin no longer loads Image and ImageUpload. Make sure to add Image and ImageUpload to the editor plugins when using the EasyImage feature.
    • The CKFinder plugin no longer loads CKFinderUploadAdapter. The CKFinderEditing plugin no longer loads ImageEditing and LinkEditing features. Make sure to add CKFinderUploadAdapter, Image, and Link features to the editor plugins when using the CKFinder feature.
    • The Title plugin no longer loads Paragraph. Make sure to add Paragraph to the editor plugins when using the Title feature.
    • The ListEditing plugin no longer loads Paragraph. Make sure to add Paragraph to the editor plugins when using the List feature.
    • The LinkImageEditing plugin no longer loads ImageEditing. Make sure to add Image to the editor plugins when using the LinkImage feature.
    • The LinkImageUI plugin no longer loads Image. Make sure to add Image to the editor plugins when using the LinkImage feature.
    • The ExportPdf plugin no longer loads CloudServices. Make sure to add CloudServices to the editor plugins when using the ExportPdf feature.
    • The ExportWord plugin no longer loads CloudServices. Make sure to add CloudServices to the editor plugins when using the ExportWord feature.
  • cloud-services-core: The package was merged into @ckeditor/ckeditor5-cloud-services. All classes that were available in the @ckeditor/ckeditor-cloud-services-core package were moved to the @ckeditor/ckeditor5-cloud-services package. They should now be instantiated via factory methods on the CloudServicesCore plugin that is located in @ckeditor/ckeditor5-cloud-services. See #8811.

  • image: The following modules were moved (before → after):

    • image/image/imageinsertcommand~ImageInsertCommandimage/image/insertimagecommand~InsertImageCommand
    • image/imageresize/imageresizecommand~ImageResizeCommandimage/imageresize/resizeimagecommand~ResizeImageCommand
    • image/imageupload/imageuploadcommand~ImageUploadCommandimage/imageupload/uploadimagecommand~UploadImageCommand
  • list: The to-do list item toggle keystroke changed to Ctrl+Enter (Cmd+Enter on Mac).

  • list: The list/todolistcheckedcommand~TodoListCheckCommand module was moved to list/checktodolistcommand~CheckTodoListCommand.

  • Keystrokes with the Ctrl modifier will not be handled on macOS unless the modifier is registered as a forced one (for example: Ctrl!+A will not be translated to Cmd+A on macOS).

Features

  • cloud-services: Created the CloudServicesCore plugin that provides the base API for communication with CKEditor Cloud Services. (commit)
  • core: The PluginCollection class will allow requiring a plugin by name if it is provided in config.plugins or if it was already loaded. Closes #2907. (commit)
  • engine: ContainerElement can be marked as isAllowedInsideAttributeElement in order to allow wrapping it with attribute elements. This is useful, for example, for inline widgets. Other element types (UI, Raw, Empty) have this flag on by default but it can be changed via options.isAllowedInsideAttributeElement to false. Read more in the DowncastWriter#create*() methods documentation. Closes #1633. (commit)
  • font: Added support for the <font> element. Closes #8621. (commit)
  • utils: Added the forced modifier key (Ctrl!) for keystrokes that should not be mapped to Cmd on macOS. (commit)

Bug fixes

  • build-*: Switched the order of indent buttons in the default build configuration to "outdent, indent". Closes #8884. (commit)
  • engine: DowncastWriter should handle UIElements consistently while wrapping with and inserting them into attribute elements. Closes #8959. (commit)
  • engine: Words should not break on link boundaries. Closes #8852. (commit)
  • engine: Undoing the deletion of merged paragraphs should result in the original tree. Closes #8976. (commit)
  • engine: Pasting formatted single-line text over a widget should not split it into multiple paragraphs. Closes #8953. (commit)
  • engine: The editor placeholder should not disappear until typing started. Closes #8689. (commit)
  • engine: Fixed content is not restored on undo when multiple blocks and widgets were removed. Closes #8870. (commit)
  • font: Fixed the supportAllValues configuration for the font size and font family features to work with nested elements (tables). Closes #7965. (commit). Thanks to @dkrahn!
  • heading: In the Title plugin, the body placeholder is visible even when the body section is focused. See #8689. (commit)
  • image: The image caption placeholder is now hidden when focused. See #8689. (commit)
  • link: The Autolink plugin will no longer automatically match domains that only have a www subdomain followed with a top level domain, e.g. http://www.test. Closes #8050. (commit)
  • link: IP addresses should be converted into links by the autolink feature while typing. Closes #8881. (commit)
  • media-embed: The insertMediaEmbed command should be disabled if any non-media object is selected (see #8798). (commit)
  • table: The insertTable command should be disabled if any object is selected. Closes #8798. (commit)
  • utils: The editor keystrokes are no longer conflicting on macOS. Closes #5705. (commit)
  • The editor will show the placeholder even when focused. See #8689. (commit)

Other changes

  • Enabled creating builds that can be extended (with more plugins) without the need to recompile. This required splitting the project into the so-called DLL part and consumers of this DLL. Under the hood, the mechanism is based on webpack DLLs. This is the first part of the required changes and it contains the necessary breaking changes (see the "MAJOR BREAKING CHANGES" section above). For more information, see the DLL builds guide. Closes [#8395](ckeditor#8395). (commit)

  • cloud-services-core: All classes available in the @ckeditor/ckeditor-cloud-services-core package were moved to the @ckeditor/ckeditor5-cloud-services package. They should now be instantiated via factory methods on the CloudServicesCore plugin. Closes #8811. (commit)

  • engine: The KeyObserver should provide information about metaKey being pressed. (commit)

  • image: Add WebP format support to the inline pasting of images from source URLs. (commit)

  • image: Introduced the Image.isImageWidget() utility method. (commit)

  • list: The to-do list item toggle keystroke changed to Ctrl+Enter (Cmd+Enter on Mac). (commit)

  • widget: The checkSelectionOnObject function should be exported by the @ckeditor/ckeditor5-widget package (as @ckeditor/ckeditor5-widget/src/utils) (see #8798). (commit)

  • Updated translations. (commit)

  • Unified button and command naming conventions. Old names are available as aliases. Read more about these changes in the Code style guide. Closes #8033. (commit)

    Changes in toolbar buttons (before → after):

    • imageUploaduploadImage
    • imageResizeresizeImage
    • imageInsertinsertImage
    • imageResize:*resizeImage:*

    Changes in command names:

    • imageInsertinsertImage
    • imageUploaduploadImage
    • imageResizeresizeImage
    • forwardDeletedeleteForward
    • todoListCheckcheckTodoList

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Major releases (contain major breaking changes):

Releases containing new features:

Other releases:

25.0.0 (2021-01-25)

Release highlights

We are happy to announce the release of CKEditor 5 v25.0.0 that contains a security fix for the Markdown-GFM package. Even though this is a low impact issue and only affects the victim’s browser with no risk of data leakage, an upgrade is highly recommended! You can read more details in the relevant security advisory and contact us if you have more questions.

This release brings a few improvements and bug fixes:

Read more in the blog post: https://ckeditor.com/blog/CKEditor-5-v25.0.0-with-flexible-annotations-improved-text-blocks-handling-and-performance-fixes/

Collaboration features

The CKEditor 5 Collaboration features changelog can be found here: https://ckeditor.com/collaboration/changelog.

MINOR BREAKING CHANGES ℹ️

  • ui: Configuration passed to ToolbarView.fillFromConfig() will be stripped off of any leading, trailing, and duplicated separators ('|' and '-').

Features

  • autoformat: The horizontal line can be inserted by typing --- in an empty block. Closes #5720. (commit)
  • autoformat: Square brackets should convert the current line to a to-do list item. Closes #7518. (commit)
  • block-quote: The block quote should be split on the Backspace key press at the beginning of the block quote. Closes #7636. (commit)
  • engine: The new DataController#htmlProcessor property is initialized with the instance of the HtmlDataProcessor class and assigned to the DataController#processor property by default. (commit)
  • typing: An empty block element at the beginning of the limit element should be converted to a paragraph on the Backspace key press. Closes #8137. (commit)
  • ui: Implemented additional panel positions for the DropdownView class to address edge cases when the panel is cut due to small screen size (see #7700, #8669). (commit)
  • ui: Items baked into the editor bundles can now be removed from the toolbar by using config.toolbar.removeItems. Closes #7945. (commit)

Bug fixes

  • autoformat: Formatting will not be applied to snake_case_scenarios anymore. Closes #2388. (commit)
  • engine: The setData() helper in the dev-utils model should support the batchType option. Closes #7947. (commit)
  • export-pdf: The command should use the proper token if executed without providing a token in the command options.
  • export-word: The command should use the proper token if executed without providing a token in the command options.
  • horizontal-line: The horizontal line feature should require the Widget plugin. Closes #8825. (commit)
  • html-embed: Pasting an HTML embed widget from the clipboard will not clear its content anymore. Closes #8789. (commit)
  • html-embed: The HTML embed plugin should require the Widget plugin. Closes #8720. (commit)
  • html-embed: The save button should close the source mode even if there are no changes. Closes #8560. (commit)
  • image: The image plugins can be loaded in any order without causing an error. Closes #8270. (commit)
  • image: Allow pasting an image with a data URL scheme as the value of the src attribute if strict CSP rules are defined. Closes #7957. (commit)
  • image: Fixed the image resizer for images with links. Closes #8749. (commit)
  • image: An empty image caption should be hidden if the editor is in read-only mode. Closes #5168. (commit)
  • link: Removing a link from an image should not throw an error when link decorators are also present. Closes #8401. (commit)
  • list: The delete event handler is now listening on a higher priority to avoid being intercepted by the block quote and widget handlers. Closes #8706. (commit)
  • pagination: The pagination plugin should be disabled and a warning should be displayed if its configuration is missing.
  • page-break: Dropping an image on the page break widget should not crash the editor. Closes #8788. (commit)
  • page-break: The page break feature should require the Widget plugin. Closes #8825. (commit)
  • special-characters: The special characters dropdown should always fit into the viewport. Closes #7700, #8669. (commit)
  • table: The contents of nested tables are no longer going through upcasting. Closes #8393. (commit)
  • table: The table properties balloon should always follow the table when the alignment changes. Closes #6223. (commit)
  • theme-lark: The HTML embed text in a disabled input in Safari on iOS should have the same color as in other browsers. Closes #8320. (commit)
  • theme-lark: The dropdown button should not have an inner shadow in active state. Closes #8699. (commit)
  • ui: The "Show more items" toolbar button tooltip should not overflow the editor. Closes #8655. (commit)
  • ui: The '-' (new line) divider should not be rendered when grouping is enabled. Closes #8582. (commit)
  • word-count: The word count feature should consider a string with a special character as a single word. Closes #8078. (commit)

Other changes

  • engine: Optimized the Model#insertContent() function to use as few operations as possible to reduce the time needed to handle pasting large content into the editor. Closes #8054, #715. (commit)
  • engine: Improved performance of the Differ#getChanges() function. Closes #8188. (commit)
  • export-word: The timezone option should be passed to the Export to Word converter.
  • html-embed: A placeholder should be displayed if the HTML snippet is not previewable or empty. Closes #8435. (commit)
  • link: Improved how the fake selection marker for the link UI is created. Closes #8092. (commit)
  • mention: The conversion API reference is no longer passed down to the attribute properties. Closes #8370. (commit)
  • Updated translations. (commit, commit)

Released packages

Check out the Versioning policy guide for more information.

Released packages (summary)

Minor releases (contain minor breaking changes):

Releases containing new features:

Other releases:


The changelog contains entries for releases created since 2021. For browsing past releases, you can use the Release page.