# Catalyst Web Framework

Catalyst (englisch für Katalysator) ist ein freies, in Perl entwickeltes MVC-Webframework, das dazu dienen soll, anspruchsvolle und leicht veränderbare Webanwendungen schnell zu erstellen. Es lehnt sich an bekannte, ähnliche Frameworks wie Maypole, Ruby on Rails oder Spring an, versteht sich aber als Weiterentwicklung. Catalyst setzt seit 2013 auf PSGI/Plack auf.

## Aufbau

Catalyst ist ein MVC-Webframework, das heißt, es werden die drei Schichten Model, View und Controller voneinander getrennt, um die Übersicht zu verbessern und die Wiederverwendbarkeit des erstellten Codes zu erhöhen.
* Im Modell werden die Zugriffsmöglichkeiten auf verschiedene Datenquellen realisiert, beispielsweise zu Datenbanken (über ORMs wie DBIx::Class, CouchDB, Amazon S3, Memcached), Volltextsuchen (Plucene), Webservices (SOAP, XML-RPC), Netzwerkdiensten (LDAP, Akismet, RSS-Web-Feeds …) oder auch lokalen Dateien und Programmen.
* Im View erfolgt die Formatierung der Daten für ein konkretes Ausgabemedium und eine konkrete Situation. Für die Aufbereitung als (x)HTML stehen beispielsweise Template-Toolkit oder HTML::Template zur Verfügung. Es finden sich auch fertige View-Module für die Ausgabe als RSS-Feed, XML-Daten, JSON sowie zur Erstellung von Grafiken, Barcodes oder Dokumenten.
* Der Controller implementiert die Programmlogik der Applikation. Catalyst sorgt dafür, dass die richtigen Controller zur angeforderten URL aufgerufen werden.
Weitere wichtige Gestaltungsprinzipien und Fähigkeiten sind:
* Catalyst ermöglicht es, fast alles in Plug-ins auszulagern, die während des Betriebes geladen oder entfernt werden können.
* Die Software bietet Vereinfachungen üblicher Control-Abläufe durch sogenannte Pattern und flexibles URL-Mapping.
* Catalyst baut auf vielen bewährten Perl-Modulen auf. Es existieren auch viele Werkzeuge und Plugins im CPAN zur freien Verfügung.
* Das Framework beinhaltet einen kleinen HTTP-Server, so dass bis auf eine Standard-Perl-Installation und Catalyst keine weitere Software benötigt wird, um Webanwendungen mit Catalyst zu entwickeln und zu testen.
* Die Kombination mit Ajax oder JSON ist ebenfalls möglich.
* Die Software-Entwicklung fühlt sich dem DRY-Prinzip (don’t repeat yourself – wiederhole dich nicht) verpflichtet, einmal getroffene Festlegungen zum Modell beispielsweise müssen bei weiteren Views nicht wiederholt werden, sondern werden automatisch wiederverwendet. So wird Entwicklungszeit eingespart.

## Entwicklung

Catalyst kann als Weiterentwicklung von Maypole angesehen werden, das eine Zeitlang von Sebastian Riedel gepflegt wurde. Sein Drang, es stärker zu überarbeiten als von einem Großteil der Nutzer gewollt war, führte im November 2004 zu einer Spaltung. Am 15. April 2005 erschien mit Catalyst 5.0 die erste öffentliche Version. Seitdem kamen Christian Hansen, Marcus Ramberg (Release Manager) und Jesse Sheidlower als Hauptentwickler dazu. Am 3. Mai 2006 gab Sebastian Riedel seinen Ausstieg bekannt, um ein neues, Sinatra-ähnliches Mikro-Rahmenwerk zu beginnen, das er später Mojolicious nannte. Die Entwicklung wird vom verbliebenen Team fortgesetzt, das am 8. Juli 2006 die Version 5.7 veröffentlichte. Aktuell ist die im März 2009 fertiggestellte Version 5.8. Version 5.8 ist eine komplette Überarbeitung aufgrund des Perl-Modules Moose, das eine zukunftsweisende OO-Umsetzung in Perl 5 einführt, die an Perl 6 angelehnt ist. Die API ist weitestgehend abwärtskompatibel. Die Plug-ins der Version 5.7 funktionieren uneingeschränkt.
Eine geplante Version 6.0 soll dann vollständig in Perl 6 implementiert sein.
Seit etwa 2008 entwickelte sich Catalyst zum meistverwendeten Perl-Framework seiner Art und wird von der Perl Foundation und Enlightened Perl Organisation als zukunftsträchtiger Standard hervorgehoben und gefördert.

## Verbreitung

Catalyst ist einsatzbereit und wird bereits für einige große Internetseiten verwendet (Liste im Wiki des Projekts). Auch eine Wiki-Software namens MojoMojo basiert auf Catalyst.

## Lizenz

Catalyst ist, wie bei Perl-Projekten üblich, wahlweise unter der GPL und der Artistic License verfügbar.