First of all, make sure you are using the latest version of Mojolicious, it is quite likely that your bug has already been fixed. If that doesn't help, take a look at the list of currently open issues, perhaps it has already been reported by someone else and you can just add a comment confirming it.
If it hasn't been reported yet, try to prepare a test case demonstrating the bug, you are not expected to fix it yourself, but you'll have to make sure the developers can replicate your problem. Sending in your whole application generally does more harm than good, the "t" directory of this distribution has many good examples for how to do it right. Writing a test is usually the hardest part of fixing a bug, so the better your test case the faster it can be fixed. ;)
And don't forget to add a descriptive title and text, when you create a new issue. If your issue does not contain enough information or is unintelligible, it might get closed pretty quickly. But don't be disheartened, if there's new activity it will get reopened just as quickly.
Can you replicate the problem on your computer? Add a comment saying that you're seeing the same. Perhaps you can provide additional information that will make it easier for others to replicate the problem, maybe even contribute a better test case.
And for all code contributions we very much appreciate additional testing and code review, just add a comment to show your approval or to point out flaws that need to be addressed.
Pull requests with additions or changes to the documentation included in the Mojolicious distribution follow the same rules as code contributions. Please don't send pull requests for overly simplistic changes, such as the addition of a comma or semicolon.
An expressive title and detailed description are invaluable during the review process, which usually ends when members of the community have voiced their opinions and the core team voted for or against a change. All code changes should emulate the style of the surrounding code, include tests that fail without them, and update relevant documentation.
While the Mojolicious distribution covers a wide range of features, we are rather conservative when it comes to adding new ones. So if your contribution is not a simple bug fix, it is strongly recommended that you discuss it in advance on the mailing list <http://groups.google.com/group/mojolicious> or the official IRC channel "#mojo" on "irc.freenode.net" (chat now! <https://kiwiirc.com/nextclient/#irc://irc.freenode.net/mojo?nick=guest-?>), to avoid unnecessary work and to increase its chances of getting accepted.
Any member of the core team can call for a vote with a GitHub comment mentioning the team "@mojolicious/core". Then there will be a review period of 14 days (or less if enough votes have been cast), after which all votes are counted and the pull request will be accepted or rejected.
The following mission statement and rules are the foundation of all Mojo and Mojolicious development. Please make sure that your contribution aligns well with them before sending a pull request.
All components should be reusable in other projects, and in a UNIXish way only loosely coupled.
Especially for people new to Perl it should be as easy as possible to install Mojolicious and get started. Writing web applications can be one of the most fun ways to learn a language!
For developers of other web frameworks, it should be possible to reuse all the infrastructure and just consider the higher levels of the Mojolicious distribution an example application.
The web is a moving target, to stay relevant we have to stay in motion too.
Keep it simple, no magic unless absolutely necessary.
The installation process should be as fast and painless as possible. (Less than a minute on most common hardware is a good rule of thumb)
The addition and modification of features is decided by majority vote or the pumpkin-holder.
Any core developer may nominate a new one, who must then be accepted by a 2/3 majority vote.
The pumpkin-holder has veto rights and may select their successor.
It's not a feature without a test and documentation.
A feature is only needed when the majority of the user base benefits from it.
Features may only be changed in a major release, to fix a serious security issue, or after being deprecated for at least 3 months.
Refactoring and deprecations should be avoided if there are no substantial benefits.
New features can be marked as experimental to be excluded from deprecation policies.
A major release is signaled by a new major version number and a unique code name based on a Unicode character.
Only add dependencies if absolutely necessary and make them optional if possible.
Domain specific languages should be avoided in favor of Perl-ish solutions.
No inline POD.
Documentation belongs to the guides, module POD is just an API reference.
The main focus of the included documentation should be on examples, no walls of text. (An example for every one or two sentences is a good rule of thumb)
Everything should be ordered alphabetically if possible, or at least be consistent if not.
The master source code repository should always be kept in a stable state, use feature branches for actual development.
Code has to be run through Perl::Tidy with the included .perltidyrc <https://github.com/mojolicious/mojo/blob/master/.perltidyrc>, and everything should look like it was written by a single person.
Functions and methods should be as short as possible, no spaghetti code.
Comments should be correctly capitalized, and funny if possible, punctuation is optional if it doesn't increase readability.
No names outside of "Mojolicious.pm".
If you run a business and use Mojolicious in a revenue generating product, it makes business sense to support Mojolicious development. Because it ensures that the project your product relies on stays healthy and actively maintained. It can also help your exposure within the community and will make it easier to attract Mojolicious developers.
Please email us ("donations@mojolicious.org") if you have any questions about becoming a sponsor.
Diversity is one of our huge strengths, but it can also lead to communication issues and unhappiness. To that end, we have a few ground rules that we ask people to adhere to. This code applies equally to founders, mentors and those seeking help and guidance.
This isn't an exhaustive list of things that you can't do. Rather, take it in the spirit in which it’s intended - a guide to make it easier to enrich all of us and the technical communities in which we participate.
This code of conduct applies to all spaces managed by the Mojolicious project. This includes IRC, the mailing lists, the issue tracker, and any other forums created by the project team which the community uses for communication. In addition, violations of this code outside these spaces may affect a person's ability to participate within them.
If you believe someone is violating the code of conduct, we ask that you report it by emailing Joel Berger ("jberger@mojolicious.org") or other members of the team.
For developers considering the use of a forked module, we strongly recommend that you make yourself familiar with its history and track record. While many parts of Mojolicious have been forked in the past, very few forks have been able to keep up with Mojolicious development, and most are missing critical bug fixes.