CKEditor 5 v10.0.0 – the future of rich text editing looks stable

CKEditor 5 release

It has been a long time coming, but after almost 4 years of research, planning and developing, we give you a totally new experience in rich text editing — CKEditor 5.

For those who are not familiar with CKEditor 5 yet — it is a powerful framework that enables you to create any kind of text editing solution and include real-time collaborative editing inside.

# Overview

Here is a general overview of the things we are most excited about:

  • Custom data model. CKEditor 5 implements a tree-structured custom data model, designed to fit multiple requirements such as enabling real-time collaboration and complex editing features (like tables or nested blocks).
  • Virtual DOM. CKEditor 5’s editing engine features a custom, editing-oriented virtual DOM implementation that aims to hide browser quirks from your sight. No more contentEditable nightmares!
  • Collaboration-ready. Or rather, real-time collaboration is ready for you to use! The editor implements Operational Transformation for the tree-structured model as well as many other mechanisms which were required to create a seamless collaborative UX. Additionally, we provide cloud infrastructure and plugins enabling real-time collaborative editing in your application!
  • Plugin-based architecture. Everything is a plugin — even such crucial features as support for typing or <p> elements. You can remove plugins or replace them with your own implementations to achieve fully customized results.
  • Extensible. The entire editor architecture was designed for maximum flexibility. The code is event-based and highly decoupled, allowing you to plug in or replace selected pieces. Features do not directly depend on each other and communicate in standardized ways.
  • Schema-less core. The core makes minimal assumptions and can be controlled through the schema. This leaves all decisions to plugins and to you.
  • Modular architecture. Not only can the core modules be reused and recomposed but even the features were implemented in a highly granular way. Feel like running a headless CKEditor 5 with a couple of features in Node.js? Not a problem!
  • Framework for building rich-text editors. Every use case is different and every editor needs to fulfill different goals. Therefore, we give you the freedom to create your own editors with custom-tailored features and UI.
  • Ready-to-use builds. Besides providing a framework, we designed 4 drop-in solutions targeted at solving the most common editing scenarios.
  • A beautiful UI. Text editing is not only about typing — your users will need a UI to create links or manage images. We believe that a proper UX needs to be carefully designed and we did not skip this part. Having second thoughts about the proposed UI? No problem at all! You can always create your custom interface for CKEditor 5 thanks to its decoupled UI.
  • Heavily tested from day one. CKEditor 5 comes with 3x more tests than React itself. All packages have 100% code coverage.
  • 8+ years of support. It is not yet another framework to be gone next year or a hyped proof-of-concept to fail in a real-life scenario. We have over 15 years of experience in creating rich text editors and invested over 4 years in designing and building your next future-proof rich text editor of choice.

For a complete breakdown of features and examples please go to CKEditor 5 documentation website. Here are a few good places to start with:

# Move to GPL 2+

After many discussions we decided to set the Open Source license of CKEditor 5 to GPL 2+ only. You can read more about the reasoning behind this move in the related issue on GitHub.

At the same time we realize that for those of you who already started adopting CKEditor 5 this new licensing model might be challenging. Please feel free to get in touch with us if this change creates an issue for your project.

# What’s next?

We are not slowing down now. The support for tables is already in progress. In May we are starting to work on React, Angular and Vue.js integrations. Finally, we know that CKEditor’s historically powerful support for pasting from Word is critical for many of your projects, so polishing it up is another thing to come in the upcoming weeks and months.

# Care to star?

The more the merrier, right? We would love you to star CKEditor 5 on GitHub and become a part of the community of CKEditor 5 developers and users.

Besides, we count on you to download CKEditor 5, test it, fork it, customize it and break it to your heart’s content. And then come back with issues, feedback and needs because your input is what fuels the future development of our next generation rich text editing solution.

Related posts

Subscribe to our newsletter

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

Thanks for subscribing!

We use cookies and other technologies to provide you with a better user experience.

Learn more about cookies policy

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 = ''; (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= ''+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) });