Dancer::Development - guide for developers interested in contributing


This guide has been written to help developers of the project in their daily needs. This guide is the reference for any developer working on Dancer.

If you want to contribute code to Dancer you should first start by reading this guide.


There are many ways to contribute to the project. Dancer is a young yet avtice project and any kind of help is appreciated.


You don't have to start by hacking the code, spreadign the good words in valuable as well. If you have a blog, just feel free to speak about Dancer.

If you're a twitter user, you can tweet about it with the hashtag #perl.


We do give lots of importance to documentation, but it's difficult to keep it up-to-date and error-prone. If you find a typo or an error in a documentation you can submit a patch with your fix (see "Patch submission").

Quality Assurance

We call "Quality Assurance" the fact that we keep in mind that Dancer should ne able to install into all version of Perl since Perl 5.8, on any platforms.

We should avoid as much as possible regressions and backward compatibility should be always in mind when refactoring.

Quality supervision

Our weapon for being aware of our quality is the CPAN testers platform:

A good way to help the project is to find a failing build log on the CPAN testers:

If you find a failing test report, feel free to report it as a GitHub issue:

Reporting bugs

We prefer to have all our bug reports on GitHub, in the issues section: <>. It's possible though to report bugs on RT as well:

Please make sure the bug you're reporting is not yet present, in doubt ask on IRC.

Patch submission

The Dancer's development team uses GitHub to collaborate. Any contribution must be submited via GitHub. Here is the workflow for submitting a patch:

  • Fork the repository

  • Clone your fork like the following:

        $ git clone <PATH_TOUR_GIT_CLONE>
  • Switch to the appropriate branch. If you're patch fix a bug a bug or update one of the documentation, you should work on the master branch. For everything else, switch to the devel branch.

        $ git checkout devel
  • Apply your patch to your clone and then commit and push to your repository

        $ cd Dancer
        [ edit as many files as you need to build your patch ]
        $ git commit -m "DESCRIPTION OF THE PATCH"
        $ git push origin master

    If your patch fix an existing issue on our bugtracker, please specify the id of the issue in your commit message.

        fixing GH #123; do this instead of that
  • Send a pull request via the GitHub interface.

    It's also a good idea to summarize your work in a report sent to the users mailing list, in order to make sure the team is aware of it.


Mailing lists

A mailing list is available here:

IRC channels

You can reach the development team on, chan #dancer.


The official repository is hosted on GitHub at the following location:

Official developers have write access to this repository, contributors are invited to fork it if they want to submit patches, as explained in the Patch submission section.

The repository layout is organized as follows:

  • master

    This branch is dedicated to prepare CPAN releases. We push to that branch only for packaging a new release. Every CPAN version are made from this branch.

  • devel

    This is the development branch. Every new feature are supposed to be first pushed to that branch.


About dependencies

Dancer is intended to be a micro-framework. That means among other things that it should remain lightweight. For this reason we try very hard to keep the dependency bag as low as possible. But we don't want either to reinvent the wheel.

The balance is not easy to do but you can keep in mind that unless a very good reason, the team won't accept a new dependency to be added to the core.

If a patch provides a new feature that depends on a module, the solution is to perform a dynamic loading. Dancer has a class dedicated to that job: Dancer::ModuleLoader. Here is an example of how to use it:

    package Dancer::Some::Thing;
    use Carp;

    sub init {
            or croak "the feature provided by Dancer::Some::Thing needs Some::Deps";

That way, an optional feature doesn't block Dancer from being installed as the dependency check is performed at runtime.




Public releases

Developer releases

Whenever the devel branch has been merged into the master branch, the CPAN release built must be a developer version (the version number should contain a '_').

Before a new release is made, the uploaders must wait for the CPAN testers reports. This is done to make sure the new merge doesn't brings regressions.


The next major release is Dancer 1.2, all of the following items must be completed before this version is released.


This document has been written by Alexis Sukrieh