Find file
Fetching contributors…
Cannot retrieve contributors at this time
135 lines (90 sloc) 3.79 KB

Even though it's still a young project, an active community is starting to emerge around Dancer. Some modules start to appear on CPAN and github to add functionalities, or to extend existing ones.


By default, Dancer comes with support for two templating systems: Template Toolkit and Dancer::Template::Simple, a small templating engine written by sukria. But support for other templating systems are available:

Template::Tenjin by ido

Template::Sandbox by Sam Graham

Template::Tiny by Sawyer

Template::MicroTemplate by me

Template::Mason by Yanick Champoux

Template::Haml by David Moreno


Out of the box, Dancer only has a simple logging system to write to file, but more logging sytems are available:

  • Dancer::Logger::Syslog by sukria

  • Dancer::Logger::LogHandler by me

  • Dancer::Logger::PSGI by me

The last one is for writing directly your log message via Plack. You can use a middleware like P::M::LogDispatch or P::M::Log4perl to handle logs for your application. Even better, if you use P::M::ConsoleLogger, you can have logs from your Dancer application in your javascript console.


To debug your application with Plack, you can use the awesome Plack::Middleware::Debug. I've writen Dancer::Debug (which requires my fork of P::M::Debug), a middleware that add panels, with specific informations for Dancer applications.

To activate this middleware, update your app.psgi to make it look like this:

    my $handler = sub {
        my $env     = shift;
        my $request = Dancer::Request->new($env);
    $handler = builder {
        enable "Debug", panels => [
            qw/Dancer::Settings Dancer::Logger Environment Memory
                ModuleVersions Response Session Parameters Dancer::Version /


Dancer has support for plugins since a few version. There is not a lot of plugins at the moment, but this will soon improve. Plugins support is one of the top priorities for the 1.2 release.

\* Dancer::Plugin::REST

This one is really nice. This plugin, used with the serialization stuff, allow you to write easily REST application.

    resource user => get => sub {    # return user where id = params->{id} },
        create => sub {              # create a new user with params->{user} },
        delete => sub {          # delete user where id = params->{id} },
        update => sub {      # update user with params->{user} };

And you got the following routes:

  • GET user:id
  • GET user:id.:format
  • POST /user/create
  • POST /user/create.:format
  • DELETE user:id
  • DELETE user:id.:format
  • PUT user:id
  • PUT user:id.:format

*** Dancer::Plugin::Database

This plugin, by bigpresh, add the database keyword to your app.

    use Dancer;
    use Dancer::Plugin::Database;

    # Calling the database keyword will get you a connected DBI handle:
    get '/widget/view/:id' => sub {
        my $sth = database->prepare('select * from widgets where id = ?',
            {}, params->{id});
        template 'display_widget', {widget => $sth->fetchrow_hashref};

\* Dancer::Plugin::SiteMap

With this plugin, by James Ronan, a sitemap of your application is created.

Plugin module for the Dancer web framwork that automagically adds sitemap routes to the webapp. Currently adds /sitemap and /sitemap.xml where the former is a basic HTML list and the latter is an XML document of URLS.

you can help! :)

There is still a lot of stuff to do. Don't hesitate to come on to discuss ideas or new features that you would like.