Neos Flow
# Neos Flow

Neos Flow ist ein in PHP geschriebenes freies Webframework, dessen erste Version 2011 erschien. Es wurde in erster Linie als Grundlage für das Content-Management-System Neos entwickelt, lässt sich aber auch unabhängig davon einsetzen. Gegenwärtig wird das System von mehreren großen Konzernen in Deutschland eingesetzt.

Neos Flow setzt auf starke Konventionen, welche die Entwicklung erleichtern da so für Standardaufgaben nur sehr wenig Code geschrieben werden muss. Viele dieser Konventionen sind durch Konfigurationsoptionen einstellbar und somit optional.

Im Vergleich zu anderen PHP Frameworks wie Symfony hat Neos Flow oft ähnliche Konzepte, nutzt aber meist stärkere Konventionen und mehr Automatismen. Neos Flow nutzt zahlreiche Komponenten des Symfony-Projektes und Doctrine ORM als Grundlagen.

Wie viele aktuelle PHP Projekte nutzt Neos Flow Composer zur Paketverwaltung und zur Installation von Erweiterungen. Des Weiteren unterstützt Neos Flow zahlreiche PSR Standards der PHP Framework Interop Group.

## Paradigmen

Die Entwickler von Neos Flow setzen auf eine Reihe von Paradigmen und Entwurfsmustern, die teilweise in der PHP-Szene als innovativ anzusehen sind. Diese Konventionen helfen dem Programmierer, sauber zu programmieren und Fehler zu vermeiden. Zu den Wichtigsten gehören:

* MVC
* Aspektorientierte Programmierung
* Domain-driven Design
* Dependency Injection
* Testgetriebene Entwicklung
* Signal-Slot-Konzept
* Event Sourcing und CQRS

Bei der Entwicklung von Neos Flow wurde konsequent darauf geachtet, dass selbst-geschriebener Code nur minimale Abhängigkeiten von der API von Neos Flow hat. Dadurch lassen sich Module, die ursprünglich für andere Systeme (etwa Symfony) geschrieben wurden, mit wenig Aufwand innerhalb von Neos Flow nutzen. Auf diese Art kann selbst-geschriebener Code auch bei Veränderungen der Codebasis von Neos Flow in vielen Fällen ohne Anpassungen weitergenutzt werden.

## Template-Engines

Neos Flow kann mit der Template-Engine TYPO3 Fluid oder mit der Rendering Engine Neos Fusion verwendet werden.

Die Fluid Template Engine wurde ursprünglich vom Neos Team (damals TYPO3 Phoenix Team) innerhalb des Neos Projektes entwickelt wird aber auch innerhalb von TYPO3 stark genutzt. Im Zuge der Trennung von Neos und TYPO3 verblieb Fluid im TYPO3 Projekt und wird von Neos heute als externe Abhängigkeit genutzt.

## Entwicklung und Community

An Neos kann ausnahmslos jeder mitwirken. Innerhalb des Projekts kümmert sich das Neos Team um die regelmäßige Weiterentwicklung. Als Entwicklungsplattform dient Github. Zusätzlich finden regelmäßige sogenannte Sprints statt auf denen die Entwicklung fokussiert voran getrieben wird.

Neue Versionen erscheinen alle vier Monate. Neos Flow nutzt dabei Semantic-Versioning und veröffentlicht Änderungen, die nicht abwärtskompatibel sind, nur mit neuen Hauptversionen. Vor der Veröffentlichung einer neuen Hauptversion wird jeweils eine Version mit Langzeitunterstützung (Long-Term-Support, kurz LTS) veröffentlicht.

Seit 2017 findet einmal jährlich die Neos Konferenz statt, auf welcher sich Entwickler und Anwender treffen. 2020 fand die Konferenz aufgrund der Covid-19 Regularien erstmals als reines Online-Event statt. 2012 bis 2016 gab es als Vorläufer der Neos Conference die "Inspiring Conference", welche ebenfalls die Themenschwerpunkte Flow und Neos hatte.

Im Jahr 2017 wurde die Neos-Foundation als CIC nach britischem Recht gegründet. Sie hat die Förderung der Entwicklung von Neos und der Neos-Community zum Ziel.

## Geschichte und Ursprung

Im Jahr 2006 wurden erste Überlegungen zu einem Nachfolger von TYPO3 und damit auch zu TYPO3 Flow angestellt. Im Jahre 2007 begannen Robert Lemke und Karsten Dambekalns in Vollzeit an der Entwicklung von TYPO3 Flow zu arbeiten. Geplant war zunächst ein Refactoring des TYPO3 Kerns. Jedoch wurde schnell klar, dass neue Konzepte umfassende Änderungen erfordert hätten, die letztendlich die Stabilität des Systems hätten gefährden können. So entschloss man sich, sich für die neue Version von der alten Codebasis zu trennen, die in den Anfängen von TYPO3 wurzelte und teilweise nicht objektorientiert war.

Ziel war es, eine moderne und zukunftssichere Basis für weitere TYPO3-Versionen zu schaffen. Einhergehend mit der Verwendung von modernen Konzepten, Techniken und Entwurfsmustern hatten die Entwickler zu Beginn unter anderem mit Problemen der in PHP 5.3 neu eingeführten und damals noch fehlerbehafteten Implementierung von Namespaces zu kämpfen.

Um der Community später den Umstieg und die Migration von Modulen von TYPO3 CMS (Versionen 4 und 6) auf TYPO3 Flow zu erleichtern, wurden seit TYPO3 4.3 viele in TYPO3 Flow zum Einsatz kommende Techniken nach TYPO3 portiert. Dazu gehört auch die im Zuge von TYPO3 Flow entwickelte Template-Engine Fluid sowie Paradigmen wie MVC oder Domain-driven Design. Diese Annäherung von TYPO3 CMS an TYPO3 Flow wurde auf den Transition Days 2008 in Berlin beschlossen.

Im Juni 2009 erschien mit FLOW3 1.0.0 die erste Alpha-Version, im August 2011 die erste Beta-Version. Am 20. Oktober 2011, gut zwei Jahre nach der Veröffentlichung der ersten Alpha-Version, wurde die finale Version 1.0.0 freigegeben.

2012 wurde die Umbenennung von FLOW3 in TYPO3 Flow bekannt gegeben. Die Entwickler wollen dadurch die Marke TYPO3 ins Zentrum stellen und die Verwandtschaft zum CMS stärker verdeutlichen. Das CMS-Projekt als dessen Grundlage FLOW3 entwickelt wurde in diesem Zuge in TYPO3 Neos umbenannt.

Im Mai 2015 wurde im Einvernehmen mit der TYPO3 Association die Trennung des Neos Projekts zu einer unabhängigen Entwicklung entschieden und daraufhin Schritt für Schritt durchgeführt. Seither trägt das Framework den heutigen Namen Neos Flow.

Im Juni 2015 wurde die Lizenz für das Framework von der LGPL, Version 3 oder höher zur MIT-Lizenz geändert.

Mit dem Release von Version 3.0 im August 2015 hat sich das Projekt einem vierteljährlichen Release-Zyklus synchron zum Neos CMS verpflichtet.

Im August 2016 wurde die erste Long-Term Support Version 3.3 veröffentlicht, welche Support mit Bugfixes bis August 2018 und erweiterten Security Support bis August 2019 verspricht.

### Wichtige Versionen

| Legende: | Ältere Version; nicht mehr unterstützt | Ältere Version; noch unterstützt | Aktuelle Version | Aktuelle Vorabversion | Zukünftige Version |
| - | - | - | - | - | - |
| Paket-Name | Version | Unter- version | Veröffentlichung | Wichtigste Änderungen |
| FLOW3 | 1.x | Ältere Version; nicht mehr unterstützt: 1.0.0 Alpha 1 | 2. Juni 2009 | Erste Alpha-Version veröffentlicht; in der Folge diverse Alpha, Beta und RC-Veröffentlichungen. |
| FLOW3 | 1.x | Ältere Version; nicht mehr unterstützt: 1.0 | 20. Oktober 2011 | Release von Version 1.0.0. Sollte TYPO3 Flow als Fundament für das geplante TYPO3 Neos dienen. |
| FLOW3 | 1.x | Ältere Version; nicht mehr unterstützt: 1.1 | 24. August 2012 | Verbesserung der Performance, Ausbau des Package Repository. Das Package Repository ist ein Marktplatz für Erweiterungen vergleichbar mit dem TYPO3 TER. Cookie-Management, Content-Aushandlung für Media-Typen, Cache-Header und Expiration-Modelle sowie ein virtueller HTTP-Client für Testszenarien sind nun verfügbar. Ebenso Internationalisierung mittels Übersetzungsdateien im XLIFF-Format auf Package-Basis. |
| TYPO3 Flow | 2.x | Ältere Version; nicht mehr unterstützt: 2.0 | 12. Juli 2013 | Lokalisation des Frameworks (z. B. Objekte, Label, URLs…) |
| TYPO3 Flow | 2.x | Ältere Version; nicht mehr unterstützt: 2.1 | 10. Dezember 2013 | |
| TYPO3 Flow | 2.x | Ältere Version; nicht mehr unterstützt: 2.2 | 23. Juni 2014 | Fehlerkorrekturen, Performanceoptimierungen, Verbesserte Exception Ausgabe, Neue ViewHelper und Unterstützung für HTML5 Data-Attribute für die Template Engine Fluid, Anpassung der Tests an PHPUnit 4.1 |
| TYPO3 Flow | 2.x | Ältere Version; nicht mehr unterstützt: 2.3 | 14. November 2014 | |
| TYPO3 Flow | 3.0 | Ältere Version; nicht mehr unterstützt: 3.0 | 11. August 2015 | |
| TYPO3 Flow | 3.0 | Ältere Version; nicht mehr unterstützt: 3.1 | 15. Dezember 2015 | |
| TYPO3 Flow | 3.0 | Ältere Version; nicht mehr unterstützt: 3.2 | 4. Mai 2016 | |
| TYPO3 Flow | 3.0 | Ältere Version; nicht mehr unterstützt: 3.3 (LTS) | 22. August 2016 | Erste Long-Term-Support Version, Konfiguration durch Umgebungsvariablen, "Vertrauenswürdige Proxies" Konfiguration, Doctrine ORM 2.5, PHP 7.0 Typen Deklarationen |
| Neos Flow | 4.x | Ältere Version; nicht mehr unterstützt: 4.0 | 30. Januar 2017 | Neuer "Neos" Namespace, PHP 7.1 Support, kein PHP 5.x Support mehr, PSR-4 Autoloading als Standard, Standalone Fluid |
| Neos Flow | 4.x | Ältere Version; nicht mehr unterstützt: 4.1 | 28. April 2017 | |
| Neos Flow | 4.x | Ältere Version; nicht mehr unterstützt: 4.2 | 30. August 2017 | PSR 7 Kompatibilität im HTTP stack |
| Neos Flow | 4.x | Ältere Version; nicht mehr unterstützt: 4.3 (LTS) | 20. Dezember 2017 | PHP 7.2 Kompatibilität, FlexibleresRouting |
| Neos Flow | 5.x | Ältere Version; nicht mehr unterstützt: 5.0 | 26. April 2018 | PSR 6 und PSR 16 Kompatibilität im Cache Framework, PSR 3 Kompatibilität im Logging, utf8mb4 als Standardzeichensatz |
| Neos Flow | 5.x | Ältere Version; nicht mehr unterstützt: 5.1 | 29. August 2018 | |
| Neos Flow | 5.x | Ältere Version; nicht mehr unterstützt: 5.2 | 3. Dezember 2018 | |
| Neos Flow | 5.x | Ältere Version; noch unterstützt: 5.3 (LTS) | 15. April 2019 | |
| Neos Flow | 6.x | Ältere Version; noch unterstützt: 6.0 | 20. September 2019 | |
| Neos Flow | 6.x | Ältere Version; noch unterstützt: 6.1 | 16. Dezember 2019 | |
| Neos Flow | 6.x | Ältere Version; noch unterstützt: 6.2 | 30. April 2020 | |
| Neos Flow | 6.x | Ältere Version; noch unterstützt: 6.3 (LTS) | 9. September 2020 | PSR 15 Middleware Kompatibilität im HTTP Stack |
| Neos Flow | 7.x | Ältere Version; noch unterstützt: 7.0 | 15. Dezember 2020 | Minimale PHP Version 7.3+, PSR-15 Middleware, schnelleres und besser erweiterbares Routing |
| Neos Flow | 7.x | Aktuelle Version: 7.1 | 30. April 2021 | PHP 8 Support, Fusion option für Kickstarter |
| Neos Flow | 7.x | Zukünftige Version: 7.2 | September 2021 | |
| Neos Flow | 7.x | Zukünftige Version: 7.3 (LTS) | Dezember 2021 | |

Der aktuelle Entwicklungsstand kann im Git-Repository und im Bugtracker verfolgt werden.

