Labyrinth - A Website In A Box
A Brief History
In 2000 a website management tool, Mephisto, was written, and then implemented as intranets for a number of Local Education Authorities in the UK. Although well designed, developed and deployed, it focused very specifically at the Education market in the UK, and very tightly combined its feature set to the core application. However, it did highlight how it could be implemented for alternative markets and clients.
In late 2002, the design of Labyrinth began, taking many of the good ideas of Mephisto, enhancing where possible, and restructuring the interfaces to better implement websites for any type of use. Taking away the focus of the Education specific features, making them more generic and most importantly ... pluggable ... allowed the core application to be tailored to whatever the client wanted. Added many new features or "plugins" extended Labyrinth even further.
After 8 years of closed source development, despite being used for many successful Open Source websites, it was time to release the code for others to use, improve and adapt. The code base developed prior to version 5.0 remain closed source. However, from version 5.0 the Labyrinth code is now available within a git code repository.
Components
There are 3 components required to building a website with Labyrinth. First is the core application, the library of code that drives each request and allows the business logic to flow through the required features and ultimately present the final file, document, web page or service. Second are the plugins that provide the features for the website. Lastly are the supporting files, including templates, CSS and Javascript files, which harness the specific requirements of the website.
At its heart, Labyrinth is a Model-View-Controller (or MVC) application. This means that the Model is held in the database, the View allows you to translate the data into presentations (typically web pages, but also PDFs, images and other presentation formats) for the client application (e.g. a web browser or your web phone), with the Controller providing the business logic required to extract the data and passing to the presentation layer.
Dynamic Websites
Labyrinth was written specifically to service the needs for a dynamic website. Static websites are typically ones that are infrequently updated, often for businesses who only require a web identity, and do not necessarily run their business online. However, many online businesses need to change rapidly, whether that is to provide news, product lines or interact with their customer base. Labyrinth can be adapted to embrace all these needs and more. Its core plugins already consist of News, Articles, Photo Galleries, Events and Links, but many more exist, such as the Wiki plugin and those for Online Diarys (a.k.a. Blogs), Guestbooks, Discographies and Reviews. In many cases adding a further feature is only a matter of writing the plugin, the templates and queries to add, edit or delete the data. Just because Labyrinth doesn't provide a plugin feature currently, doesn't mean it can't :)
Yet Another Perl Web Framework?
Labyrinth is written in Perl, using a select group of additional library modules available from CPAN. In more recent times web frameworks have become ever more popular, with the likes of CGI::Application, Maypole, Catalyst and Jifty. When Labyrinth was originally designed, only CGI::Application existed, and didn't easily fit the business logic being designed. As such, a whole new controller perspective was implemented. Since then, others, including Catalyst and Jifty, have also reviewed how the controller manages the flow of logic and data from request through to presentation.
While Labyrinth has successfully implemented many types of website, it hasn't had the benefit of many eyes and enthusiasm from other open source developers to build and grow the code base further. Currently Perl's first choice Web Framework is Catalyst. While Catalyst might be suitable for large scale applications and high-availability websites, Labyrinth still has a place for the many smaller scaled websites. It's adaptability to fit many types of website, and extend itself to include newer features as required, may suit some better.