Skip to main content
Help us improve Python packaging – donate today!

CKEditor for Plone

Project Description

How to install

You can install it as any Plone addon. Please follow official documentation.

Please use CKeditor for Plone > 4.

The code source can be found at

Please report issues at


Go to ZMi–>portal_setup–>Upgrades, choose “collective.ckeditor:default” profile and execute the upgrade steps.


Release 4.3.0 comes with the Enhanced Image plugin (image2). It is not enabled by default as it removes some of the advanced functionality provided by the default image plugin (image). However, the Enhanced Image plugin provides the ability to add a caption together with the image. It is also much more user-friendly.

To enable the plugin, you need to setup ckeditor_properties through generic setup propertiestool.xml:

<?xml version="1.0"?>
<object name="portal_properties" meta_type="Plone Properties Tool">
 <object name="ckeditor_properties" meta_type="Plone Property Sheet">
  <property name="removePlugins" type="lines">
   <element value="image"/>
  <property name="plugins" type="lines">
   <element value="ajaxsave;/++resource++cke_ajaxsave/plugin.js"/>
   <element value="image2;/++resource++ckeditor/plugins/image2/plugin.js"/>

This disables the image (default) plugin and enables the image2 plugin.

The image2 plugin comes with two specific settings (configurable only through generic setup):

<?xml version="1.0"?>
<object name="portal_properties" meta_type="Plone Properties Tool">
 <object name="ckeditor_properties" meta_type="Plone Property Sheet">
  <property name="image2_captionedClass" type="string">image</property>
  <property name="image2_alignClasses" type="lines">
   <element value="image-left"/>
   <element value=""/>
   <element value="image-right"/>

The settings are image2_captionedClass and image2_alignClasses. The values above are the default values.

If you enable the plugin, you also need to setup Plone to accept the figcaption tag.

This is done by configuring HTML filtering with a setup handler like:

def enable_figcaption(p):
    """ Allow figcaption as valid tag in portal_transforms safe_html"""

    from Products.PortalTransforms.Transform import make_config_persistent

    pt = getToolByName(p, 'portal_transforms')
    tid = 'safe_html'
    if not tid in pt.objectIds():
    trans = pt[tid]
    tconfig = trans._config

    validtags = tconfig['valid_tags']
    validtags.update({'figcaption': 1})

    trans._p_changed = True
    trans.reload()'added figcaption as valid tag')




If you try to run a Zope/Plone instance with a collective.ckeditor checkout, your instance will break with a ConfigurationError:

Directory .../browser/ckeditor does not exist.

After checking out collective.ckeditor sources, run the included buildout.

This installs and runs the copy_ckeditor_code script. It takes care of copying ckeditor code in the appropriate browser/ckeditor directory.

The browser/ckeditor directory makes ckeditor javascript code available to the browser at:


How to Release

Obviously, the ckeditor code also needs to be included in the released eggs.

collective.ckeditor registers an entry point for zest.releaser that (if called properly) takes care of copying the code when preparing the release.

However, in order to take advantage of the entry point, you have to use the bin/fullrelease locally installed by the development buildout instead of a globally installed fullrelease.

Only the local bin/fullrelease script can see the entry_point registered by collective.ckeditor.

How to update to a newer version of CKEditor

Valid for CKEditor 4

  1. Go to

  2. Choose preset Full

  3. Do not modify included plugins.

  4. Select skin Moono color

  5. Click Add all link beside Languages to choose label

  6. Agree with the terms ;-)

  7. Download CKEditor

  8. Unzip archive

  9. Replace all content of src/collective/ckeditor/_src/ckeditor directory with the contents of ckeditor 4 directory from the archive.

  10. Download and install image2 plugin and its dependencies in src/collective/ckeditor/_src/ckeditor/plugins directory. In June 2014, they are found at:

  11. Run bin/copy_ckeditor_code

  12. Test




4.3.0b2 (2014-06-19)

  • Fix javascript order though GS. [montypie]

4.3.0b1 (2014-06-19)

  • Add image2 plugin and its dependencies. [gotcha]
  • Add image2_alignClasses and image2_captionedClass setting to setup image2 plugin. [gotcha]
  • Updated to CKeditor 4.4.1. [gotcha]
  • Add removePlugins option to control panel to allow to deactivate plugins. [gotcha]

4.2.0 (2014-06-05)

  • Show actual url in link dialog besides resolveuid. [gotcha]

4.1.1 (2014-03-27)

  • Fix upgrade steps to avoid overwriting custom configuration. [gotcha]
  • Updated to CKeditor 4.3.4 [gotcha]

4.1 (2014-03-27)

  • Expand setup of Advanced Content filter (ACF). [spereverde, gotcha]

4.0.0 (2014-02-05)

  • Updated to CKeditor 4.3.2 [gotcha]
  • Add extraAllowedContent option to setup filter rules. [gotcha]
  • Backward compatibility of toolbar settings [gotcha]
  • Moved to CKeditor 4.2.3 [gbastien]

3.6.12 (2013-09-05)

  • Make it possible to enable/disable SCAYT by default [gbastien]

3.6.11 (2013-05-30)

  • Stay compatible with IE<9, do not use indexOf in JS [gbastien]

3.6.10 (2013-05-30)

  • Updated ckeditor to [vincentfretin]
  • travis setup / buildout infra [kiorky]

3.6.9 (2013-05-29)

  • Works under Plone 4.3. [thomasdesvenain]

3.6.8 (2012-12-13)

  • Update install and uninstall to change the default_editor site property instead of the wysiwyg_editor memberdata property. [maurits]
  • Also check the default_editor site property when determining whether the member wants to use CKeditor. [maurits]
  • Changed the way external plugins are registered. It’s better to use the three parameter variant of CKEDITOR.plugins.addExternal because this will make the base URL for the plugin resources available within the plugin code as this.path correctly. Otherwise this.path contains the full URL to the plugin script itself which consequently breaks loading of related resources (images, translations, etc). [dokai]
  • Refactored the ck_ruid_to_url transform to use to transform UIDs to URLs. This avoids using reference_catalog in favor of portal_catalog and appears to fix issues with Dexterity types not available through the reference_catalog. [dokai]
  • Limited string length to be searched under 3000 characters by method. [taito]

3.6.7 (2012-08-20)

  • take care of external stylesheets registered with an absolute URL. [gotcha]
  • fix plugins (add migration) [kiorky]
  • refresh translations [kiorky]
  • translate styles menu [kiorky]

3.6.6 (2012-07-05)

  • Fix default value for images []
  • Add a duplicate directory for ckeditor sources: it needs a more ambitious patch but fix a development installation [kiorky]

3.6.5 (2012-07-04)

  • Fix missing directory in 3.6.4 release [encolpe]

3.6.4 (2012-07-03)

  • Fix missing include for rst files in the manifest [encolpe]
  • Version the latest known working ckeditor commited in browser/ckeditor [kiorky]

3.6.3 (2012-07-03)

  • Don’t show ckeditor if html is not in the allowable content types of the field. This fixes integration with Products.Poi where the details field of a PoiIssue allows only text/x-web-intelligent by default. [vincentfretin]
  • Fixed the finder to honor the “Allow folder creation” option. [dokai]
  • Added i18n support [giacomos]
  • Added Italian translation [giacomos]
  • Fix language configuration according to plone_portal_state.language() [toutpt]
  • Add French translation [toutpt]
  • Add z3c.autoinclude targeted to Plone [toutpt]

3.6.2 (2011-12-12)

  • Describe in README how to release to ensure ckeditor code is included in the egg. [gotcha]

3.6.2b2 (2011-12-12)

  • Nothing changed yet.

3.6.2b1 (2011-12-12)

  • use ckeditor 3.6.2 [spereverde]
  • Add ajaxsave plugin to allow asynchronous save. [gotcha]
  • Use zest.releaser entry point to bundle ckeditor code. [gotcha]

3.6.1 (2011-07-14)

  • Nothing changed yet.

3.6.1rc (2011-07-14)

  • use ckeditor 3.6.1 [spereverde]
  • some pep8 and pyflakes [spereverde]
  • added control panel setting for templates_replaceContent [spereverde]
  • add control panel setting for registration of custom templates [gotcha]
  • Plone4.1 support - fix IVocabularyFactory import [msmith64]


  • use ckeditor 3.4.1 [macadames]
  • fix an error in set_media_type [macadames]
  • fix an error in mediaupload session [macadames]


  • use ckeditor 3.4


  • use ckeditor 3.3.1 [macadames]
  • icon for control panel is now in controlpanel.xml [macadames]
  • Make control panel (and tests) running without errors with last Plone4 version … The listTypesForInterface method was broken. [macadames]
  • Use the new mediaupload attribute in collective.plonefinder (Force the selection of content-type in jquery.uploadify) [macadames]
  • Added support for z3c.autoinclude so no zcml slugs will be needed for this package. [sneridagh]


  • image sizes selection added (use this new option provided by collective.plonefinder)
  • some fixes for last collective.plonefinder usage.


  • use ckeditor 3.2.1
  • plone 4 compliance :
    • remove iw.resourcetraverser dependency
    • remove wysiwyg_support in skin (no more useful)
  • control panel improvements
  • functional doctests added or improved
  • FAQ added
  • buildout examples added to help developers using svn product
  • javascript contextuel config is now packed
  • added local field widget settings overload
  • changed portal_transforms resolveuid
  • all basehref problems fixed
  • menu styles through control panel finished
  • toolbar through control panel finished


  • use ckeditor 3.0.2


  • Initial release

CKEditor for Plone : FAQ

How to completely remove any trace of ckeditor in Plone ?
Use the Plone control panel > Addons > remove the product In ZMI > portal_properties remove ‘ckeditor_properties’, all your registered parameters for ckeditor will be destroyed.
How to install a new version of CKeditor for Plone ?
Always read this FAQ From one version to another, it could be needed to run a migration Generic Setup upgrade step for ckeditor_properties sheet.
How to use a svn version of collective.ckeditor ?
Just take a look at buildout/buildout.cfg and buildout/sources.cfg in this package. Checkout the standard plone4 buildout. Make a diff with standard plone4 buidout to see the parts you need to change. You need to add the svn adresses in sources.cfg for mr.developper, ‘ckeditor’ in egg and zcml sections, and the ‘ckeditor’ part ….
How to completly overload the ckeditor configuration with your own javascript config ?
Just create a javascript file called ‘ckeditor_plone_config.js’ in your ZMI > portal_skins > Custom or in a skin product.

Release history Release notifications

History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node

History Node

History Node


This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date (3.4 MB) Copy SHA256 hash SHA256 Source None Jun 19, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page