Update within Plone 6

There are instructions on how to get from Plone 5 to 6. But how does the update within Plone 6 work, e.g. from 6.0.5 to 6.0.6 including Volto. Is there an update procedure for this?

Patch version upgrades are normally easy and include only some database upgrades which are done via portal_setup in the ZMI or via the Plone control panel.

And how is Zope itself updated. I would like to update from Zope 5.8.3 to Zope 5.8.4.

On the python side (aka backend) you'll need to update your venv.

The following will pip install the versions specified in the constraints file and attempt to uninstall the "wrong" versions.

pip install -U pip wheel setuptools -c ${CONSTRAINTS_FILE}
pip install Plone -c ${CONSTRAINTS_FILE}
# and your extra packages
pip install <extra_package> -c ${CONSTRAINTS_FILE}

See below a diff of the constraints in versions 6.0.5 and 6.0.6. Please note that Plone 6.0.6 uses Zope 5.8.3. If you need Zope 5.8.4 you will need to run pip install Zope==5.8.4 without constraints. But this might mess your versions if there are other dependencies (which AFAICS is not currently the case with Zope==5.8.4)

$ diff -y --suppress-common-lines |
    <(curl -s https://dist.plone.org/release/6.0.5/constraints.txt) |
    <(curl -s https://dist.plone.org/release/6.0.6/constraints.txt)

Acquisition==4.13                     | Acquisition==5.0
CacheControl==0.12.11                 <
Deprecated==1.2.13                    | Deprecated==1.2.14
Paste==3.5.2                          | Paste==3.5.3
Persistence==3.6                      | Persistence==4.0.post1
Plone==6.0.5                          | Plone==6.0.6
Products.BTreeFolder2==5.0            | Products.BTreeFolder2==5.1
Products.CMFPlone==6.0.5              | Products.CMFPlone==6.0.6
PyGithub==1.58.1                      | PyGithub==1.58.2
PyJWT==2.6.0                          | PyJWT==2.7.0
Pygments==2.14.0                      | Pygments==2.15.1
Record==3.6                           | Record==4.0
Sphinx==6.1.3                         | Sphinx==6.2.1
ZConfig==3.6.1                        | ZConfig==4.0
Zope==5.8.2                           | Zope==5.8.3
beautifulsoup4==4.11.2                | beautifulsoup4==4.12.2
                                      > cachecontrol==0.13.1
certifi==2022.12.7                    | certifi==2023.5.7
cryptography==40.0.2                  | cryptography==41.0.1
filelock==3.12.0                      | filelock==3.12.1
icalendar==5.0.5                      | icalendar==5.0.7
launchpadlib==1.11.0                  <
lazr.restfulclient==0.14.5            <
lazr.uri==1.0.6                       <
packaging==23.0                       | packaging==23.1
pip==23.0.1                           | pip==23.1.2
plone.app.caching==3.1.1              | plone.app.caching==3.1.2
plone.app.content==4.0.1              | plone.app.content==4.0.2
plone.app.layout==4.0.5               | plone.app.layout==4.0.6
plone.app.locales==6.0.14             | plone.app.locales==6.0.15
plone.app.mosaic==3.0.3               | plone.app.mosaic==3.1.3
plone.app.portlets==5.0.5             | plone.app.portlets==5.0.6
plone.app.querystring==2.0.4          | plone.app.querystring==2.0.5
plone.app.relationfield==3.0.2        | plone.app.relationfield==3.0.3
plone.app.standardtiles==3.1.1        | plone.app.standardtiles==3.1.2
plone.app.theming==5.0.3              | plone.app.theming==5.0.4
plone.app.upgrade==3.0.5              | plone.app.upgrade==3.0.6
plone.app.users==3.0.2                | plone.app.users==3.0.3
plone.app.z3cform==4.2.0              | plone.app.z3cform==4.2.1
plone.batching==2.0.5                 | plone.batching==2.0.6
plone.memoize==3.0.1                  | plone.memoize==3.0.2
plone.namedfile==6.1.0                | plone.namedfile==6.1.1
plone.outputfilters==5.0.2            | plone.outputfilters==5.0.3
plone.portlet.collection==4.0.2       | plone.portlet.collection==4.0.3
plone.releaser==2.0.0                 | plone.releaser==2.0.1
plone.restapi==8.39.1                 | plone.restapi==8.40.0
plone.staticresources==2.0.11         | plone.staticresources==2.1.3
plone.subrequest==2.0.3               | plone.subrequest==2.0.4
plone.volto==4.0.8                    | plone.volto==4.0.9
plonetheme.barceloneta==3.0.2         | plonetheme.barceloneta==3.1.3
pyOpenSSL==23.1.1                     | pyOpenSSL==23.2.0
python-dotenv==1.00                   | python-dotenv==1.0.0
python-gettext==4.1                   | python-gettext==5.0
pytz==2022.7.1                        | pytz==2023.3
requests==2.28.2                      | requests==2.30.0
requests-toolbelt==0.10.1             | requests-toolbelt==1.0.0
rich==13.3.4                          | rich==13.4.1
robotframework==6.0.2                 | robotframework==6.1
robotframework-seleniumlibrary==6.0.0 | robotframework-seleniumlibrary==6.1.0
selenium==4.9.0                       | selenium==4.9.1
setuptools==67.6.1                    | setuptools==67.8.0
soupsieve==2.4                        | soupsieve==2.4.1
tempstorage==5.2                      | tempstorage==6.0
towncrier==22.12.0                    | towncrier==23.6.0
trio-websocket==0.10.2                | trio-websocket==0.10.3
trove-classifiers==2023.4.25          | trove-classifiers==2023.5.24
types-PyYAML==                | types-PyYAML==
urllib3==1.26.15                      | urllib3==2.0.2
z3c.pt==3.3.1                         | z3c.pt==4.0
zdaemon==4.4                          | zdaemon==5.0
zodbpickle==2.6                       | zodbpickle==3.0.1
zope.annotation==4.8                  | zope.annotation==5.0
zope.browser==2.4                     | zope.browser==3.0
zope.cachedescriptors==4.4            | zope.cachedescriptors==5.0
zope.component==5.1.0                 | zope.component==6.0
zope.configuration==4.4.1             | zope.configuration==5.0
zope.container==5.0                   | zope.container==5.1
zope.contentprovider==4.2.1           | zope.contentprovider==5.0
zope.contenttype==4.6                 | zope.contenttype==5.0
zope.datetime==4.3.0                  | zope.datetime==5.0.0
zope.deprecation==4.4.0               | zope.deprecation==5.0
zope.dottedname==5.0                  | zope.dottedname==6.0
zope.globalrequest==1.6               | zope.globalrequest==2.0
zope.i18n==4.9.0                      | zope.i18n==5.0
zope.i18nmessageid==5.1.1             | zope.i18nmessageid==6.0.1
zope.processlifetime==2.4             | zope.processlifetime==3.0
zope.ptresource==4.3.0                | zope.ptresource==5.0
zope.structuredtext==4.4              | zope.structuredtext==5.0
zope.testbrowser==5.6.1               | zope.testbrowser==6.0
zope.testrunner==5.6                  | zope.testrunner==6.0
zope.traversing==4.4.1                | zope.traversing==5.0
zope.viewlet==4.3                     | zope.viewlet==5.0

Thanks for the info. I had only seen the message from Jens Vagelpohl that Zope 5.8.4 had been released and did not understand how I should update it via portal_setup.

But if I understand you correctly, it certainly makes sense to wait for the next Plone version, which will then also bring a newer Zope.

6.0-dev is indeed already pinning Zope==5.8.4:

$ sed '70q;d' <(curl -s https://dist.plone.org/release/6.0-dev/constraints.txt)

Since yesterday Plone 6.0.7 is released:

So far my website is running Plone 6.0.6. How can I install the update?
@thet You meant this is done via portal_setup. But I don't really understand how to do it via portal_setup in ZMI.

the same way you did from 6.0.5 to 6.0.7?


  • First, back up your site.
  • Then go to https://your-plone-site/@@plone-upgrade.

Then it should look like this:

Scroll down and click "upgrade":

You need to be logged in as admin to do that.
There is a chance that the Plone site cannot be rendered and the normal login form won't work. In that case, login at: http://localhost:8080/Plone/failsafe_login

You might also want to read Upgrade guide — Plone Documentation v6.0

Hope that helps.

Note: there is always a chance that something goes wrong. In that case you can use the undo functionality in the Zope management interface. Direct link for a standard setup is:


I think this one of the many "killer features" of Plone/Zope and did often safe me in case of trouble.

Unfortunately, I still haven't managed the update. I have installed Plone from its packages according to these instructions:

However, the procedure with CONSTRAINTS_FILE and pip install did not really change anything.

How do I do the update when I installed Plone from its packages?