Plone 6.1.0 first release candidate available

On behalf of the Plone community, I am proud to announce the first release candidate of Plone 6.1!

Release notes for Plone 6.1.0rc1

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

Please test!

This is the first release candidate of Plone 6.1.
I want to make the final release at the end of next week, or at the latest on Monday February 10.
That is the first day of the Alpine City Sprint, and it would be good to have the final release out before it really starts.

Please try this out in your own projects and with community add-ons.
You can report potential blockers in this GitHub issue.

Highlights

Major changes since 6.1.0b2:

  • icalendar: Upgraded to version 6. This has support for the zoneinfo Python standard library.
    Plone is not ready for that yet, so in plone.app.event, which uses it for the ical/vcal downloads, we configure it to keep using the pytz library as before.
    You should not notice a difference, but if you have own code that uses icalendar, you should look at the breaking changes in v6.0.0a0.
  • plone.exportimport and plone.distribution have changes that make the exported files more "stable": when you create a site with a distribution and then make a fresh export, there should be no changes in the distribution.
    • Include revisions only when passing --include-revisions in bin/plone-exporter and bin/export-distribution.
    • Export principals: sort groups, roles, and members.
    • Import: update modification dates again at the end. The original modification dates may have changed.
    • Do not export parent info.
      This information is no longer needed: during import, parents are now always found by path and not by UID.
      From now on, the import ignores any parent info that is set.
    • Export the raw value of rich text fields, instead of the transformed output. This fixes internal links in Classic UI based distributions.
    • Fix traceback when translation group does not have the default language.
    • Documentation of plone.exportimport is now in Export and import site data — Plone Documentation v6
  • plone.app.iterate:
    • Support working copies of the Plone Site.
    • Support working copies of content types that don't have versioning enabled.
    • Do not allow checkout when item is not lockable or is already locked.
  • plone.restapi:
    • Add a @login endpoint to get external login services' links.
    • In the @registry endpoint, added support for filtering the list of registry records.
    • Support working copies of the Plone Site (needs the new plone.app.iterate 6.1.0 release).
  • plone.volto: Implement a specific robots.txt for Volto sites.
    The existing standard one would block API calls made by Google.
    There is an upgrade step which will update the existing plone.robots_txt registry setting unless it has been customized.
  • Products.PlonePAS: Return an error when trying to access the PAS views from the web.
  • plone.app.upgrade: Ensure that the mimetypes registry globs contain valid patterns.
    If you have a site that started on Python 2.7 and is now running on Python 3.11, the mimetypes registry may give errors. This upgrade step fixes it.
  • Products.MailHost: Add support to implicit_tls flag. With this flag set, MailHost use TLS from the beginning of the connection, known as SMTPS and commonly used on TCP port 465. You need to switch this on in the ZMI (Zope Management Interface).
  • zc.buildout: Upgraded to the cleaned up version 4. This has packaging as a dependency, and requires Python 3.9 or higher.
  • Fixed lots of deprecation warnings in lots of packages.

Volto frontend

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

Plone 6.1 is meant to be used with Volto 18.
Latest release is 18.8.0. See the changelog.

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.0 and 6.1. Our documentation now refers to this frontend as 'Classic UI'.

Python compatibility

This release supports Python 3.10, 3.11, 3.12, and 3.13.

pip, buildout, setuptools

In Plone core we use these versions to install Plone:

packaging==24.2
pip==24.3.1
setuptools==75.6.0
wheel==0.45.1
zc.buildout==4.0

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

Note that zc.buildout 4 has packaging as a dependency, so we added a pin for it in the requirements.

Installation

For installation instructions, see the documentation.

Issues

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

12 Likes

what about addon migration? Are there CMFPlone.interfaces -> base.interfaces changes we should consider? Or there will be a Zope deprecate that will save us? :sweat_smile:

I think this is already a problem in 6.0 (or at least the upgrade steps 'break')

I have not seen problems myself with registry records, except one with syndication settings that I fixed in 2023.

There could be problems. @gforcada reported one about a year ago, but nothing has happened since then. Either no one else has problems, or it goes unnoticed. It may also depend on how you access a record: via an interface or a name.

I fixed lots of deprecation warnings, see this issue with links. That included fixes for the move from Products.CMFPlone.interfaces to plone.base.interfaces. Some possibly interesting ones that touch GenericSetup profiles and upgrade steps, are plone.app.upgrade and plone.staticresources.

But indeed, if there is a problem, I think it already exists in Plone 6.0.

Meanwhile, the plone-backend Docker image is ready.

And I have updated my two personal sites (using Buildout).

1 Like

Until now, i have updated two Classic UI sites. It looks good to me.

Do you have easyform install?

  1. From which version?
    (I tried to upgrade a Plone 5.2.14 site and I get error 'from dict' in 'plone.app.registry' (which I think is also present in other versions).

  2. Is it from a site made in 6 (or earlier)

Yes

Both sites are Plone 6. No 5.x involved

Please note that the release team is still pushing some updates to the 6.1.0rc1 images this week to fix some issues and regressions. As we want to keep the versions synchronised between the Plone 'source' release and the container image versions and not add another modifier/revision number, the container images are refreshed on 6.1.0rc1.

Also: the images for 6.1.X have updated OS (debian 12 bookworm) Python 3.12 and some other dependency/binding/library updates. There is a warning in the README.md on the 6.1.X branch.

1 Like

Probably off topic, but I noticed (while updating a theme) that a field defined in xml (for Mosaic) also gets the 'dict error'

UPDATE: It is not Dict that is the problem, but the value type

    <field name="query" type="zope.schema.List"  >
        <title>Search terms</title>
        <description>Define the search terms for the items you want to list.</description>
        <required>False</required>
        <value_type type="zope.schema.Dict">
            <key_type type="zope.schema.TextLine" />
            <value_type type="zope.schema.Field" />
        </value_type>
    </field>

2025-02-13 13:32:31,561 ERROR   [Zope.SiteErrorLog:17][waitress-0] SupermodelParseError: http://ubuntu.local:8610/Plone/a-page/@@add-tile/collective.themefragments.fragment
Traceback (innermost last):
  Module ZPublisher.WSGIPublisher, line 181, in transaction_pubevents
  Module ZPublisher.WSGIPublisher, line 390, in publish_module
  Module ZPublisher.WSGIPublisher, line 284, in publish
  Module ZPublisher.mapply, line 98, in mapply
  Module Products.PDBDebugMode.wsgi_runcall, line 60, in pdb_runcall
  Module plone.z3cform.layout, line 61, in __call__
  Module plone.z3cform.layout, line 45, in update
  Module plone.app.tiles.browser.base, line 110, in update
  Module plone.z3cform.fieldsets.extensible, line 61, in update
  Module plone.autoform.form, line 32, in updateFields
  Module plone.autoform.base, line 64, in updateFieldsFromSchemata
  Module plone.memoize.view, line 51, in memogetter
  Module collective.themefragments.tiles, line 313, in schema
  Module collective.themefragments.tiles, line 160, in getFragmentSchema
  Module collective.themefragments.utils, line 22, in cached
  Module collective.themefragments.tiles, line 153, in getFragmentSchemata
  Module plone.supermodel.parser, line 74, in parse
plone.supermodel.parser.SupermodelParseError: Type zope.schema.Field used for value_type not supported
  File "<unknown>", line 60
  File "/home/ubuntu/disk2/Plone6/Plone-6.1/plone601/venv/lib/python3.13/site-packages/plone/supermodel/parser.py", line 68, in parse
    return _parse(source, policy)
  File "/home/ubuntu/disk2/Plone6/Plone-6.1/plone601/venv/lib/python3.13/site-packages/plone/supermodel/parser.py", line 152, in _parse
    readField(fieldElement, schemaAttributes, fieldElements, baseFields)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ubuntu/disk2/Plone6/Plone-6.1/plone601/venv/lib/python3.13/site-packages/plone/supermodel/parser.py", line 117, in readField
    field = handler.read(fieldElement)
  File "/home/ubuntu/disk2/Plone6/Plone-6.1/plone601/venv/lib/python3.13/site-packages/plone/supermodel/exportimport.py", line 119, in read
    attributes[attribute_name] = handler.read(attribute_element)
                                ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/home/ubuntu/disk2/Plone6/Plone-6.1/plone601/venv/lib/python3.13/site-packages/plone/supermodel/exportimport.py", line 114, in read
    raise NotImplementedError(
    ...<2 lines>...
    )
[16] > /home/ubuntu/disk2/Plone6/Plone-6.1/plone601/venv/lib/python3.13/site-packages/plone/supermodel/parser.py(74)parse()
-> raise SupermodelParseError(e, fname, parseinfo.stack[-1], sys.exc_info()[2])

Are you sure that zope.schema.Field has a IFieldExportImportHandler implementer? I would use TextLine. I don't know why it worked before, maybe Mosaic implemented it?

There are some hint here z3c.form.Datagridfield. Widgets and setting - #10 by petschki

Need to check, but I thought Mosaic got it from here: plone.app.standardtiles/src/plone/app/standardtiles/contentlisting.py at main · plone/plone.app.standardtiles · GitHub

The traceback indicates, that the problem comes from collective.themefragments ... we never use that here, but you need to check that package.