Plone 6.0.9 released

Release notes for Plone 6.0.9

  • Released: Tuesday December 19, 2023. (There was a delay in generating and publishing the plone-backend Docker image, so this announcement is a few days later.)
  • Check the release schedule.
  • Read the upgrade guide, explaining the biggest changes compared to 5.2.
  • Canonical place for these release notes and the full packages changelog.

If you want to jump straight in, here are two important links:


Major changes since 6.0.8:

  • Plone 6.0.9 is the first release that can run on Python 3.12!
    Unfortunately, there are reports that on Python 3.12.1 the tests fail.
    This should be only a problem in the tests, but it is hard to be completely sure.
    So we cannot officially recommend Python 3.12 yet.
  • Zope: Support Python 3.12.
  • plone.restapi:
    • Added preview_image and preview_image_link to the list of smart fields for resolveuid and link integrity.
  • ZEO:
    • Version 6.0.0 supports Python 3.12.
    • It also switches "to using async/await directly instead of @coroutine/yield".
    • That last change sounds like it could potentially have unforeseen side effects, so it would be good to get this more field tested.
      (I may be too cautious here.)
    • So for Python 3.11 and lower we pin 5.4.1, and on Python 3.12 we pin 6.0.0.
      You are encouraged to try out the newer version on all Python versions, and report any problems.
      We will likely pin the new version for all Python versions in the next Ploen bugfix release.
    • See the ZEO 6.0.0 changelog

Volto frontend

The default frontend for new Plone 6 sites is Volto. Latest release is 16.30.0. See the changelog.
Note that this is a JavaScript frontend that you need to run in a separate process with NodeJS.

Also, existing Plone sites need some or more extensive changes to be upgraded before they can use the Volto Frontend. Please read the guide on migrating from Plone Classic UI to Volto.

Note that Volto 17 is also available, and you can use it on Plone 6.0, but we will keep recommending Volto 16 by default.

Classic UI

The HTML based and server side rendered UI that was present in Plone 5.2 and earlier major Plone releases is still available and has also been updated and improved upon in Plone 6. Our documentation now refers to this frontend as 'Classic UI'. Support for Classic UI is especially relevant for existing Plone sites which for whatever reason or requirements are not yet ready to be upgraded to the Volto frontend.

Python compatibility

This release supports Python 3.8, 3.9, 3.10, and 3.11.

Plone 6.0.9 is the first release that also runs on Python 3.12, but we cannot officially recommend it yet for production use.
See the remark in the Highlights above about tests failing on 3.12.1.
That Plone runs on 3.12 is largely made possible by recent changes in Zope and RestrictedPython, so thanks a lot to the developers working on that!

Note that Plone 6.0 is tested on Python 3.8 and 3.11 on every change to core packages. For the other Python versions we run the tests once a week.

pip, buildout, setuptools

In Plone core we use these versions to install Plone:


In general you are free to use whatever versions work for you, but these worked for us.


For installation instructions, see the documentation.


If you find any issues, please report them in the main issue tracker.


There is an error when using the old buildout (working for 6.0.7) method.

An internal error occurred due to a bug in either zc.buildout or in a
recipe being used:
Traceback (most recent call last):
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 2252, in main
getattr(buildout, command)(args)
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 740, in install
[self[part]['recipe'] for part in install_parts]
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 740, in
[self[part]['recipe'] for part in install_parts]
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 1373, in getitem
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 1481, in _initialize
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 1487, in initialize
recipe_class = _install_and_load(reqs, 'zc.buildout', entry, buildout)
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 1430, in _install_and_load
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 971, in install
return installer.install(specs, working_set)
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 744, in install
for dist in self._get_dist(req, ws):
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 581, in _get_dist
dists = [_move_to_eggs_dir_and_compile(dist, self._dest)]
File "/Users/me/Plone6_3111/zinstance/lib/python3.11/site-packages/zc/buildout/", line 1922, in _move_to_eggs_dir_and_compile
os.rename(tmp_loc, newloc)
OSError: [Errno 66] Directory not empty: '/Users/me/Plone6_3111/zinstance/eggs/tmpg647ng8y/zope.interface-6.1-py3.11-macosx-13.1-arm64.egg' -> '/Users/me/Plone6_3111/zinstance/eggs/zope.interface-6.1-py3.11-macosx-13.1-arm64.egg'

I tried to install according to the instructions:

After a make install I can apparently start the local version with make start-backend and make start-backend without any problems

But I usually also want to use the Docker images and create them with make build-images.

But when I then want to use these images, I get the error in the backend logs that was already mentioned when version 6.0.7 was released:

ImportError: cannot import name 'get_ajaxselect_options' from '' (unknown location)

Is this problem known or is there a workaround?

I think I've found a starting point. If I don't include the plone addon pas.plugins.ldap, the backend image also starts in docker.

But when I want to include pas.plugins.ldap in the requirements.txt, make install complains.

Since I had previously integrated this addon in the docker-compose.yml, this explains why the error only occurred when starting the container.

The problem is probably not with Plone itself but with the addon

Please file that as an issue in if you haven’t already

Thank you @1letter for the tip, I had already found your note about the soft release of version 6.0.7 and in my mx.ini at GitHub - bluedynamics/yafowil.plone: Zope2 Integration for YAFOWIL - Yet Another Form Widget Library (Python, Web)

If the version is now in pypi it is of course even easier.
I have now adapted the mx.ini accordingly, but also had to pin other packages:

version-overrides =

Is this correct or is there a better place for the configuration?

Yes, that is what i have also.