von Yanick Witschi

Rückblick auf das zweite Core-Entwicklertreffen 2025

Jedes Jahr trifft sich das Contao Core-Entwicklerteam zweimal für einen kurzen Code-Sprint von drei Tagen. Getroffen haben wir uns dieses Mal wieder im Unperfekthaus in Essen.

Wie es Tradition ist, startete das Entwicklertreffen schon am Sonntag, aber bei diesem Treffen haben wir das Ganze noch ein bisschen ausgeweitet: Statt wie gewohnt bis Mittwoch zu bleiben, ging es diesmal erst am Donnerstag zurück nach Hause. Das bedeutete drei volle Tage geballte Contao-Power – noch mehr Zeit für unser Lieblings-CMS!

Daher ist der obligatorische Hinweis noch wichtiger, als er das sonst ohnehin schon ist: Die Entwicklertreffen sind für die Weiterentwicklung von Contao entscheidend und daher mache ich wie immer darauf aufmerksam, dass die Contao Association diese Treffen finanziert. Als Supporter kannst du deinen Teil dazu beitragen.

Auch dieses Mal hat das Projektteam wieder an uns gedacht und ein kleines Care-Paket vorbereitet. Ein herzliches Dankeschön an Marcus fürs Organisieren und Zusammenstellen! Insbesondere die "Twig"-Idee sorgte gleich zum Start für gute Laune – eine schöne Tradition, die mittlerweile fast so fest zum Entwicklertreffen gehört wie die hitzigen Diskussionen, welche die Schokolade gelegentlich zum Schmelzen bringen. Fotos im Anhang.

Contao 5.7 LTS und Contao 6

Das grösste Thema bei diesem Treffen war natürlich die kommende Contao 5.7 LTS – die nächste Long-Term-Support-Version, die uns bis ins Jahr 2030 begleiten wird. 2030 - wow 🤯 Damit ist die 5.7 nicht nur ein weiteres Release, sondern auch die letzte grosse Chance, Dinge anzupassen, die uns dann eben wieder vier Jahre lang begleiten werden.

Die Mindestanforderung an PHP werden wir voraussichtlich auf PHP 8.3 anheben und wie immer bei unseren LTS-Releases, wird die neuste Symfony Version 7.4 LTS, die im November 2025 erscheinen wird, unser Fundament bilden.

Wir haben auch über den möglichen Release-Zeitpunkt von Contao 6 gesprochen. Wer regelmässig einen Blick auf unsere Roadmap wirft weiss, dass gem. dieser Roadmap nach Contao 5.7 nicht etwa Contao 5.8, sondern eben Contao 6.0 erscheinen soll.

Allerdings ist das noch nicht in Stein gemeisselt. Die finale Entscheidung wollen wir auf dem nächsten Entwicklertreffen im Frühjahr 2026 treffen. Ein entscheidender Faktor dabei wird sein, wie weit wir beim Thema Input-Encoding kommen – dazu mehr im nächsten Abschnitt.

Wichtig: Ihr wisst es alle – wir halten uns strikt an Semantic Versioning. Das bedeutet: Sobald es API-Breaks gibt, müssen wir dem CMS eine neue Major-Version verpassen.

Das heisst aber nicht, dass beim Umstieg von Contao 5 auf Contao 6 alles anders wird. Wir werden wie bis anhin sehr vorsichtig abwägen, welche Breaks wir einführen und welche nicht. Beispiel: Niemand zwingt uns den Support für Contao 3 Module (system/modules) zu entfernen. Der BC-Layer ist seit Version 4.0 drin, überschaubar was den Wartungsaufwand betrifft und aktuell gibt es deshalb auch keinen Grund, diesen zu entfernen. Nur weil wir können, heisst noch lange nicht, dass wir müssen.

Lasst euch also nicht von der „6" abschrecken. Es ist keine Revolution, sondern eher eine saubere Weichenstellung für die Zukunft - so wie es Contao 5 eben auch war.

Input-Encoding

Ein Thema, das uns schon seit Jahren begleitet, ist das Input-Encoding. Contao führt dieses Konzept mittlerweile seit fast 20 Jahren mit sich herum, und mit jeder neuen Version versuchen wir, Schritt für Schritt näher an ein sauberes Output-Encoding heranzukommen.

Warum das wichtig ist, zeigt ein Blick auf die OWASP Top 10: A03 Injection – und dazu gehört auch XSS – zählt immer noch zu den Top 3 der häufigsten Angriffsvektoren. Fehlendes oder fehlerhaftes Output-Encoding spielt dabei eine zentrale Rolle.

Ein entscheidender Baustein auf unserem Weg weg vom Input-Encoding ist Twig. Twig bringt Output-Encoding standardmässig mit und ist daher der Schlüssel, um Contao langfristig sicher aufzustellen. Das bedeutet aber auch: Wir müssen vollständig auf Twig setzen und unsere alten html5 Templates entfernen. Es führt kein Weg daran vorbei, wenn wir weiterhin als sicheres CMS gelten wollen.

Martin und Moritz haben sich während des Entwicklertreffens wieder intensiv mit diesem Thema auseinandergesetzt und dabei einen grossen Durchbruch erzielt:
Sie haben einen Weg gefunden, im Core alle (!) Templates von html5 auf Twig umzuschreiben – und zwar so, dass dies in Contao 5.7 keine bestehenden Anpassungen braucht.
Bspw. ein in der Applikation angepasstes mod_article.html5 würde also nicht plötzlich ignoriert. Ein extrem wichtiger Schritt auf dem Weg zu einem sauberen Output-Encoding!

Eine mögliche Idee, die wir diskutiert haben, ist, dass Contao 6 rein aus dem Wechsel von Input- zu Output-Encoding bestehen könnte. Das würde bedeuten:

  • Die Daten in der Datenbank müssten migriert werden.
  • Es würden nur noch Twig-Templates unterstützt.

Aber, und das ist wichtig: Hier sind noch einige Fragen offen, und nichts ist final entschieden.

Nichtsdestotrotz, der allgemeine Hinweis: Wer immer noch html5 Templates schreibt, sollte besser gestern damit aufhören und mit Twig arbeiten.

Abschaffung von Frontend-Modulen

Beim letzten Entwicklertreffen haben wir entschieden, dass die Frontend-Module langfristig zu Gunsten von Inhaltselementen verschwinden werden. Ich habe damals bereits ausführlich darüber geschrieben.

Ein grosses Problem bei der Umstellung: Viele der aktuell in den Modulen verfügbaren Datenbankfelder (über 80!) sind bisher nicht Teil von tl_content, sondern nur von tl_module.
Würden wir diese einfach so übernehmen, würden wir schnell auf die bekannten "Row-Size"-Probleme stossen – denn Datenbanken können nun mal keine Tabellen mit beliebig vielen Spalten verarbeiten.

Ich habe bereits beim Entwicklertreffen 2023 versucht, einen Ansatz mit einem JSON-Datentypen zu bauen. Die Idee war auch schon damals, mehrere Felder in einer einzigen JSON-Spalte zu speichern und so die Spaltenanzahl zu reduzieren.
Damals bin ich allerdings an verschiedenen Limitierungen gescheitert – sowohl konzeptionell als auch technisch.

Dieses Mal haben wir die Anforderungen überarbeitet, sodass etwa aus diesen Feldern weder gefiltert noch gesucht werden können soll und dass sie auch nicht als Subpaletten-Trigger dienen können. Zusätzlich haben wir inzwischen neue technische Möglichkeiten (bspw. DataContainer::getCurrentRecord()). Fritz hat daher einen neuen Anlauf gewagt und Stand heute sind wir zuversichtlich, dass wir in Contao 5.7 endlich (!) eine Lösung für "virtuelle DCA-Felder" liefern können!

Parallel dazu hat Dave das gesamte Entwicklertreffen genutzt, um weitere Frontend-Module konsequent zu Inhaltselementen umzuschreiben – ein wichtiger Schritt, der nicht einfach nur aus "Copy & Paste" besteht, sondern natürlich auch dazu genutzt wird, die entsprechenden Elemente zu modernisieren (bspw. Symfony Forms für Formulare etc.).

Pagination

Wenn wir schon bei modernen Elementen und Twig-Templating sind, darf ein weiteres Thema nicht fehlen: die gute alte Pagination-Klasse.
Die existiert schon seit einer halben Ewigkeit und ist, ehrlich gesagt, ziemlich in die Jahre gekommen. Bisher spuckt sie am Ende einfach nur einen fertigen HTML-String aus – ohne die Möglichkeit, die einzelnen Komponenten wie "vor", "zurück" oder die Seitennummern gezielt im Template anzusteuern.

Fritz hat sich dieser Baustelle angenommen und eine komplett neue Pagination entworfen. Diese ermöglicht es, die einzelnen Bestandteile viel flexibler im Template zu verwenden und sorgt so für sauberes, modernes Markup.

In seinem Pull Request hat er bereits alle Verwendungen im Core durch die neue Implementierung ersetzt. Und das war richtig viel Arbeit, denn die Pagination wird an vielen Stellen verwendet – unter anderem im Feed-Reader, im Galerie-Inhaltselement, in den Backend-Listen, bei allen Listen-Frontend-Modulen, bei Kommentaren und vielem mehr.

Row Wizard

Sebastian und Andy haben zusammen ein neues Widget namens Row Wizard entwickelt. Viele Entwickler*innen aus der Community kennen vielleicht den "MultiColumnWizard" (kurz "MCW"), der die Definition von beliebigen Widgets und das Duplizieren von Zeilen erlaubt. Der Row Wizard ist sein moderner Ersatz für die meisten Anwendungsfälle und wird ab Contao 5.7 direkt im Core verfügbar sein.

Der bisherige "Key-Value Wizard" ist quasi ein Row Wizard mit zwei Feldern (nämlich key und value) und wird damit überflüssig. Wir deprecaten diesen entsprechend und werden ihn irgendwann aus Contao entfernen. Die Migration auf den neuen Row Wizard ist denkbar einfach und erfordert lediglich eine Anpassung im DCA. Das existierende Format in der Datenbank ist vollständig kompatibel und eine Datenmigration ist daher nicht erforderlich.

Erweiterung der Backend-Suche

Mein persönliches neues Baby ist die in Contao 5.5 eingeführte Backend-Suche, welche ich für Contao 5.7 nun nochmal deutlich erweitert habe. Ab Contao 5.7 kann sie nämlich jetzt facettiert werden! Das bedeutet, man kann nicht mehr nur einfach nach einem Keyword suchen, sondern die Suchresultate neu auch gezielt nach Typ einschränken – zum Beispiel, um nur Treffer vom Typ News oder Artikel anzuzeigen.

Im Falle von Dateien geht das sogar noch einen Schritt weiter: Dort kann man zusätzlich nach der Datei-Extension filtern und sich z. B. gezielt nur PDF-Dateien anzeigen lassen

Ein Grossteil der Arbeit fand auch schon vor dem Treffen statt: In den letzten Monaten habe ich sowohl Loupe als auch SEAL um die Unterstützung für Facetten erweitert.

Die Implementierung in Contao 5.7 ist nun sozusagen die Ernte dieser langen Vorarbeit.

Ein grosses Dankeschön geht ausserdem an Sebastian, der meine fehlenden Styling-Skills mehr als wettgemacht und sich um die schöne Darstellung im Backend gekümmert hat.

Attachments für das neue Jobs-Framework

Wenn ich schon bei meiner Wenigkeit bin, dann ergänze ich an dieser Stelle noch, dass das in Contao 5.6 eingeführte Jobs-Framework in 5.7 um Attachments ergänzt wird. So können also dann einem Job beliebige Anhänge hinzugefügt und schliesslich von einem User via Backend heruntergeladen werden. Ich habe ausserdem damit begonnen, die aktuelle Implementierung des Crawlers in der Systemwartung auf das neue Job-Framework umzubauen, um eine einheitliche UX zu garantieren.

User Experience – viele kleine und grosse Schritte für eine bessere Bedienung

Wenn wir schon beim Thema UX sind, möchte ich an dieser Stelle auf einige Verbesserungen eingehen, an denen fleissig gearbeitet wurde. Zwei davon stechen besonders heraus, auch wenn viele andere mindestens genauso wichtig sind.

Twig und Ace

Ace ist unser Editor im Twig Template-Studio. Er unterstützt grundsätzlich Syntax-Highlighting für Twig, aber das Regel-Set, das dort zum Einsatz kommt, ist hard-coded und nicht immer auf dem neuesten Stand. Doch selbst wenn dieses Regel-Set die aktuelle Twig-Version abbilden würde, wüsste es dennoch nichts über die ganzen Contao-spezifischen Funktionen – oder über Twig-Funktionen, Filter und Tags, die durch Erweiterungen hinzukommen. Ein gutes Beispiel sind unser eigenes Slot-Konzept oder Funktionen wie figure() und attrs().

Moritz hat dieses Problem gelöst, indem er ein dynamisches Regel-Set entwickelt hat, das die Informationen direkt aus unserem Twig-Environment extrahiert. Das bedeutet, dass künftig alle Contao-spezifischen Twig-Funktionen, Filter und Tags automatisch erkannt und im Editor korrekt hervorgehoben werden. Das Arbeiten im Template-Studio wird dadurch spürbar angenehmer!

Referrer-Management

Contao verfügte schon immer über eine interne „zurück"-Logik. Es gibt den „Zurück"-Button oben rechts, ausserdem Operationen wie „Speichern und schliessen" oder „Speichern und zurück". Diese Funktionen basierten bisher auf einer recht komplexen Logik, die versucht hat, in der Session festzuhalten, von wo ein Benutzer ursprünglich gekommen ist. Das führte häufig zu inkonsistentem Verhalten und machte es fast unmöglich, Fehler zu reproduzieren. In manchen Fällen landete man nach einer Aktion sogar auf scheinbar völlig zusammenhangslosen Seiten.

Wir haben uns daher entschieden, das gesamte Referrer-Management zu überarbeiten. Statt der bisherigen dynamischen Logik setzen wir künftig auf hierarchische Navigationslinks. Damit wird das Navigationsverhalten deterministisch und nachvollziehbar. Alle Links im Backend werden künftig keine ref-Parameter mehr enthalten, und das Ergebnis ist eine deutlich konsistentere UX. Martin hat sich intensiv mit diesem Thema beschäftigt, und ich kann euch sagen: Es fühlt sich jetzt schon so viel besser an! Vielleicht gibt es noch einzelne Sonderfälle, die wir später anpassen müssen, aber in jedem Fall wissen wir dann, warum der Link dahin zeigt, wo er eben hinzeigt und es ist nicht mehr so, dass es für User A anders sein kann als für User B. Alleine das ist ein absoluter Win für Contao und eine einheitliche UX!

Weitere UX-Verbesserungen

Daneben gab es noch viele weitere Änderungen und Konzeptideen, die die Bedienung von Contao verbessern sollen:

  • Sebastian hat zusammen mit Andy die Toolbar-Funktionen überarbeitet. Die Favoriten wandern künftig in den Breadcrumb und Funktionen wie der Dark-/Light-Mode-Switch wandern in das Profil-Dropdown. Alles so, dass die wichtigsten Funktionen schnell erreichbar bleiben.
  • Andy hat ausserdem mit der Idee einer neuen Operation in den "Parent Views" gespielt, die das Einfügen von neuen Elementen zwischen bestehenden Elementen viel komfortabler macht.
  • Ein grosser Teil von seiner Arbeit floss auch in den Dateimanager: Die Permissions und Operations und somit auch das Kontextmenü sollen sich dort künftig entsprechend konsistent mit dem Rest des Backends verhalten.
  • Apropos Kontextmenü: Hier sind wir mit dem aktuellen Stand in Contao 5.6 noch nicht ganz zufrieden und haben an Konzepten gearbeitet, wie wir die Operations für Contao 5.7 überarbeiten können.
  • Sebastian und Andy haben ausserdem wieder viele Funktionen in Stimulus überführt. Dadurch konnten wir unsere Abhängigkeit von MooTools weiter reduzieren – wir sind jetzt bei nur noch wenigen Prozent im Vergleich zum gesamten JavaScript-Anteil im Backend. Die vollständige Entfernung von MooTools rückt damit in greifbare Nähe. Gleichzeitig bringt dieser Umbau auch Vorteile bei der Wiederverwendbarkeit der Komponenten. So ist es künftig zum Beispiel möglich, im Checkbox-Wizard (z. B. bei den Benutzerberechtigungen) mit gedrückter Shift-Taste mehrere Checkboxen gleichzeitig auszuwählen. Ausserdem kann man nun Datensätze für den "Mehrere bearbeiten"-Modus ohne Seiten-Reload und sogar bequem per Tastenkombination auswählen.
  • Dank Sebastian ist die Preview-Toolbar im Frontend jetzt im Shadow-DOM untergebracht, was zu weniger unerwarteten Seiteneffekten führt. Ausserdem haben wir mit Seiten-Transitions im Backend experimentiert, um ein flüssigeres "App-Feeling" zu erreichen.
  • Leo hat dem Backend ein frischeres Look & Feel verpasst. Die linke Spalte hat keinen separaten Hintergrund mehr, Abstände und border-radius-Werte wurden vereinheitlicht und das Backend wirkt insgesamt deutlich luftiger. Auf seiner To-do-Liste steht ausserdem noch die Überarbeitung der Popups, die ebenfalls ein wenig in die Jahre gekommen sind.

Alles in allem sind das viele kleine Schritte, die zusammen eine spürbar modernere und konsistentere UX ergeben – und Contao 5.7 wird sich damit garantiert noch runder anfühlen.

Diverses

Wie bei jedem Entwicklertreffen gab es auch diesmal wieder eine Reihe von Hausaufgaben, die vielleicht nicht besonders spannend klingen, aber trotzdem enorm wichtig sind, damit Contao langfristig stabil und zukunftssicher bleibt.

So haben wir unter anderem PHPUnit auf die aktuelle Version 12 aktualisiert und in Vorbereitung auf die kommende Symfony Version 7.4 bereits alle Abhängigkeiten auf Symfony 7.3 umgestellt. Das sorgt dafür, dass wir beim kommenden Symfony-Upgrade möglichst reibungslos wechseln können.

Und nicht zuletzt: Wir haben während des Treffens über 30 Bugs gefixt.
Viele davon waren kleinere Probleme, andere eher richtig knifflige Sachen (bspw. das Seitentitel-Problem im Breadcrumb) – insgesamt ein grosser Schritt, um Contao noch stabiler zu machen.

Ansonsten möchte ich nochmal auf die Contao Konferenz vom 25. - 26.09.2025 in Düsseldorf aufmerksam machen. Ich wünsche mir, dass möglichst viele den Weg an den Rhein finden und mit uns auf das Erreichte anstossen!

That's all Folks, wir sehen uns in zwei Wochen!

– Yanick

Yanick Witschi

Über Yanick Witschi

Yanick ist Caching- und Resolverheld von Contao und dafür mitverantwortlich, dass deine Kaffeepause seit der Umstellung auf Composer 2 um einiges kürzer ausfällt. Er war Mitbegründer und der erste Präsident des Vorgängervereins der Contao Association. Als Core-Entwickler steckt er viel Herzblut in Contao. Bei terminal42 hebt er mit den Kunden regelmässig ab. Ausserdem liebt er die Küche, Basketball, Tennis, Politik, den afrikanischen Kontinent und Astrophysik.

Kommentare

Kommentar von Marcus Lelle |

Danke, Yanick, für diesen sehr ausführlichen Bericht. Denn kann man dreimal lesen und entdeckt immer noch etwas Neues.
Schön, wenn wir euch mit unserem Paket ein Lächeln ins Gesicht und Motivation in die Finger zaubern konnten. So soll es sein.

Ich freue mich schon auf Düsseldorf und viele alte und neue Gesichter in der Community.

Kommentar von Franko |

Ich kann gar nicht ausdrücken, wie sehr ich diese Zusammenfassungen und Ausblicke schätze!
Danke Yanick für diesen Rückblick. Dank dem Team für das Engagement und deren Weitsicht.
Danke Marcus für die Unterstützung & dem »Feel Good« Faktor.

Lieben Gruß
Franko

Kommentar von Andreas Fieger |

Danke an Yanick für den (wie immer) tollen Bericht vom Entwicklertreffen. Auf den"JSON-Datentyp" freue ich mich besonders.
Werde leider nicht in Düsseldorf dabei sein.

Kommentar von Sascha |

Vielen Dank für den Bericht und eure Arbeit.
"Krass", was Ihr in nur 3 Tagen alles bewegt habt.

Kommentar von Oliver Willmes |

Danke für den Bericht und die vielen Stunden intensiver Arbeit am Projekt Contao.

Wir sehen uns in Düsseldorf.

Kommentar von Niels Hegmans |

Das hört sich großartig an. Vielen Dank für den Bericht, Yanick! Verrückt, wie viel ihr geschafft habt. Ich freue mich riesig auf die 5.7.

Einen Kommentar schreiben

Bitte rechnen Sie 5 plus 4.