Neos and Flow 9.1 Release

We are thrilled to announce the release of Neos CMS version 9.1 just right on time for the holiday season. With this release we deliver a wide range of UX focused improvements for editors. With the biggest overhaul to inline editing since Neos 1.0 we intend to make editing faster, more reliable and even more intuitive.

 – Written by Sebastian Helzle, Marc Henry Schultz


After the Neos team and many contributors worked for many years on the technical foundations of Neos 9.0, we wanted to shift the focus once again to the editing experience. Neos is known for its great editing features. Nevertheless the Neos core team already decided before the 9.0 release, to use our available funding and development capacity to kickstart several projects, with the goal of giving the user experience a big push. In these projects and with the help of contributors, we covered many wishes and requests we received from the Neos community over the years.

This refreshed focus on the features that every user will experience is only a start, and we hope you will try Neos 9.1 and give us feedback. With further funding and the help of the community we intend to bring many more improvements with Neos 9.2 and 9.3 LTS in 2026!

Table of contents:

Neos 9.1 Release Highlights

Content recovery

When editing content, it can happen that one accidentally or intentionally deletes some content and later notices, that they need it back. When working in a workspace it was always possible in Neos to bring back content in workspaces by discarding the changes applied to a page or content element, but you could only discard all changes made to a single element.

Thanks to the memory of the Event Source Content Repository introduced with Neos 9.0, editors can now revert individual changes. The first feature to make use of this, is the new "Restore" view in the workspace module. It shows a list of all deleted elements, and they can now be brought back with all other changes to an element untouched.

Flow 9.1

With this release we focused fully on the Neos UI and UX. Because of that Flow didn't receive any new features yet we tagged it as time is up for a new release. A major release like Flow 9.0 was allowed to break a few things and because 9.1 isn't one we cannot include bolder refactoring like last time. But we are not finished here. We have a few changes lined up to ensure we are up to date that will eventually make it into Flow 10.

Also it's worth to mention that we spend a significant amount of time on the Dresden sprint on Flow. Various bugs were fixed in proxy generation and PHP annotation support for ORM was implemented as well as we are slowly but continuously improving our code style and type-safety with PHPStan. Further in our big discussion "Future of Neos" we attempted to sync our goals on what we think Flow needs to provide for the future. We always have to balance keeping Flow compatible for our current users as well as reimplementing features in a modern way to be more light, attractive and more stable.

If you have a vision about PHP Frameworks or are an extensive Flow user with new wishes for Flow feel free to shim in on slack in `#flow-core-dev`. We are a small team handling Flow and we could use your help!


Improved migration tooling for Neos 8.3 code

With Neos 9.0.8 and Neos 9.1 we moved the migration of Fusion code and Yaml configuration out of the neos/rector package into the Neos core migrations. So the neos/rector package will only rewrite the PHP code of your application in favour of phprector 2.+ and PHP 8.4+ compatibility. See issue for more details.


Neos UI 9.1 Highlights

The main goal of the Neos 9.1 UX project was to let editors better focus on what they are currently doing and to decrease eye movement and distractions. Through iterations, this led to several changes in the UI.

Reworked toolbars

The formatting options at the top of the editable area have been with us since Neos 1.0. But depending on the size of the browser window, this could mean a long distance to travel with the cursor to select a formatting. At the same time we had to wrap the functionality of the editor with our own code for the best integration. With the latest CKEditor version we were now finally able to remove most of our own code and integrate the editor natively with its own toolbars right where the edited text is. This way the formatting options are now right next to the selected text. The main toolbar shows all block options and upon selecting text, a balloon toolbar shows inline formats.

The new inline formatting toolbars in Neos
The new inline formatting toolbars in Neos 9.1

New formatting options

With native CKEditor integration we were now able to activate additional CKEditor core plugins without any custom Neos code:

  • horizontal line
  • markdown conversion
  • custom style definitions
  • undo/redo
  • codeblock

Especially the custom styles are a great feature and will probably replace a bunch of community plugins:

The text style selection in Neos 9.1
The text style selection in Neos 9.1
The table editor in Neos 9.1
The table editor in Neos 9.1

You can configure the new formatting options in your preset or nodetype property like this:

myPresetOrProperty:
  type: string
  ui:
    inlineEditable: true
    inline:
      formatting:
        code: true
        undo: true
        horizontalLine: true
        styleDefinitions:
          - name: Lead
            element: p
            classes: [ 'lead' ]
          - name: Animated
            element: p
            classes: [ 'animated' ]
          - name: Highlight
            element: span
            classes: [ 'highlight' ]
          - name: Mark
            element: mark
            classes: ['mark']

The content breadcrumb

With the formatting options gone from the top toolbar in the Neos UI, we had many discussions what we do with the space. After various tests, we decided to replace the "Selected Element"-dropdown, which most Neos users probably ignored, or hardly used with something new. With Neos 9.1 we introduce a new selection breadcrumb which not only improves the visibility of the current selection, but also allows directly selecting the parent element, which might be hard to reach in the content area. F.e. the column, that contains a text element.

The context menu in Neos 9.1
The context menu in Neos 9.1

Beside the formatting toolbar, we completely reworked the context toolbar with its element related operations including the new context menu with secondary actions, like the new clone action, that duplicates an element with one click.

While moving the cursor over an element the new structure toolbar will now follow the position and already set the insert position in the creation dialog or when pasting copied content. We intend to improve this even further in the next releases to make the creation of new content even quicker by skipping various dialogs as the UI follows the intention of the user.

A better way to built custom inline editing plugins

With the CKEditor fully integrated into the Neos content area, not only the Neos core plugins benefit, but also custom plugins can now use the full CKEditor API and capabilities. This means you can follow any recent CKEditor tutorial or use community plugins and adapt them with only a bit of glue code for Neos. And you can adjust your existing plugins so that they also show up in the new inline toolbar. We verified that this only requires small code changes and your plugins can support Neos 9.1 and older versions at the same time.

We already have many ideas what kind of editing features we can implement with these new possibilities. The documentation will be updated in the coming weeks.

The new link editor

The link editor in Neos was certainly limited in its functionality. Many projects used some kind of custom version of it or used the famous plugin Sitegeist.Archaeopteryx for enhanced functionality. To finally resolve this situation we decided to not come up with yet another idea, but integrate the solution that the community already loved and integrate it even more tightly into the core.

With Neos 9.1 we deliver a new link editor based on Sitegeist.Archaeopteryx, with an improved layout, more intuitive UI and a tight integration with the new inline editing.

The new Neos link editor
The new link editor

Drag & drop for content

We had drag & drop in parts of the Neos.Ui for many years, but the community always wished for more. So we implemented drag & drop inside the content area. A preview will show you where the dragged element will be inserted and Neos makes sure that the operation is allowed and won't result in an error message.

Each type of link is now shown in a dedicated tab. For node links we show a tree which is familiar from the document tree and for assets the media browser is shown which allows to select one. The link-types are further configurable, see new documentation.

Dragging & dropping content elements
Dragging & dropping content elements
The new Neos content breadcrumb
The new Neos content breadcrumb above the content area

Improved fullscreen mode

The fullscreen mode in Neos also received several improvements. With the new breadcrumb one can select hard to reach parent nodes without the need to go into the content tree. The inspector is now also available in the full screen mode and allows editing images and other properties which are not inline editable. Together with the new toolbars, the fullscreen mode is now a much more capable way of editing content in a more distraction free way.

The new content recovery view in Neos 9.1
The new content recovery view in the Neos workspace module
The fullscreen mode with the breadcrumb and inspector visible
The fullscreen mode with the breadcrumb and inspector visible

Other notable changes

Neos.Demo

We implemented various improvements to the Neos.Demo to show the latest UX features, fixed bugs, modernised Fusion code and implemented blog categories to show the references functionality of Neos 9.0. With these improvements the demo package is once again a great source on how to get your own Neos project started.


Documentation & Support

Upgrade instructions

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

See the release notes above further information.

Contributors

Special thank you to our release team for Neos and Flow 9.1: Sebastian Helzle and Marc Henry Schultz.

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 Johannes Nusko.

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.