While many other reviewers lauded the distro solely as a fantastic Web framework, I'd like to add that many of the modules included are quite useful even for non-web-application related tasks.
One that stands out the most is Mojo::DOM, which is by far the best HTML parser of what's available on CPAN. It allows you to select elements using CSS selector and a few dozen of methods let you manipulate that HTML any way you want.
Mojo::UserAgent is also mention-worthy: a non-blocking UA. I started using it over LWP::UserAgent thanks to sane methods for manipulations of HTTP Cookies, but another nice feature is the ability to easily get parsed HTML (->dom method gives you Mojo::DOM object) or decoded JSON (->json method).
Mojo::Util is another module I frequently use. It provides common features that I used to import from a dozen different modules: html/url escaping, trimming whitespace, encoding handling, file slurping and spurting, and more.
As for the framework itself: I love the availability of Mojolicious::Lite, which lets you put together quick and dirty single-file web apps. At the same time, I've successfully used Mojolicious to build more complex apps (like the XTaTIK distro).
I've been using Mojolicious since around version 6.01 and did not experience any of the frequently changed API issues described by other commenters. The core team also behaves professionally and all PRs are scrutinized on their technical merits—of course, such scrutiny often results in PRs being downvoted, which I suspect is the reason why several of the reviewers felt they were attacked for making suggestions.
In summation, Mojolicious is a great Toolkit that includes a fantastic Web Framework. It's a gem of CPAN and I certainly recommend it to all.
Mojolicious makes it easy to start a project, to continue developing a project, and to maintain it after it is finished.
It has great debugging and testing facilites, and if you want to build a RESTful web service, Mojolicious gives you a RESTful architechture to begin with.
And you can mix and match Mojolicious with other modules if you want to or need to without any problems, even though it might not be immediately obvious to a beginner how a preforked server - hypnotoad for instance - differs from a single process dispatch architecture - morbo for instance, which might trip you up if you need communication between various sessions, or want to share database handles, etc.
Works well with DBIx::Class too, which makes it ideal for rapid AND well structured web development projects.
All in all, one of the best (most useful) web frameworks around.
There are some nice things about Mojolicious. It's simple to use, especially when one's goals are simple. But then there are serious problems:
- The authors regularly and rapidly break backward compatibility, often for trivial changes, and even on minor releases. The word "deprecated" shows up in the Changes log almost as much as the word "the."
- Route building is poorly documented, non-declarative (changing the order of statements can change the route map), and buggy. Certain route statements may exhibit undefined behavior, trigger unhandled exceptions, or just fail silently.
- The authors uncompromisingly choose to reimplement existing CPAN solutions for Mojolicious's internals, all for the sake of having no non-core dependencies. The result is a suite of pure-Perl modules with idiosyncratic interfaces and no automatic usage of available XS backends.
- The primary author, Sebastian Riedel, has a long history, across multiple projects, of responding to community feedback with angry rants and personal attacks.
These problems had me looking elsewhere. Fortunately, the nice parts of Mojolicious aren't particularly novel: straight Plack, a few Plack::Middleware, and Routes::Tiny will cover it.
Mojolicious is very simple web framework. It's just pure old perl without any magic under the hood. Yes, it has no dependencies but that doesn't mean you can't use cpan modules in your projects. It's not an anti-cpan as some people call it. Many plugins using external modules exist, creating new ones is also very easy. It's easy to install and doesn't force you to use any module. For example you may use Moose, Mouse or Moo for oop, DBIx::Class or Rose::DB::Object as orm, TT or Xslate as templates engine instead of the default one - they all will work. Community is very friendly and helpful, on it's wiki you may find many examples of real world applications. Documentation is good, source code is really clean and with many tests, so even if you can't find an answer in the documentation, you'll find it in tests.
Mojolicious has become my favorite choice of web framework. It took me some time to get used to the EPL template syntax, but nowadays I prefer it over Template::Toolkit. Need a quick prototype? Use Mojolicious::Lite to get up and running fast. Converting from Lite to a full fledged Mojolicious application is very easy as well.
The router is very powerful as well and easy to configure. I always liked Catalyst's way of doing it but this works very nice as well.
I like both Catalyst and Mojolicious but prefer Mojolicious these days. It's lighter and for me easier to extend. With Catalyst it all feels a bit more complex.
Another plus are the friendly and helpful people on IRC.
I love this framework as it has everything 'web' that I regularly need - and is now even better in v3.0
Why use another framework, or even a 'micro framework' that has a bajillion dependancies, when you can install one module - Mojolicious? I can't think of a reason to, especially with the ability to create single file 'lite' apps, or full fledged web applications in the same tool set.
The mojocasts are definitely a fantastic learning experience and that should be a listed feature of this framework over others.
Thank you for making such a wonderful framework (and thank you to the creator of the mojocasts - I can't wait until it makes me pie too)!
Mojolicious has been utterly life-changing. I cannot say enough good things about it. Everything I could ever want is included, for example, JSON encode/decode, updated UserAgent module that supports IPv6 and SSL properly and easily, etc. A template engine that includes all the best parts of Mason and fixes everything about Mason that drives me insane.
Before Mojo::DOM I used XML::Parser or XML::XPath for this requiring considerably more code for the same thing.
So if your job is just to change some attributes ot to remove certain elements, this Mojo::DOM ist *very* handy with a clean and simple API.
I am building a Content Management Framework on top of it and update Mojolicious frequently. My code never broke after update - really :).
It is reliable even being actively developed.
Using it seems natural for me.
I found Mojolicious while searching for alternative to Catalyst (I have nothing against Catalyst, it was just too big for my needs). After spending a few days reading the (excellent) documentation, I was able to create full featured web applications in a fraction of the time that it took me in my old framework. I'll never look back.
What is really amazing is that you do not have to trade flexibility for ease of use. Mojolicious "one-liners" are amazing all by themselves. Also, Mojolicious has a "lite" mode that allows you to create entire web applications in a single file, very cool and great for prototyping.
I think Mojolicious represents the future of web development on Perl. The author (Sebastian Riedel) has a lot of experience in developing frameworks and the robustness of the Mojolicious architecture speaks for itself. Mojolicious is what you get when you have a single, highly qualified individual creating from scratch, with no restrictions.
Mojolicous is a fresh new world in the Perl universe, and it is a lot of fun to play in.
Mojolicious is the current state-of-the-art solution what comes to Perl and MVC frameworks. It is modern, lightweight and clever. It has the best dispatcher I've seen. The integrated templating engine is both feature-rich and runs fast. The reload option really speeds up the development. Error messages and log messages are easy to understand. Mojolicious is the major contender in the Perl MVC scene.
This days I build everything with mojo.
Web applications, downloaders, web spiders, data analyzers.
One day I found that use base 'Mojo::Base' is a good line for non-web-related modules.
So, Mojo everywhere.
The new hipness in web frameworks; alleviates all your Ruby-envy.
There are no dependencies - that's right - NO DEPENDENCIES.
It is simple yet flexible, in that you can have full and lite configurations; Mojolicious lite apps allow for embedding of an entire application (including binary data) in one file, making deployment dead simple.
Most important of all, it's pretty. If you want to understand how it works, reading Mojolicious code is pleasure - no magic, just standard Perl.