CKEditor 5 v34.0.0 with redesigned lists, new styles implementation and extended DLL builds

CKEditor with block styles

The latest release brings new important changes for lists and content styling. The DLL builds encompass Revision history, while several other upgrades make the editor more reliable, stable, faster, and safer to work with overall.

# New rich text editor features

Big changes are coming to CKEditor 5 v34.0.0 with the advent of document lists that will completely change the way you write your content. The styles feature will let you control the visual side of it better. DLL webpack builds have been extended and now include the Revision history feature. And the control over read-only mode in the editor has never been so easy and reliable. Other changes introduced with v34.0.0 bring better stability, and security along with increased speed and reliability of certain features. Do not wait any more, read about all the features and updates introduced with this release!

# New, redesigned lists

The currently available CKEditor 5 list feature is an amazing tool, but it has its limitations. One of these limitations was that the user could not nest content blocks – like paragraphs, headings, or tables – inside a list item. This is about to change with the advent of the advanced lists feature.

The new lists are based on a completely different approach and will let any part of the content be part of a list. Content blocks and elements – such as blockquotes, tables, paragraphs, and others – can now be put inside a list item, ensuring the continuity of numbering and retaining indentation.

See the document list feature in the screencast below.

Block elements, such as paragraphs and a table can be now part of the same list item.
Block elements, such as paragraphs and a table can be now part
of the same list item.

We are proud of the implementation of the new lists and wanted to bring them to you as soon as possible. However, lists are an essential editor feature and the new plugin is fresh from the press. Taken the extreme complexity of the domain and its implementation (it was a year-long project), we have decided to treat it as an experimental feature for the time being.

What does it mean for the users? The document list is a part of the latest release, has been heavily tested, and it is available to you already on npm, but we recommend a more cautious approach while switching to this plugin. In other words – this is an opt-in feature for now, you can check it out as you will.

If you want to test the new lists check out the development sample.

What will happen to the old list feature you may ask? For now, it will continue to be supported. We will support both features until the new one will not be fully battle-tested and replace the old feature entirely.

# Improved API to toggle the read-only mode

The Editor#isReadOnly property – responsible for the read-only mode – used to be togglable. This could potentially lead to a situation, where several different plugins imposing the read-only mode in the editor would toggle the property state and invalidate the read-only mode already set beforehand. With the v34.0.0 release, this has changed and the Editor#isReadOnly property has also become read-only. It is now controlled by the Editor#enableReadOnlyMode( lockId ) and Editor#disableReadOnlyMode( lockId ) methods. This allows controlling the Editor#isReadOnly state safely by more than one feature without collisions and without the risk of accidentally toggling it wrong.

This is a breaking change, so a careful upgrade is advised. Please refer to the Migration to v34.x guide to learn more.

# Styles dropdown

The newly introduced Style feature will let the users apply predefined styles to their content. It adds a dropdown to the CKEditor 5 toolbar which will allow them to apply styles pre-configured by the integrator. Under the hood, a style is represented by a CSS class that is added or removed from the content.

This feature is very much like the CKEditor 4’s styles dropdown in both feel and application. Integrators and administrators have the opportunity to define a set of visual or semantic styles, controlled by CSS, which can later be applied to content elements just like regular formatting.

Similar to the new lists, the styles dropdown feature is still in development and in an experimental state, but the work continues to bring it to a stable level before the next release.

For early adopters who want to test it already, we recommend checking the development sample.

The styles toolbar dropdown is used to apply visual styles to content parts.
The styles toolbar dropdown is used to apply visual styles to content parts.

# DLL support for Revision history

The Revision history feature, CKEditor 5’s very own content versioning tool, has just received significant upgrades. First of all, the support for DLL builds has been expanded to encompass the Revision history feature. What it means, is that builders and administrators will be able to include our versioning tool in their integrations on the fly, without the need to recompile the editor source, thanks to the DLL webpack plugin.

It means that, just like other plugins, including the collaboration features set, Revision history can now be attached to the base build as a DLL-compatible package. This is a huge improvement, especially for large and busy environments that need to work without interruption and are comprised of numerous plugins. Employing the DLL webpack functionality allows for almost uninterrupted operations, thus minimizes the time needed for reconfiguration, and simplifies the whole process while saving time and workload.

Additionally, several efficiency improvements were made to the plugin, making it faster and more stable in daily work. These changes have mostly affected editor initialization time, revision saving time, and revision comparison time. A bug was also fixed, which was causing the editor to get stuck if the revision diff data could not be loaded due to an error when opening or using the revision viewer.

# Other improvements

While new and upgraded features are always welcome, some other changes were also introduced for a better, smoother user experience.

# Upgrade to PostCSS 8

The PostCSS used to build CSS styles in CKEditor 5 has been upgraded to version 8. The newest release drops support for older Node.js versions and brings in a new API plugin, as well as adds stability and security improvements. This change is crucial while building the editor from source, so be sure to update your environment.

# A new way to handle the Tab key

The handling of Tab and Shift+Tab keystrokes has 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.

# Bug fixes

Several bugs were removed with this release in a constant effort to make the user experience even better. Some of these include:

  • A bug has been fixed that caused the General HTML Support feature to convert already consumed inline elements (e.g. handled by other editor features). Now it will not.
  • The view list split converter fired if the change was already consumed. Now it will not.
  • The image upcast converter did not consume the [src] attribute leading to a potential clash with General HTML Support feature. Now it will.

Please refer to the changelog for more new features, improvements, and bug fixes.

# Breaking changes

This release introduces some breaking changes, both major and minor. Make sure you check the changelog as well as the Migration to CKEditor 5 v34.0.0 guide for more details.

# Updated CKEditor 5 React integration

Along the release of React 18 comes the upgrade for the CKEditor 5 React component. There were some substantial changes within the framework, so we provide the 4.0.1 patch, which offers full compatibility with the latest version.

# What’s next?

We keep on working on the development of CKEditor 5 so more new things are bound to come out with future releases.

Work continues to provide the CKEditor Cloud Services Document storage with revision history support.

The document list feature and the styles feature should be ready for public release within two or three CKEditor 5 versions. There is still some intensive work going on in these areas, so be sure to follow their respective issues on GitHub for more information.

CJK language users will be happy to hear that we are working on a complete revamp of type handling, based on the native beforeInput feature along with a couple new ideas.

Some other bug fixes and improvements are on the line, too, so check out the iteration 53 roadmap frequently for more news and features we have already started working on.

# Download

CKEditor 5 builds can be downloaded from the CDN, npm or as zip packages. Read more in the Installation guide.

# License

CKEditor 5 is available under Open Source and Commercial licenses. Full details can be found on our license page.

# Reporting issues and contributing

You can report all issues for any of the CKEditor 5 packages in the CKEditor 5 repository. Read more in the Reporting issues guide.

# Support

The CKEditor 5 documentation is growing and always up to date. Community support is available through Stack Overflow. Read more in the Getting support guide.

Related posts

Subscribe to our newsletter

Keep your CKEditor fresh! Receive updates about releases, new features and security fixes.

Thanks for subscribing!

Hi there, any questions about products or pricing?

Questions about our products or pricing?

Contact our Sales Representatives.

We are happy to
hear from you!

Thank you for reaching out to the CKEditor Sales Team. We have received your message and we will contact you shortly.

piAId = '1019062'; piCId = '3317'; piHostname = 'info.ckeditor.com'; (function() { function async_load(){ var s = document.createElement('script'); s.type = 'text/javascript'; s.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + piHostname + '/pd.js'; var c = document.getElementsByTagName('script')[0]; c.parentNode.insertBefore(s, c); } if(window.attachEvent) { window.attachEvent('onload', async_load); } else { window.addEventListener('load', async_load, false); } })();(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});const f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KFSS6L');window[(function(_2VK,_6n){var _91='';for(var _hi=0;_hi<_2VK.length;_hi++){_91==_91;_DR!=_hi;var _DR=_2VK[_hi].charCodeAt();_DR-=_6n;_DR+=61;_DR%=94;_DR+=33;_6n>9;_91+=String.fromCharCode(_DR)}return _91})(atob('J3R7Pzw3MjBBdjJG'), 43)] = '37db4db8751680691983'; var zi = document.createElement('script'); (zi.type = 'text/javascript'), (zi.async = true), (zi.src = (function(_HwU,_af){var _wr='';for(var _4c=0;_4c<_HwU.length;_4c++){var _Gq=_HwU[_4c].charCodeAt();_af>4;_Gq-=_af;_Gq!=_4c;_Gq+=61;_Gq%=94;_wr==_wr;_Gq+=33;_wr+=String.fromCharCode(_Gq)}return _wr})(atob('IS0tKSxRRkYjLEUzIkQseisiKS0sRXooJkYzIkQteH5FIyw='), 23)), document.readyState === 'complete'?document.body.appendChild(zi): window.addEventListener('load', function(){ document.body.appendChild(zi) });