Content Repository 2.0

Work on an Event-Sourced Content Repository has started!

– Written by


Last week members of the Neos team and guests met in Kiel to work on a new project: Reworking the Content Repository based on an Event-Sourced architecture.

We have been carrying this idea with us for a long time and since our initial Meeting in Frankfurt we have been busy developing the basis for Event-Sourced applications.

Now it was time to get our hands dirty and start putting our ideas and concepts into practice!

Background

The Content-Repository (CR) is one of the core components of Neos. It was there from the beginning and has undergone many iterations:

Originally – and almost 10 years ago – the implementation was based on the "Content Repository for Java" specification (JSR 283).
But we soon realized that we would need behavior that is incompatible with the spec, namely the "shine-through" feature that allows editors to always see the latest content unless they modified it.
So we deviated from the specification and with version 1.1 of Neos we added the base for another very important feature: Content Dimensions.
In the meantime a lot of features have been added including Node Constraints, Search, Access ControlPersonal Workspaces and Publishing Workflows.

This "historically grown power" isn't easy to tame and today we almost don't dare to touch the system in order to fix bugs let alone implement new features.

What new features?

There are many areas that could still be improved. Some features we envision for the future:

  • Versioning (possibly with Undo/Redo functionality)
  • Better performance (for reading nodes)
  • Easier integration with 3rd parties (e.g. with search engines like elasticsearch)
  • More sophisticated publishing/review workflows
  • Traceability / better debugging possibilities
  • Intelligent conflict solution
  • More stability in general

...and many more.

Status and next steps

We can't say which of these features will actually make it into the product and when they will be available to you. But the race is on and we already managed to implement the basis: Creating, updating and moving of nodes including a new Graph Projection that allows for performant interaction with the nodes and their dimensions.

A lot of work is to be done, including a git rebase like functionality and a compatibility layer for the current API. But we are confident that it won't be too long until a first working draft can be published.

If you want to know more about this project or want to support us, you are very welcome to join our #project-cr-rewrite Slack channel and/or meet us at the next sprint (to be announced). And you should definitely read the following blog posts with more details about this:

Further reading

Sebastian Kurfürst has published a technical deep-dive in his company blog – it's strong meat but worthwile!
Christopher Hlubek also published a post (in German) with further background information – easier to digest and also worthwile!