Upgrading to Plone 6.0
Upgrading to Plone 6.0#
Plone 6.0 has seen the following major changes. Some may require changes in your setup.
Plone no longer ships with the
portal_quickinstaller tool (
In existing sites, the standard upgrade will remove the tool.
This is the final step in a deprecation path that started in Plone 5.1.
Documentation on how to switch to GenericSetup and the new installer, can be seen in the old Plone 5.1 upgrade guide.
See PLIP 1775.
Dexterity site root#
For content types, in Plone 4 and 5 you had the option to use the old Archetypes or the new Dexterity framework. The Plone Site root object was neither: it was in its own class. In Plone 6, the site root itself is a Dexterity object.
When you upgrade a site from Plone 5.2 to 6.0, at first you will see an empty site root.
Do not panic.
Your contents are only temporarily invisible.
Perform the standard migration via the
@@plone-upgrade view and your content will be visible again.
See PLIP 2454.
Plone 6 ships with a new NodeJS frontend: Volto.
When you use the
Plone package in your project, you will get the
plone.volto integration package.
This package prepares your Plone Site as a REST API.
The classic integrated frontend which is called "Classic UI" is still available if you are not ready for the new separate frontend.
If you choose to use Classic UI, then do not use the
To learn how to modify an existing Plone site to run with Volto, please read Migrate to Volto.
See PLIP 2703.
The deprecated Archetypes contenttypes framework is no longer supported. Add-ons that define a contenttype must use Dexterity instead.
See PLIP 2775.
Some deprecated views have been removed#
In Plone 6 some legacy view aliases have been removed. You can replace them with the new ones based on the following table:
No more temp_folder / tempstorage#
temp_folder object in the Zope root is no longer created by default.
If the object is there, but it is broken, the standard Plone upgrade procedure will remove it.
For now you must explicitly disable the
temp_folder if you use buildout:
[instance] recipe = plone.recipe.zope2instance zodb-temporary-storage = off
See issue 2957.
Changed Templates to Bootstrap 5 Markup#
See PLIP 2967.
Plone 6.0 means we move from Zope 4 to 5. This drops support for Python 2.7, drops ZServer, and removes deprecated code. See Zope 5.0a1.
Some imports may need to change. Add-on authors should check on Plone 5.2 if their code runs without any deprecation warnings from Zope 4. If no warnings are shown, the add-on should run fine on Zope 5.
See PLIP 3058.
Modernize Plone default theme (Barceloneta LTS)#
The standard theme in Classic UI was updated to Bootstrap 5, CSS variables, and an icon library. If you have a theme that builds on Barceloneta, you most likely need various changes.
It may be best to start with a fresh theme, and try to keep the changes minimal. The training documentation lists three possible theming strategies:
Create a theme based on Barceloneta
Create a theme from scratch
Create a theme based on Diazo
See PLIP 3061.
You may need to use a newer Python version. Supported Python versions are 3.7, 3.8, and 3.9. We recommend the most recent version. See https://www.python.org/downloads/ for which Python version is still supported by the Python community.
See PLIP 3229.
plone.api package now has a
Add-on authors may want to use this to get, create, or delete relations.
See PLIP 3137.
Mockup and resource registry redone#
The compiled version is in
The resource registries and their control panel have been simplified. Add-ons for Classic Plone only need to register bundles, not individual resources.
See PLIP 3211.
Relations control panel#
Plone 6 has a new control panel for relations,
As Manager you may want to use this control panel to look for and fix possible problems.
See PLIP 3232.
Deprecated Unicode property types#
Zope 5 has deprecated the Unicode property types
If you use these in your add-on, you should switch to their standard variants
These behave exactly the same on Python 3.
Plone has an upgrade step that goes through all objects in the site, replacing the deprecated properties with the default ones.
You should avoid adding them to your code.
See issue 3305.
We have replaced
Both are used by add-ons (Python packages) to signal with an entry point that Plone must load the ZCML of the add-on.
In most cases, the existing entry point can stay the same.
For example in
entry_points=""" [z3c.autoinclude.plugin] target = plone """
When your package name differs from your module name, you need to specify a differently named entry point.
When your module is named
example.alternative, create this entry point:
entry_points=""" [plone.autoinclude.plugin] target = plone module = example.alternative """
includeDependencies directive is no longer supported.
It was already recommended not to use this directive, as it is too implicit.
In the ZCML files of your add-on, search for
Replace all of its instances by explicitly loading any ZCML from other packages used by the add-on.
Here is a sample change from
- <includeDependencies package="." /> + <include package="Products.membrane" />
The same change is needed for the no longer supported
includeDependenciesOverrides directive, which may be used in