Powerful rich text editor framework with a modular architecture, modern integrations, and features like collaborative editing.
We are happy to announce the release of CKEditor 5 v41.3.0.
CKEditor 5's latest update brings a new premium feature: the Multi-level lists feature. It allows for easy creation and modification of numbered lists with counters (1., 1.1., 1.1.1
), crucial for clear referencing and hierarchical organization in complex documents. The feature ensures compatibility with Microsoft Word. When lists with such formatting are pasted to the editor, the numbering format and counters are retained.
No more breaking numbering of lists when they are pasted from Office. Previously whenever a list were split by paragraphs, the counter started again from 1. With our latest improvement, the counter is correctly preserved. Moreover, if you use Paste from Office Enhanced ⭐️, the paragraphs will be merged into list items, to ensure proper, semantic content.
⚠️ If you use the LegacyList
plugin to prolong the migration to the new list implementation, bear in mind that from this release Paste from Office stops working for the lists' implementation you are using. Migrate to List
to maintain pasting lists functionality.
The menu bar is a user interface component popular in large editing desktop and online packages. It gives you access to all features provided by the editor, organized in menus and categories and improves usability of the editor, keeping the toolbar can be simple and tidy. This is especially welcome in heavily-featured editor integrations.
The current release brings this battle-hardened solution to CKEditor 5! The menu bar can easily be enabled in selected editor types, comes with a handy features preset and is also highly configurable.
--ck-color-image-caption-highligted-background
has been renamed to --ck-color-image-caption-highlighted-background
. Please make sure to update your custom CSS accordingly..ck-user__marker-tooltip
CSS class to customize usernames instead.config.ai.openAI.requestParameters
or config.ai.aws.requestParameters
are set, the set value will fully overwrite the default value. Most importantly, if you do not specify some properties in requestParameters
they will not be set to default. For example, if you set openAI.requestParameters
to { max_tokens: 1000 }
, the request parameters will be set exactly to that object. Make sure that you pass all necessary parameters in requestParameters
. Important: this change happened in version 41.2.0 but has not been previously announced in the changelog.FileDialogButtonView
class has been moved from ckeditor5-upload
to ckeditor5-ui
. Please update your import paths accordingly (was: import { FileDialogButtonView } from 'ckeditor5/src/upload.js';
, is: import { FileDialogButtonView } from 'ckeditor5/src/ui.js';
).ButtonView
in ListItemView
(--ck-list-button-padding
) has been reduced for better readability. This affects the presentation of various editor features that use this type of UI (headings, font size, font family, etc.). You can restore the previous value by setting --ck-list-button-padding: calc(.2 * var(--ck-line-height-base) * var(--ck-font-size-base)) calc(.4 * var(--ck-line-height-base) * var(--ck-font-size-base));
in your custom styles sheet.[tabindex]
DOM attribute support to the InputBase
class. (commit)[aria-label]
attribute support to the InputBase
class. (commit)keyCodes
, getEnvKeystrokeText()
). (commit)collection-add-item-invalid-index
error in some scenarios when some comment threads were resolved and some were unlinked (removed from content).change:data
event. Closes #15943. (commit)EditorWatchdog
will no longer crash when the application is refreshed before completing the editor initialization or destruction. Closes #15980. (commit)tab
key support should be disabled for cycling nested editable elements inside the editor. Closes #15506. (commit)Check out the Versioning policy guide for more information.
New packages:
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
We are happy to announce the release of CKEditor 5 v41.3.0-alpha.3.
This release is intended to improve the build speed in bundlers when using the ckeditor5
npm package and to improve typings for translations.
For instructions on how to use the new installation methods, see the v41.3.0-alpha.0 Release Notes.
For more general information about the new installation methods, see the announcement post.
Check out the Versioning policy guide for more information.
New packages:
Other releases:
We are happy to announce the release of CKEditor 5 v41.3.0-alpha.4.
This release is intended to improve the build speed in bundlers when using the ckeditor5
npm package and to improve typings for translations.
For instructions on how to use the new installation methods, see the v41.3.0-alpha.0 Release Notes.
For more general information about the new installation methods, see the announcement post.
Check out the Versioning policy guide for more information.
New packages:
Other releases:
We are happy to announce the release of CKEditor 5 v41.3.0-alpha.2.
This release is intended to improve the build speed in bundlers when using the ckeditor5
npm package and to improve typings for translations.
For instructions on how to use the new installation methods, see the v41.3.0-alpha.0 Release Notes.
For more general information about the new installation methods, see the announcement post.
Check out the Versioning policy guide for more information.
New packages:
Other releases:
We are happy to announce the release of CKEditor 5 v41.2.1.
ImageResize
plugin before ImageBlock
or ImageInline
caused the editor to crash. (commit)Check out the Versioning policy guide for more information.
Other releases:
We are happy to announce the release of CKEditor 5 v41.3.0-alpha.1.
This release is intended to address various styling issues we have found with the new installation methods.
For instructions on how to use the new installation methods, see the v41.3.0-alpha.0 Release Notes.
For more general information about the new installation methods, see the announcement post.
Check out the Versioning policy guide for more information.
Other releases:
We are happy to announce the release of CKEditor 5 v41.3.0-alpha.0.
This release is intended for testing new installation methods announced in this post.
It contains two builds that can be found in the dist
folder.
The first build is a browser build that can be run directly in the browser without a build step. It contains the files index.browser.js
and index.browser.css
. For editor- or content-only styles, use the editor-index.browser.css
or content-index.browser.css
files.
<link rel="stylesheet" href="<PATH_TO_THE_CKEDITOR5>/dist/index.browser.css">
<script type="importmap">
{
"imports": {
"ckeditor5": "<PATH_TO_THE_CKEDITOR5>/dist/index.browser.js",
"ckeditor5/": "<PATH_TO_THE_CKEDITOR5>/",
}
}
</script>
<script type="module">
import { ClassicEditor, Essentials, Paragraph } from 'ckeditor5';
import translations from 'ckeditor5/dist/translations/pl.js';
await ClassicEditor.create( document.querySelector( '#editor' ), {
plugins: [
Essentials,
Paragraph,
],
toolbar: {
items: [ 'undo', 'redo' ]
},
translations
} );
</script>
The second build is an NPM build. It includes the files index.js
and index.bundled.css
. For editor- or content-only styles, use the editor-index.bundled.css
or content-index.bundled.css
files.
import { ClassicEditor, Essentials, Paragraph } from 'ckeditor5';
import translations from 'ckeditor5/dist/translations/pl.js';
import 'ckeditor5/dist/index.bundled.css';
await ClassicEditor.create( document.querySelector( '#editor' ), {
plugins: [
Essentials,
Paragraph,
],
toolbar: {
items: [ 'undo', 'redo' ]
},
translations
} );
Please note that this release is based on v41.2.0
and is marked as alpha, which means that it is an experimental release and some unexpected results may occur when using it.
We appreciate any feedback that will help us improve the final form of the project.
Check out the Versioning policy guide for more information.
Other releases:
We are happy to announce the release of CKEditor 5 v41.2.0.
Since the beginning, collaboration has been a focal point for CKEditor 5. This release brings another highly anticipated improvement for the popular Comments feature!
Now, when you cut-paste, copy-and-paste, or drag around a piece of content that includes comments, the comments will be retained. The improvement allows users to restructure their content without losing the information or discussion available in the comments.
By default, the comments are retained only on cut-and-paste and drag-and-drop actions. You can configure this behavior to be applied also on copy-paste or you can turn it off.
CKEditor 5 v41.2.0 introduces the Accessibility Help Dialog. With the hit of Alt/Option+0 in the editor, users can now access the full list of available keyboard shortcuts. A toolbar button is available as well. This feature further improves the editor's usability and accessibility. It allows all users to navigate and operate CKEditor 5 more efficiently, thereby promoting a more inclusive user experience.
The Accessibility Help Dialog is enabled by default in the Essentials
plugin pack, making it available straight away in most integrations. If your editor build does not use the Essentials
pack, make sure that you add the AccessibilityHelp
plugin in your configuration.
We would also like to mention that there are further accessibility support improvements in the pipeline, so keep your eyes peeled for news in the upcoming months.
tel
or sms
, by introducing the link.allowedProtocols
configuration property. After setting up your custom protocols, your users will easily navigate to specific resources from the inside of the editor.comments.copyMarkers
configuration property to an empty array.BlockToolbar
and BalloonToolbar
toolbars are now filled on the EditorUIReadyEvent
instead of Plugin#afterInit()
.config.ai.openAI.requestParameters
or config.ai.aws.requestParameters
are set, the set value will fully overwrite the default value. Most importantly, if you do not specify some properties in requestParameters
they will not be set to default. For example, if you set openAI.requestParameters
to { max_tokens: 1000 }
, the request parameters will be set exactly to that object. Make sure that you pass all necessary parameters in requestParameters
.comments.copyMarkers
configuration property to learn more.editor.accessibility
namespace to the base Editor
class as a container for accessibility-related features and systems. See #1014. (commit)link.allowedProtocols
configuration property. Closes #14304. (commit)revisionHistory.requireRevisionName
configuration option which makes the revision name required.AccessibilityHelp
plugin that brings a dialog displaying keyboard shortcuts available in the editor. Closes #1014. (commit)ai.openAI.requestParameters
configuration will no longer be overwritten by default parameters.ckboxImageId
attribute. Closes #15581. (commit)translations
from the defaultConfig
if they were not provided in the create
method. Closes #15902. (commit)FontBackgroundColor
plugin is enabled. It should also be able to preserve a partly defined style. Closes #15757, #10399. (commit)ImageInsertViaUrlUI
so it does not depend on the configured plugins order. Closes #15869. (commit)model-position-before-root
error thrown sometimes by the Pagination
plugin, especially when loading big content in real-time-editing integration.TableUtils#getColumns()
should exclude elements other than tableCell
(for example, marker elements) while counting. (commit)BlockToolbar
and BalloonToolbar
plugins order should not matter when it comes to registering toolbar items. Closes #15581. (commit)keyCodes
object should contain correct codes for keys related to punctuation, brackets, braces, etc. See #1014. (commit)DataApiMixin
and moved the setData()
and getData()
methods directly to the Editor
class. (commit)AccessibilityHelp
plugin by default. See #1014. (commit)max-width
set to 200px
by default. (commit)data-cke-tooltip-text
is removed while the tooltip is open. (commit)data-cke-tooltip-position
changes while the tooltip is open. (commit)Check out the Versioning policy guide for more information.
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
We are happy to announce the release of CKEditor 5 v41.1.0.
value
of the "class"
and "style"
attribute conversion is handled in the attributeToAttribute()
upcast helper. Now while not providing the attribute's value
to conversion the helper accepts and consumes all values. Previously those values were not consumed and left for other converters to convert. Note that you should use the classes
, and the styles
fields for the fine-tuned conversion of those attributes instead of a catch-all "style"
and "class"
specified in the key
field.colorSelectorView
property will no longer be accessible from the ColorUI
plugin in the @ckeditor/ckeditor5-font/src/ui/colorui.ts
.sourceEditing.allowCollaborationFeatures
configuration flag to true
. If you want to use both these features, please read a new guide discussing the risks and add the flag to your configuration..ck-user_me
CSS class to customize or remove the highlight.presenceList.displayMe
configuration flag. When set to false
, the local user ("me" user) will not be displayed in the presence list. Defaults to true
.style
and class
attributes conversion should work with attributeToAttribute()
. Closes #4517. (commit)sourceEditing.allowCollaborationFeatures
configuration flag that suppresses the error and allows to use both features together. Closes #15764. (commit)Check out the Versioning policy guide for more information.
Minor releases (contain minor breaking changes):
Other releases:
We are happy to announce the release of CKEditor 5 v41.0.0.
We continue to improve the way the editor displays the formatting suggestions.
This release includes integration of the list features with the new suggestions behavior. All list-related suggestions are now visible in the editor content.
The dialogs finally come to the CKEditor 5 UI!
Some users found using the find and replace feature through a dropdown inconvenient as it might have covered the content, including the searched text. We listened to these voices and the find and replace UI will now be using a dialog.
If you liked the earlier user interface of this feature, you can still display it inside a dropdown by setting the config.findAndReplace.uiType
configuration option.
We have also introduced a dialog in the AI Assistant feature. Displaying the AI Assistant inside a balloon came with many UX hiccups, especially when you selected large content. It works great now.
The dialogs are now a part of the CKEditor 5 UI library so you can use them, too! Read the documentation to learn how to display your custom features inside dialogs and modals.
No more selecting, deleting, retyping with Caps Lock for long legal preambles. The case change plugin enables users to easily change text cases, applying UPPERCASE, lowercase, and Title Case. This feature simplifies text formatting by allowing quick alterations with a single click or a keyboard shortcut.
As a key component of CKEditor 5's Productivity Pack, this plugin complements and enhances the suite's editing capabilities, offering a practical tool for efficient text manipulation.
We start the new year with improvements in the new installation methods project. This includes an upgrade to the latest TypeScript version, ensuring enhanced type safety.
A key part of this release is the resolution of ECMAScript Module (ESM) compliance issues. We updated all packages and their definitions to be fully ESM-compliant. This ensures smoother integration and compatibility across various development environments.
We have also renamed exports of several classes, interfaces, and helpers to eliminate naming conflicts in the code for the new bundle that will appear later this year.
Take a look at the RFC to see what is coming: https://github.com/ckeditor/ckeditor5/issues/15502.
This release marks a significant change in the list feature. As announced before, we are phasing out the older implementation of the List
plugin, originally designed for plain lists. We are directing the development efforts towards the more advanced list v2 feature (formerly named DocumentList
). This change aims to eliminate confusion for integrators and optimize the number of list functionalities.
The DocumentList
plugins, which represent the advanced lists v2 feature, will now be available under the standard name List
. This change enables document lists across all integrations, with the new version ensuring no loss of features from the older one.
We renamed the previous List
plugins to LegacyList
, providing a fallback option for integrators after the update. We will keep the LegacyList
available for a couple of releases to lower the migration impact.
The existing DocumentList
plugins were replaced with aliases. Integrations using the older DocumentList
will continue to function without any need for configuration changes for a couple of releases. Users will be notified via console warnings to consider updating their configurations.
Additionally, we completely removed the ListStyle
plugin, which has been deprecated for a while. This change aligns with our goal to simplify the list features.
Refer to the update guide to learn more about these changes.
config.findAndReplace.uiType
configuration option. See #14973.AdjacentListsSupport
plugin is moved from the documentlist
directory to the list
directory. See #14942.UploadAdapter
class to CKFinderUploadAdapter
. See #15511.browseFiles
icon to the core
package and added it to the icons
object exported from it. See #15511.browseFiles
icon to the core
package and added it to the icons
object exported from it. See #15511.codeBlock
icon to the core
package and added it to the icons
object exported from it. See #15511.View
class to EditingView
. See #15511.findOptimalInsertionRange
function to the Schema
class as a new method. See #15511.heading1
, heading2
, heading3
, heading4
, heading5
, and heading6
icons to the core
package and added them to the icons
object exported from it. See #15511.horizontalLine
icon to the core
package and added it to the icons
object exported from it. See #15511.html
icon to the core
package and added it to the icons
object exported from it. See #15511.indent
and outdent
icons to the core
package and added them to the icons
object exported from it. See #15511.Legacy
(including directory names): List
-> LegacyList
, ListProperties
-> LegacyListProperties
, TodoList
-> LegacyTodoList
, ListEditing
-> LegacyListEditing
, ListUtils
-> LegacyListUtils
, ListPropertiesEditing
-> LegacyListPropertiesEditing
, TodoListEditing
-> LegacyTodoListEditing
. See #14942.Document
(including directory names): DocumentList
-> List
, DocumentListProperties
-> ListProperties
, TodoDocumentList
-> TodoList
, DocumentListEditing
-> ListEditing
, DocumentListUtils
-> ListUtils
, DocumentListPropertiesEditing
-> ListPropertiesEditing
, DocumentListPropertiesUtils
-> ListPropertiesUtils
, TodoDocumentListEditing
-> TodoListEditing
. See #14942.ListStyle
plugin was removed since it had been deprecated for a while. Use the ListProperties
plugin instead. See #14942.bulletedList
, numberedList
, and todoList
icons to the core
package and added them to the icons
object exported from it. See #15511.table
icon to the core
package and added it to the icons
object exported from it. See #15511.colorPalette
, previousArrow
, and nextArrow
icons to the core
package and added them to the icons
object exported from it. See #15511.--ck-z-modal
CSS custom property was renamed to --ck-z-panel
. We recommend updating custom CSS and integrations that use this custom property to avoid presentation issues. See #14973.focusables
) required by FocusCycler#constructor()
must only contain views implementing the FocusableView
interface. Failing to do so will result in a TypeScript error. If your custom code creates FocusCycler
instances, make sure that all views passed in focusables
implement the focus()
method. See #14973.FormHeaderView
component was increased. This change affects the look of the find and replace and table styling features as well as custom user interfaces that use this component. See #14973.AriaLiveAnnouncerPoliteness
changed (previously enum
, now a constant object
). See #14973.#next
and #previous
properties of a FocusCycler
will now point to the same view if there is only one focusable view (previously null
). This change may affect integrations that use this helper to manage advanced focus navigation in dynamic UIs. See #14973.undo
and redo
icons to the core
package and added them to the icons
object exported from it. See #15511.Position
interface to DomPoint
. See #15511.Dialog
plugin that allows for displaying dialog windows in the UI of the editor. Learn more about using dialogs. Closes #14973. (commit)AWSTextAdapter
should be able to handle many data objects returned in one update (chunk).AWSTextAdapter
should be able to handle data objects that were split between many updates (chunks).LinkImage
plugin loaded before Image
, which ends with extending the schema definitions before they registering them. Closes #15617. (commit)TextareaView
component should correctly update its size if its value changes while it is invisible. See #14973. (commit)Schema.addChildCheck
and Schema.addAttributeCheck
callbacks more specific. See #15290. (commit)Document
prefix was removed. The old list implementation was prefixed with the Legacy
keyword. Aliases were introduced (DocumentList
, DocumentListProperties
, TodoDocumentList
) for backward compatibility but those are marked as deprecated and log a warning in the browser console. Closes #14942. (commit)FocusCycler#focusables
collection should only contain FocusableView
instances. See #14973. (commit)#next
and #previous
properties of a FocusCycler
instance should point to the same view if there is only one focusable view registered in the focusables
collection. See #14973. (commit)Check out the Versioning policy guide for more information.
New packages:
Major releases (contain major breaking changes):
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases: