Brent Royal-Gordon
and 1 contributors


WWW::Kontent - Highly extensible Perl 6 CMS


Kontent is a web content management system written in Perl 6. It is currently executable in Pugs installations with Parrot available; the storage subsystem included in this installation also requires the Perl 5 interop feature, but an alternate system could be written.

Kontent's basic principle is separation of concerns: whenever possible, the system is separated into swappable components. The webmaster chooses a "supervisor" to interface with their web server and a "store" to hold all pages in the system; individual pages have different "classes" implementing different behaviors; and each page can be displayed with any of several "renderers".

Kontent is simple enough to need only a small amount of configuration, and flexible enough to meet the needs of almost any site. It takes care of the niggling details of web design--tasks like revision control, site templating, and user contributions--leaving only the task of plugging in your own content.


Currently only the CGI supervisor is written, and the only useful store is NarrowDBI. This somewhat simplifies the task of configuring Kontent.

Configuring Kontent takes four steps:

  • Point your web server at the appropriate supervisor somehow. See test.p6 for information on this.

  • Edit kontent-config.yaml with the modules you want to be loaded and your store's configuration.

  • Create the database the store interfaces with.

  • Create the root node: pugs -MWWW::Kontent -e 'WWW::Kontent::make_root'

Some day there should be a set of CGI scripts to automate all of this.

About the Module

WWW::Kontent first loads several core Kontent modules, including WWW::Kontent::Foundation, WWW::Kontent::Exceptions, WWW::Kontent::Request, and WWW::Kontent::Skeleton. It then reads Kontent's configuration file, kontent-config.yaml, from the same directory the supervisor is in. It loads all the modules specified in the modules configuration group, then curries the specified store's make_root and get_root functions to receive the store configuration, storing the resulting functions in WWW::Kontent::make_root and WWW::Kontent::get_root.

It also contains two functions, register_class and register_renderer, and the corresponding hashes %classes and %renderers. These are used to register and locate classes and renderers, respectively. Both functions take a string containing the class or renderer's name (like 'kiki') and the class that name refers to.


Plenty, no doubt; this is an early alpha of an incomplete system written in an experimental language with a constantly-changing interpreter. In particular, be on the lookout for intermittent bugs in Perl 5 interop; these usually manifest as an inability to find DBI methods like execute or fetchrow_arrayref.

Basically, you'd be nuts to try to use this for real right now.


A special thanks to Google and The Perl Foundation for funding and managing this project, and to the Perl 6, Pugs and Parrot teams for their work on the software that made it possible.


This module and all modules and scripts distributed with it are copyright (C) 2005 Brent Royal-Gordon.

This distribution is free software, and may be used, modified and distributed under the same terms as the official Perl 6 distribution if they have been decided, or Perl 5 otherwise.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 52:

=back doesn't take any parameters, but you said =back 4