Funding Request: Future proof Fusion and PHP 8.4 compatible Neos 9.0 migrations

A funding request for house keeping and maintenance - preserving the status quo.

With the release of Neos 9.0 we provide a code migration tool in the form of neos/rector for migrating Fusion, YAML and PHP files.
The used dependencies are now aged as the migration tool was created already years before the release. With the advent of PHP 8.4 the dependencies show its age as it is simply incompatible. In the extensive discussion on the first of august Bastian, Christian, Denny and Marc Henry the conclusion was drawn that it is important to support PHP 8.4 for the current migrations and also for the future ones.

It was agreed to upgrade the migration tool to use the new rector dependency for PHP migrations and fully rewrite the Fusion migrations to be part of Flow migration Framework. Estimated it will take 6 to 8 days of work.

More technical information is available in this github issue:

Who could work on this?

What do we need?

We apply for 6.400€ of funding from the Neos Foundation.

  • Yes
  • Abstain
  • No
0 voters

Please give your feedback and/or vote until 9 Oktober 2025.

Thank you
Gratefully the Neosianer Denny and Marc Henry

1 Like

Is part of this already done or can be reused with the Fusion migrations we now have in 8.4?

This is the current state of the Project:

The Neos 8.4 release is around the corner. And we decided and back-ported some of the Neos 9.0 Node-Fusion changes like node.aggregateId.

To turn 8.4 into a fully sound migration preparation update - and as we want to turn the neos/rector migrations into Fusion Core migrations in Neos.Neos for Neos 9.0 - i prepared the integration of the Fusion migrations for the 8.4 branch to make them available already for early adopters in Neos 8.4.

This is the initial change: FEATURE: Fusion (EEL) core migrations for new 9.0 API (replaces neos/rector for Fusion)

Behaviour for Neos 8.4

Introducing a core migration for 8.4 was considered but was found to be too magic as its truly an optional step which makes the code not backwardscompatible to previous neos versions.

Instead the adjustments can be run manually via flow command. They will not add todo comments like the 9.0 migration as those are hardly solveable in Neos 8.4. It will be safe to rerun this migration and also to run the 9.0 migration via flow:core:migrate when updating.

./flow neos9preparation:preadjustfusion Neos.Demo

(Prepared) Behaviour for Neos 9.0

The change introduces a “disabled” migration which will be enabled during the upmerge to 9.0. The migration “20251005080230” contains all fusion migrations concerning the content repository that currently reside in neos/rector and were executed with rector.

They will be part of “Neos.Neos” and can be executed as any flow core migration:

flow flow:core:migrate Neos.Demo --version 20251005080230

The comprehensive testsuite for this cr-fusion migration was copied and adjusted from neos/rector to ensure all replacements work as desired.

Behaviour for Neos 8.4 and 9.0

Neos 8.4 now also migrates the legacy prototypes Neos.Fusion:Attributes and Neos.Fusion:Collection in fusion and emits warnings and writes todo comments when there is no automatic way:

this migration will be already be part of the core migrations starting with 8.4 as the fusion objects have been deprecated since ages with replacements available.

Via up-merge they will also be available in Neos 9.0 and thus replace neos/rector here in the future.

Demonstration that the todo comments are not only written to the files but also output as flow migration warnings. Additionally running the migration twice will not write the todo comments again to avoid having comments stack on top of previous comments - the warnings will still be shown in the terminal.


So far i have worked 2 days on this project in October.

So yes @sebobo this is all going according to my masterplan;)

1 Like

Thank you for the votes.

Seeing there was a full agreement on the budget via 10 votes and no further questions the budget is considered granted.

A little update:

The fusion migrations were further refined via this change to be more careful when rewriting expressions and Neos 8.4 now provides the remaining runtime utilities to allow the new fusion code to work.

Sebastian and me re-evaluated today if we want to add a deprecation log for deprecated EEL Expressions in 8.4 but we decided that it would be of no gain for our users.
The log is already part of Neos 9 via FEATURE: Fusion eel neos deprecation tracer by mhsdesign · Pull Request #5262 · neos/neos-development-collection · GitHub

Following problems make the logs invaluable and impractical for Neos 8.x:

  • we have no idea in the fusion runtime where the eel expression was defined as this information is not preserved
  • we have not migrated our Neos.Neos package to use non deprecated apis - this is not even possible for all cases. The log is thus already swamped with logs from Neos where users have no influence.
  • we would need to adjust Neos.Neos as good as possible and also other packages like Neos.Seo and give them a minor release which will be lots of work.
  • we could store the information where the eel expression was defined - topic source maps in fusion - and thus ignore all logs from “Neos.*”
    → but users are in the end faced with the same problem we have and will not be able to migrate all cases like node.context.dimensions already to non deprecated syntax as 8.4 lacks the replacements.

While it might be easy for a simple page to satisfy the log - a complex site has no chance to become fully 9.0 compatible and especially not with the mentioned problems above. Thus we will not backport this feature - and thus preventing to swamp our users logs;)

1 Like