Powerful rich text editor framework with a modular architecture, modern integrations, and features like collaborative editing.
This release is intended to improve compatibility with Vite and Vitest by correctly reporting CKEditor packages as ESM modules.
Please note that this release is based on v38.1.0
and is marked as alpha, which means that it is an experimental version and some unexpected results may occur when using it.
We appreciate any feedback that will help us improve the final form of the project.
min-height
should be correctly updated after switching between various annotations display modes.Check out the Versioning policy guide for more information.
Other releases:
The show blocks feature allows the content creators to visualize all block-level elements (except for widgets) by surrounding them with an outline and displaying their element name at the top-left corner of the box.
CKEditor 5 introduces an opt-in feature specifically for list handling during Word import or pasting. This feature influences how adjacent lists of the same type (either ordered or unordered) are processed. By default, such lists merge together, but you can prevent this.
To enable this feature, the AdjacentListsSupport
plugin needs to be added to your CKEditor 5 configuration. This allows you to maintain distinct lists, even when they are of the same type and positioned adjacently. However, please note that this feature only works with the DocumentLists
implementation. We are considering making it the default setting in future updates, based on user feedback and experience we collect. Let us know your opinion on the https://github.com/ckeditor/ckeditor5/issues/14478 issue.
We released a new guide showcasing how you can customize comments archive UI to display the archive panel in a custom container, to better fit your application layout.
We introduced a significant UX improvement that enhances the scrolling behavior of the Document Outline and Table of Contents features in the organization's documentation. Now, clicking on a heading in the Document Outline and Table of Contents displays a collapsed caret, which was previously located under the header section. Additionally, the fix improves other cases, such as proper scrolling when pressing enter while the editor is focused and scrolled away.
htmlAttributes
model property has been replaced by html*Attributes
, where the *
represents the name of the view element. Clients will need to modify their code accordingly by replacing all instances of htmlAttributes
with html*Attributes
for the respective view elements.AdjacentListsSupport
plugin to separate lists of the same type. Closes #12738. (commit)BodyCollection.bodyCollectionContainer
is now a public property. Closes #13928. (commit)Context
.config.ui.viewportOffset
configuration.View#scrollToTheSelection()
should respect the config.ui.viewportOffset
configuration and consider the geometry of a classic editor's toolbar to assure the caret is always visible to the user. Closes #13730. (commit)html*Attributes
from elements. See #14216. (commit)<style>
tag that comes with the table pasted from Google Sheets. Closes #14131. (commit)<div>
elements. Closes #13341. (commit)TrackChangesData
plugin.colorPaletteIcon
icon, which could result in a broken build. Closes #14205. (commit)Rect#getVisible()
should not consider ancestors when the target is an element with position: absolute
. Closes #14107. (commit)TrackChangesData
or revision history was used in setup with Context
if CloudServices
was set only in the Context
configuration (and not in the editor configuration).ViewTreeWalker
from ckeditor5-engine/src/index.ts
. Closes #14158. (commit)htmlAttributes
to html*Attributes
where *
represents the name of the view element. See #14216. (commit)Check out the Versioning policy guide for more information.
New packages:
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
This is a patch release that resolves an incorrect import issue that resulted in a "Cannot find module" error when using CKEditor 5 in a TypeScript environment.
Due to that and the CKEditor 5 versioning policy, we released all packages once again.
Check out the highlights of the original v38.0.0 release.
colorPaletteIcon
icon, which could result with a broken build. Closes #14205. (commit)Check out the Versioning policy guide for more information.
Other releases:
From version v38.0.0 onwards, all open-source installations of CKEditor (using it under the GPL terms) will carry a small “Powered by CKEditor” logo in the bottom-right corner of the editing area. This new logo links directly to the CKEditor website to strengthen the awareness of who’s powering and modernizing their rich text editor.
This change does not affect customers with commercial licenses. You can reach out to our Technical Support team using this form, if you have any questions.
You can read more about this change in the announcement on GitHub, the update guide, and the Managing the "Powered by CKEditor" logo guide.
Until v38.0.0, users were only able to choose from predefined colors in features like font color, font background color, table border color, etc. Starting from v38.0.0, they can also use a color picker to choose any possible color.
The color picker is now available in the font color and font background color features. In the upcoming versions (next month), it will be added to the table-related color features.
If you're interested in keeping the old behavior where the user can choose only from predefined colors, check out the update guide.
The latest update allows users to apply styling to tables and their elements, as well as to lists and their items (DocumentList
plugin). We've also fixed the behavior for links, so styles now only apply to the entire link. In addition, we've implemented a few bug fixes to address prior inconsistencies and issues.
trackFormatChanges
configuration parameter. Previously possible values were true
or false
. New possible values are: 'always'
, 'default'
(the old true
), and 'never'
(the old false
). Please update your configuration accordingly.MultiRootEditor#disableRoot()
and MultiRootEditor#enableRoot()
methods that allow switching only a particular root to a read-only state. (commit)Model#canEditAt( selectable )
method that checks whether a given selectable
is in an editable place in the model. It should be used instead of Editor#isReadOnly
in multi-root integrations as it acknowledges the root's read-only state. (commit)<td>
, <th>
, <caption>
, and <figcaption>
elements. Closes #13777. (commit)<figure>
element can now be styled. See #11590. (commit)mergeNestedSuggestions: boolean
(default true
). Introduced new values for the trackFormatChanges
configuration parameter. See the API reference for more details.attributes
are now correctly returned in CommentsRepository#getCommentThreads()
.licenseKey
property to the EditorConfig
interface. Closes #13906. (commit)editingDowncast
and dataDowncast
in conversion.for
. Closes #13750. (commit)CK_DEBUG
and istanbul
that break the Vite integration. See #13922. (commit)mousedown
event should not be canceled on a UI button press so it can be dragged. See #14033. (commit)Check out the Versioning policy guide for more information.
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
This is a hotfix release which addresses problems discovered after publishing code for our previous rc release. Please make sure to check the changelog for version 38.0.0-rc.0
below as well.
Check out the Versioning policy guide for more information.
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
From version v38.0.0 onwards, all open-source installations of CKEditor (using it under the GPL terms) will carry a small “Powered by CKEditor” logo in the bottom right corner of the editing area. This new logo links directly to the CKEditor website to strengthen the awareness of who’s powering and modernizing their rich text editor.
This change does not affect customers with commercial licenses. You can reach out to our Technical Support team, using this form, if you have any questions.
You can read more about this change in the announcement on GitHub, the update guide and the Managing the "Powered by CKEditor" logo guide.
Until v38.0.0 users were only able to choose from predefined colors in features like font color, font background color, table border color, etc. Starting from v38.0.0 they are now also able to use a color picker to choose any possible color.
The color picker is now available in font color and font background color features. In the coming versions (next month) it will also be added to the table-related color features.
If you're interested in keeping the old behavior where the user was able to choose only from predefined colors, check out the update guide.
trackFormatChanges
configuration parameter. Previously possible values were true
or false
. New possible values are 'always'
, 'default'
(the old true
) and 'never'
(the old false
). Please update your configuration accordingly.MultiRootEditor#disableRoot()
and MultiRootEditor#enableRoot()
methods that allow to switch only a particular root to a read-only state. (commit)Model#canEditAt( selectable )
method that checks whether a given selectable
is at an editable place in the model. It should be used instead of Editor#isReadOnly
in multi-root integrations as it acknowledges the roots read-only state. (commit)<td>
, <th>
, <caption>
and <figcaption>
elements. Closes #13777. (commit)<figure>
element can now be styled. See #11590. (commit)mergeNestedSuggestions: boolean
(default true
). Introduced new values for the trackFormatChanges
config parameter. Please see the API reference.attributes
are now correctly returned in CommentsRepository#getCommentThreads()
.licenseKey
property to the EditorConfig
interface. Closes #13906. (commit)editingDowncast
and dataDowncast
in conversion.for
. Closes #13750. (commit)CK_DEBUG
and istanbul
that breaks the vite
integration. See #13922. (commit)mousedown
event should not be canceled on a UI button press so it can be dragged. See #14033. (commit)Ctrl+A
) should now be enabled by default in an input field placed in a dropdown panel. Closes #13982. (commit)Check out the Versioning policy guide for more information.
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
We are excited to announce the release of a Productivity Pack for CKEditor 5. It includes five new premium features designed to boost productivity when working with the editor.
We continue to work on the multi-root editor. This release introduces compatibility with reversion history and pagination. We also made some minor improvements and bug fixes.
language: A text with language set is no longer styled as italic. To re-enable the previous behavior, add the following style definition to your CSS:
ck-content span[lang] { font-style: italic; }
SourceEditing.updateEditorData()
method public to allow saving source editing data independently of the UI. Closes #11008. (commit)Selection#getSelectedBlocks()
should ignore trailing blocks where no content is selected. The selection of such blocks is not visible to the content author and is usually there unintentionally. Closes #11585. (commit)<br>
instead of splitting a block. Closes #13321. (commit)ListPropertiesEditing
should not crash if there was a list in an image caption element. Closes #13858. (commit)EditorConfig#initialData
is mismatched with initial roots set in MultiRootEditor#create()
. (commit)targetRanges
property of the beforeInput
event data should be fixed to not cross the limit elements' boundaries. See #13583. (commit)TextPartLanguage
no longer styles text as italic when the language is set. Closes #12672. (commit)ts-loader
to esbuild-loader
when processing the TypeScript sources. It significantly reduces the build time when processing automated and manual tests or preparing snippets in the documentation. Closes #13643. (commit)MultiRootEditor
will first fire all detachRoot
events and then all addRoot
events if there are detached and added roots in the same batch. (commit)Check out the Versioning policy guide for more information.
New packages:
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
There was an invalid version of the ckeditor5-collaboration
dependency in the following packages:
Due to that and the CKEditor 5 versioning policy, we release all packages once again.
Check out the highlights of the v37.0.0 original release.
Check out the Versioning policy guide for more information.
Other releases:
We are excited to announce that CKEditor 5 has been completely migrated to TypeScript, making v37.0.0 the first major release with full TypeScript support. This migration has brought numerous improvements, including better code organization and enhanced stability:
Feel free to check our documentation to find out more about the Using CKEditor 5 with a TypeScript setup and read the migration guide.
We believe this release will be a significant milestone for CKEditor 5 and will provide a better development experience for our users. Please try it out and let us know your feedback by leaving a comment in this issue.
We are excited to introduce the Comments Archive feature. It provides a way to archive comments that are no longer relevant, reducing clutter and making it easier to focus on the most important feedback. Users can access the archive from the toolbar and use the comments archive dropdown to view and restore archived comments if necessary. This new feature will help simplify the feedback management process for our users.
In this release, we added official support for multi-root editor type and a new multi-root editor build. Additionally, we bring some fundamental improvements that make the multi-root editor more flexible and useful!
The multi-root editor is still a project in progress!
While the new predefined build is readily available, several features are not yet supported in the multi-root editor as of this release. These include: revision history, pagination, PDF/Word export, table resize, word count, HTML comments, full-page editing, title, mini-map, and the Cloud Services editor bundle. We will work on bringing support for these features in upcoming releases.
Other than that we look forward to sharing with you guides that will better explain how you can use these new improvements!
We expanded the General HTM Support feature with support for the <colgroup>
’s and <col>
’s attributes. We significantly refactored how these HTML elements are handled by the editor. They are now legit elements in the model instead of being kept as a <table>
attribute.
16.0.0
due to the end of LTS.@ckeditor/ckeditor5-watchdog
package is no longer available as a standalone DLL build. It is now included in the main ckeditor5-dll.js
build. See #13707.comment:modify_all
permission that will allow the user to edit or remove all comments.model.Writer#addRoot()
and model.Writer#detachRoot()
. Model roots can now be dynamically added to or detached from the document. All content gets removed from a detached root and new content cannot be inserted as long as the root is detached. Closes #13388. (commit)Differ.getChangedRoots()
which returns the roots added or detached since last the differ reset. Differ#isEmpty
and Differ#hasDataChanges()
will return true
if a root was added or detached. (commit)/ws
part in the WebSocket URL is now preserved.Renderer
should try to update existing DOM text nodes (instead of replacing them completely) so that external tools should not get lost if the watched DOM text node is removed and replaced with another one. Closes #13051. (commit)elementToStructure()
downcast helper should not skip attribute changes that happened with the modification of the children list. (commit)<colgroup>
, and <col>
elements should be preserved in the data. Closes #11479. (commit)NaN
in some scenarios. Closes #10776. (commit)MentionFeed
and ItemRenderer
types. Closes #13705. (commit)MentionFeedObjectItem
type. Closes #13550. (commit)DiscardSuggestionCommand
state, instead of AcceptSuggestionCommand
.EditorConfig#initialData
and EditorConfig#placeholder
options can now be set to Record<string, string>
where the keys are root names and the values are settings for the related roots. (commit)Context
, EditorWatchdog
, and ContextWatchdog
classes as static editor properties. Closes #13707. (commit)RootAttributeOperation
is now correctly handled by Differ
. Root attribute changes will be returned in Differ#getChangedRoots()
. (commit)model.Document#getRootNames()
now returns only attached roots by default. The includeDetached
parameter was introduced to enable returning detached roots as well. (commit)RootOperation
. (commit)model.DocumentFragment#isAttached
was introduced for compatibility reasons. It always returns false
. (commit)StyleUtils
plugin to make the style util functions accessible. Closes #13484. (commit)BaseSuggestionThreadView#canAccept
and #canDiscard
observable properties. These properties are bound with related suggestions commands. SuggestionThreadView#acceptButton.isEnabled
and #discardButton.isEnabled
are bound to #canAccept
an #canDiscard
.EditorUI#removeEditableElement()
. (commit)View#scrollToTheSelection()
helper allowing to scroll to the top of the boundary. Closes #13688. (commit)Observer#stopObserving()
to allow for proper removal of DOM editable elements from the editor. (commit)Check out the Versioning policy guide for more information.
New packages:
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
16.0.0
due to the end of LTS.@ckeditor/ckeditor5-watchdog
package is no longer available as a standalone DLL build. It is now included in the main ckeditor5-dll.js
build. See #13707.comment:modify_all
permission that will allow the user to edit or remove all comments.model.Writer#addRoot()
and model.Writer#detachRoot()
. Model roots can now be dynamically added to or detached from the document. All content gets removed from a detached root and new content cannot be inserted as long as the root is detached. Closes #13388. (commit)Differ.getChangedRoots()
which returns the roots added or detached since last the differ reset. Differ#isEmpty
and Differ#hasDataChanges()
will return true
if a root was added or detached. (commit)Renderer
should try to update existing DOM text nodes (instead of replacing them completely) so that external tools should not get lost if the watched DOM text node is removed and replaced with another one. Closes #13051. (commit)elementToStructure()
downcast helper should not skip attribute changes that happened with the modification of the children list. (commit)<colgroup>
, and <col>
elements should be preserved in the data. Closes #11479. (commit)NaN
in some scenarios. Closes #10776. (commit)MentionFeed
and ItemRenderer
types. Closes #13705. (commit)MentionFeedObjectItem
type. Closes #13550. (commit)DiscardSuggestionCommand
state, instead of AcceptSuggestionCommand
.EditorConfig#initialData
and EditorConfig#placeholder
options can now be set to Record<string, string>
where the keys are root names and the values are settings for the related roots. (commit)Context
, EditorWatchdog
, and ContextWatchdog
classes as static editor properties. Closes #13707. (commit)RootAttributeOperation
is now correctly handled by Differ
. Root attribute changes will be returned in Differ#getChangedRoots()
. (commit)model.Document#getRootNames()
now returns only attached roots by default. The includeDetached
parameter was introduced to enable returning detached roots as well. (commit)RootOperation
. (commit)model.DocumentFragment#isAttached
was introduced for compatibility reasons. It always returns false
. (commit)ckeditor5-real-time-collaboration
to TypeScript.StyleUtils
plugin to make the style util functions accessible. Closes #13484. (commit)BaseSuggestionThreadView#canAccept
and #canDiscard
observable properties. These properties are bound with related suggestions commands. SuggestionThreadView#acceptButton.isEnabled
and #discardButton.isEnabled
are bound to #canAccept
an #canDiscard
.EditorUI#removeEditableElement()
. (commit)View#scrollToTheSelection()
helper allowing to scroll to the top of the boundary. Closes #13688. (commit)Observer#stopObserving()
to allow for proper removal of DOM editable elements from the editor. (commit)Check out the Versioning policy guide for more information.
New packages:
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases: