Upgrade Instructions 9.0 → 9.1

For further information on what changed, please take a look at the changelogs (Neos, Flow)

#Update Instructions

Before making substantial changes, make sure you create a backup of the database and files!

bash
cd /installation-root/
# Update the core package dependencies
composer require --no-update "neos/neos:~9.1.0"
composer require --no-update "neos/neos-ui:~9.1.0"

# Update optional package dependencies (if installed)
composer require --no-update "neos/demo:~9.1.0"

If you have development packages in your composer manifest, update them to match as well:

bash
# Update development packages (if installed)
composer require --no-update --dev "neos/buildessentials:~9.1.0"

Make sure to update every required Neos package to ~9.1.0! Otherwise there can be an error during updating, because of version conflicts.

After completing these steps, your package should be upgraded to the latest version of the Neos UI and ready to use. Thank you for using Neos!

#Adjustments

Neos

The Workspace Ui comes with a new trash functionality. To enable the button you need to setup the content repository to create the new database tables and also boot the projection from its initial state 0.

./flow cr:setup
./flow subscription:replay Neos.Workspace.Ui:TrashBinProjection

Deprecation:

Legacy LinkEditor configuration / New LinkEditor

Following legacy options should be rewritten to use the declaration in linkTypes instead (see PropertyEditorReference). They will be upcasted at runtime if no new declaration in linkTypes is made. Using new and old syntax simultaneously will lead to old syntax being ignored fully.

  • assets use linkTypes.Asset.enabled: false instead to disabled asset links
  • nodes use linkTypes.Node.enabled: false instead to disabled asset links
  • nodeTypes use linkTypes.Node.baseNodeType with a NodeType filter string instead
  • startingPoint use linkTypes.Node.startingPoint instead
  • placeholder obsolete finds no application in the new link editor can be safely removed

The anchor option for the inline editor to enable anchor support was removed. Instead anchors can be set via the "Advanced Options" to both Asset and Node links. For Web links the anchor is naturally part of the full link input at all times.

  inline:
    editorOptions:
      linking:
-       anchor: true
        title: true
        relNofollow: true
        targetBlank: true

Neos Ui Plugins
 

Formatting toolbar / CKEditor toolbar

With Neos Ui 9.1 we use the native CKEditor toolbar and ballon/context toolbar. For not only a unified look and feel but also to simplify plugins the new native CKEditor toolbar should be extended in plugins instead of the now legacy Neos formatting toolbar at the top. Eventually the place will no longer be reserved for old CKEditor plugins and freed to show new functionality.

As an example how the new toolbar can be used see the infamous hyphens plugin: Shel.Neos.Hyphens.

Old deprecated registry:

globalRegistry.get('ckEditor5').get('richtextToolbar')

The StyleSelect will be remove with Neos 10 please use CKEditor 5's built-in style dropdown instead:

richtextToolbar.get('style')
Accessing the FrontendConfigurationRegistry or {frontendConfiguration}

Accessing the Plugin frontend configuration via globalRegistry.set('frontendConfiguration') or {frontendConfiguration} in the bootstrap is deprecated please use the new package instead:

import {getFrontendConfigurationForPackage} from '@neos-project/neos-ui-configuration'

Example

Neos.Neos.Ui.frontendConfiguration offers an API for third party packages to deliver own settings to the UI at boot time. The Neos.Ui uses the ConfigurationProvider for its own static configuration. Settings from each package should be prefixed to avoid collisions:

 frontendConfiguration:
'Your.Own:Package':
someKey: someValue

Then it may be accessed via:

const {someKey} = getFrontendConfigurationForPackage('Your.Own:Package');
Accessing neos.configuration via @neos

Accessing the Neos Ui configuration via neos.configuration in react components or {configuration} in the bootstrap is deprecated please use the new package instead:

import {getConfiguration} from '@neos-project/neos-ui-registry'
Importing SynchronousRegistry

using the import is deprecated

import {SynchronousRegistry} from '@neos-project/neos-ui-extensibility'

please use the new package instead:

import {SynchronousRegistry} from '@neos-project/neos-ui-registry'
Other Neos Ui deprecations
- backend.get().endpoints.assetSearch()
- backend.get().endpoints.getJsonResource()
- selectors.CR.Nodes.getPathInNode()

#Finish the update

#Noop core migrations (relevant for 8.3 updates)

With Neos 9.0.8 a new set of core migrations were made availabe which also exist in Neos 9.1. In case youre updating from a Neos 9.0 youll notice that flow:core:migrate executes those. They will likely not change anything since youre already on Neos 9.0 compatible code. Though you can skip them explicitly by registering them in the composer.json:

  • Version 20251005080230 rewrite fusion node access and helpers ${node.identifier}
  • Version 20251006080506 rewrite removed fusion prototypes Neos.Fusion:Collection etc
  • Version 20251109115127 rewrite dimension and route-part-handler configuration
bash
# Update the packages
composer update

# Flush the caches
./flow flow:cache:flush --force
./flow flow:session:destroyAll

# Run code migrations, as needed for any packages that need to be
# migrated. Rule of thumb:
#
# - any 3rd party packages that still install fine at least claim
#   to work, and should be updated by their maintainer(s).
# - your own packages should always be treated with a migration,
#   at least it marks that as done.
#
./flow flow:core:migrate <Vendor.PackageName>

# Run database migrations
./flow doctrine:migrate

# Publish resources
./flow resource:publish