2024 Rich Text Editing Developer Survey

Share your thoughts on the future of collaborative rich text editing. (Our survey takes about 10 mins)

Have your say

CKEditor 4.9 with Easy Image plugin for responsive images

CKEditor 4 release

To celebrate the past 15th anniversary of CKEditor, we are happy to announce the release of the latest major CKEditor 4 version. CKEditor 4.9 comes with plenty of new features — including a brand new Easy Image plugin for inserting responsive images that are uploaded to and delivered straight from the cloud. Read on for a detailed overview of all the new features!

# Easy Image

The new Easy Image plugin lets you insert images which are automatically rescaled, optimized, responsive and delivered through a blazing-fast CDN. It introduces a new type of a captioned image widget with drag & drop upload to the cloud, image alignment options as well as custom styles available in the balloon toolbar and drag & drop positioning.

Easy Image guarantees that all images inserted into your content are responsive. With a single image upload, several optimized versions of the image are created after upload by CKEditor Cloud Services, for different sizes of displays. All this is transparent to the end user who uploaded the image. Rescaled and optimized images are delivered through the CDN.

Easy Image

The Easy Image feature in CKEditor 4 is provided through 3 new plugins: Easy Image, Cloud Services and Image Base. Refer to the Easy Image documentation and Easy Image sample for more information.

# Integration of File Browser and XHR

The File Browser plugin can now upload files using XmlHttpRequest and XHR becomes the default setting. It is also possible to set custom HTTP headers using the new config.fileTools_requestHeaders configuration option.

# More new features

This release also contains some smaller new features that supplement or change existing functionality:

  • Setting config.startupFocus as start or end to specify where the editor focus should be after the initialization.
  • Ability to provide custom icons for toolbar buttons without the need to rebuild the editor.
  • Keystroke labels displayed for function keys (like F1, F8).
  • New versions of Spell Check As You Type (SCAYT) and WebSpellChecker plugins.
  • The Magic Line plugin line element can now be identified by the data-cke-magic-line="1" attribute.

# Fixing paste on mobile devices

By popular demand, the Paste dialog is back on touch devices to fix pasting in mobile environments. When you click the Paste button on a mobile device, a notification will be displayed; upon touching it, the Paste dialog will be opened. You can then use native mobile actions to paste your text and insert it into the editor by pressing the OK button.

# Other paste improvements

In addition to that, user interface messages connected with pasting were clarified. It was reported that some users were confused due to the removal of the old Paste dialog and were not familiar with relevant keyboard shortcuts for pasting (Ctrl or + V). We hope the lastest changes will help alleviate these issues!

# Bug fixes

This release also fixes a bunch of bugs. Here are some notable examples:

  • We ironed a few issues with the new balloon toolbar and balloon panel out, with a special focus on correct positioning of these UI elements.
  • The widget border contrast was improved.
  • Issues with deleting and cutting read-only widgets were fixed.
  • Copying an empty selection (e.g. a cursor in the middle of a word) does not clear the clipboard (so you can still paste the previously copied content).
  • AltGr + A properly types a a diacritic “a” character instead of selecting the editor content when a widget is placed at the start or end of the content.

# CKEditor 4.9.1

After the release of CKEditor 4.9 we noticed that the integration of the File Browser plugin and CKFinder’s Quick Upload functionality stopped working. This issue was fixed and the updated code is now available as version 4.9.1.

# Release notes

Check out the release notes for the full list of changes.

# Download

Download CKEditor now and upgrade your installation or use your favorite package manager to install it!

# License

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

# Reporting issues and contributing

Please report any new issues in the CKEditor 4 development repository and follow the instructions in the issue template. You can also contribute code and provide editor patches through pull requests.

# Support

Community support is available through Stack Overflow. Visit the resources page for additional options.

# Feedback needed!

We are really enthusiastic about this new, major CKEditor version and its numerous new features. We will be happy to hear from you and thankful for any suggestions that will help us improve these features and tailor them to your expectations.

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