Neos and Flow 9.2 release

Finally Neos 9.2 is here, bringing a wealth of improvements to make life easier for editors and developers.

Christian Müller, Marc Henry Schultz, Sebastian Helzle

This release was focused on addressing feedback we got from users when they tried Neos 9.0, 9.1 or older Neos versions. A huge amount of work went into stabilising the new Content Repository to solve various edge cases and bring performance benefits. UI changes were made to make workspaces easier to work with and control access. The framework was updated to support the latest PHP features and code quality has been pushed to a new level.

Neos 9.2 is more than a regular minor release, with nearly 100 contributions to Flow, the Event-store, Content Repository, our UI and more. To ensure we have a stable release today and to also allow early adapters to profit from the major content graph refactoring, we had a longer release phase with four beta releases since end of June.

Continue reading to find out more!

Neos highlights

Faster editing experience through content stream layers

The biggest change in 9.2 is how the content graph stores the structure for each workspace. 

Until now, creating a new workspace meant copying the entire structure of the site into the new content stream. In large sites with hundreds of thousands of nodes this copy was slow, and it happened every time a workspace was created, rebased or published. We have now replaced the full copy with a cheap copy on write using our so-called content stream layers. A new workspace shares the existing structure with its base and records only its own changes in a new layer. Forking a workspace becomes instant, and the amount of stored data drops significantly. This is an implementation detail of the database adapter and does not change how workspaces behave for editors or developers.

The base implementation was followed by two rounds of performance work. These aimed at improving query speed across the board. To make this work measurable, an opt-in performance tracer was added and we have build a benchmark for all graph queries.

TLTR: Publishing, Login, and Switching workspaces is much faster 😊

Neos sprint attendees working at the punkt.de office
Marc Henry explaining the new concept at Neos post-conference sprint earlier this year

Carefully hand-crafted for you ;)

Every year we meet up several times to discuss and work in person to improve Neos. Our intensive discussions and sprints show our love to the detail and our dedicated craftsmanship. We might not always agree on every detail but we share the same passion about creating great software. This partially postponed release underlines the value in quality and excellence over mediocre but fast achievements. Do know that in that spirit most - if not the majority - of code for this release was written by hand and our concepts made were well discussed.

If you want to learn from us and engage in the core, meet us next month at the next sprint in Hamburg.

Atomic event publishing and concurrency safety

A lot of work went into making the content repository safe under parallel load. In 9.0 and 9.1 the events produced by a single command were sometimes committed in several steps. If a second process interfered between those steps, the system could end up in an inconsistent state: dangling content streams were not removed and bloating the system, general invalid event sequences and the fatal case of content streams being left closed after a failure.

Now we commit all events of a command as one atomic batch. Either every constraint holds and the whole batch is written, or nothing is written. This removes the need for recovery strategies for partially committed events, like reopening a content stream. Version checks for workspace events were tightened in the same spirit.

To fully prevent these issues, the event store supports enforcing all constraints at once and we could fully remove content stream closing.

TLDR: Heavy editing in projects with lots of data will not lead to any blockage anymore, to not keep editors from continuing their work.

Make sure to carefully follow the upgrade instructions when upgrading to Neos 9.2, as there is a manual step involved due to these changes!

 

Workspace access control management

The workspace module received the role assignment feature which had been postponed just before the Neos 9.0 release. Administrators can now configure who may view, edit or manage a workspace directly in the backend. When creating a workspace, a simple choice between shared and private access is offered, with a hint to the more detailed configuration afterward.

A screenshot of the workspace access control feature in Neos
The ACL dialog allows control over which groups and users have access to a workspace.

Some other smaller improvements make reviewing changes more comfortable. The last entry of the breadcrumb for a changed document now links to that document in the backend, so editors can jump straight there to make corrections.


Neos UI highlights

Reworked workspace selection dropdown

Less experienced editors often didn't know or forgot that Neos allows working in multiple workspaces. And even if they knew, they didn't know exactly how to switch to other workspaces.

The main reason for this was that the workspace dropdown was hidden inside the publish dropdown. If you always published everything at once and didn't use the dropdown, you might never have noticed one of Neos main features.

As a first big step to solve this, we moved and improved the workspace selector for the first time since the feature had been introduced into Neos. With Neos 9.2 the workspace dropdown is now always visible next to the publish button. If you don't have unpublished changes, you can select from any available workspace you have access to, with the live workspace always on top. If there are many workspaces a search filter is displayed. The list also shows you if a workspace is read-only.

If there are unpublished changes the workspace dropdown receives an orange border and is disabled. In future version of Neos we plan to allow the transfer of unpublished changes to other workspaces. This will help when one starts editing and only after a while realises that they wanted to work in a different workspace 😉.

We are sure that this change makes one of Neos most important features much more accessible!

neos-92-workspace-selector.png
The workspace selector is now always visible
neos-92-workspace-selector-with-changes.png
The workspace selector is disabled when the are unpublished changes

Property scope indicator

This change adds another icon to property editors similar to the help message, but only if the property or reference has a scope defined which affects editing. This should help editors to understand that changes to a property can affect other variants.

The features has already been available since Neos 9.0 and helps keeping data in sync which should be identical for other variants of the same content.

The Neos property inspector showing a scope indicator next to the publication date field
The property scope indicator tells editors whether changes to a property will affect other variants of their content, f.e. translations.

Preview mode indicator

It happened regularly that someone asked in the community (or their Neos expert) why they couldn't edit in Neos anymore. This happened quite often due to a preview mode being selected instead of an editing mode. To make the behaviour more transparent, the preview mode selector has been moved from the primary toolbar closer to the content area. In addition the color of the selector depends on the mode and the content area has a blue outline to indicate to the user when they select a preview mode.

A screenshot of the new preview mode indicator in the Neos UI
The new preview mode indicator in the Neos UI

Housekeeping

Over the years, more and more components were added and extended in the UI. With 9.2 we again started simplifying various components and their usages with a focus on our dropdowns and buttons. This ongoing work leads to a more uniform style, easier maintenance and better accessibility. As with every release we also cleaned up parts of the code to prepare for the next features and improvements.

 

Flow highlights

Proxy classes and modern PHP language features

Flow 9.2 proxy classes have been upgraded to allow for more modern PHP features
as well as reduce the amount of friction produced by having them in place.

  • Methods with a variadic parameter received their collected arguments as a single value instead of as separate ones and failed with a type error as soon as they were proxied or advised. 
  • Final static methods marked for compile-time evaluation caused a fatal error, but only in the production context. 
  • Methods that return by reference quietly lost that property and returned a copy. And a method without a return value could end up never calling the original implementation at all.
  • Constructors are no longer proxied, instead the ObjectManager will do constructor injection at runtime with pre-cached information about the auto-wired arguments.
  • Lazy injection is now done via the PHP 8.4 lazy ghost/proxy features. Everything that can be lazy will be lazy by default. Opt-out is not planned for now, given that these language features are fully transparent for consuming code.

TLDR: Neos & Flow now require PHP 8.4 which allows developers to use the latest language features with full support by the framework.

Platform requirements, code style, housekeeping

As mentioned above, Neos and Flow 9.2 now require PHP 8.4. 

Notable changes:

  • The coding standard moved from PSR-2 to PSR-12, and PHP-CS-Fixer replaces both StyleCI and PHP_CodeSniffer as the single linting tool.
  • The effort to have the entire code base pass PHPStan at level 8 was completed.
  • The framework's tests moved to PHPUnit 11. and prepared for future compatibility with PHPUnit 12.

 

Don’t wait. Use Neos 9.2 now!

We want to thank all beta testers again for trusting us to use this Neos version already for actual projects. We had only positive feedback so far regarding the new publishing. It really shines in comparison to the previous Neos 9 publishing experience. So there is nothing holding you back launching a new project with Neos 9.2.

Also in case you are evaluating an upgrade from Neos 8.3 you should give Neos 9.2 a shot. Neos 8.3 is now in a security only maintenance state, with Neos 8.4 receiving a prolonged maintenance duration. We also provide even more upgrade tools and guides in our documentation to reduce manual work.

Like with other releases Neos 9.2 will have the regular support of one year of bugfixes until end of 2027. So it's best to start implementing your project already now with 9.2!

Documentation & Support

Upgrade instructions

For the full upgrade instructions, please refer to: Upgrade Instructions 9.1 → 9.2

See the release notes above further information.

Real Human Contributors <3

Special thank you to our release team for Neos and Flow 9.2:

Marc Henry Schultz and Christian Müller

Thank you to all financial supporters of the Neos Project - these contributions made many of the new features possible.

Contributors to the release:

With the new login wallpaper contributed by Lukas Neugebauer.

In addition, we want to thank all the contributors who gave us their valuable feedback and ideas. Not every contribution has to be done in code.


Wrapping up

We hope you enjoy this release as much as we do. This has been a big step in the direction of the 9.3 LTS release.

Btw. since April we are also working intensively on new versions of our media management packages and especially multi dimensional and custom metadata editing capabilities for assets. These releases will be independent of the main Neos releases, but will help in many Neos 8 and 9 projects. Stay tuned!

Please send us your feedback in Slack, Github, our forum or via hello (at) neos.io.