Mojolicious::Guides - The Mojolicious Guide to the Galaxy
The Mojolicious <https://mojolicious.org> documentation is
structured into three parts. The "TUTORIAL" everyone starts with,
the "GUIDES" that explain all major features in detail, and the
"API" reference listing all available classes.
Some parts of the documentation only use the Mojolicious::Lite
micro web framework for examples, but that's merely a convenience for the
reader. Almost all features are exactly the same for full Mojolicious
applications.
If you are new to Perl, we recommend Learn Perl in 2 hours 30
minutes <https://qntm.org/perl_en> for a quick introduction, or the
Modern Perl book
<https://pragprog.com/book/swperl/modern-perl-fourth-edition>, freely
available in many formats. Both are excellent introductions to the language.
For more books and documentation, check out learn.perl.org
<https://learn.perl.org/>.
All web development starts with HTML, CSS and JavaScript, to learn
the basics we recommend the Mozilla Developer Network
<https://developer.mozilla.org/en-US/docs/Web>. And if you want to
know more about how browsers and web servers actually communicate, there's
also a very nice introduction to HTTP
<https://developer.mozilla.org/en-US/docs/Web/HTTP>.
Mojolicious uses a modern subset of Perl exclusively, and
therefore all documentation assumes that strict, warnings, utf8 and Perl
5.16 features are enabled, even if examples don't specifically mention
it.
use strict;
use warnings;
use utf8;
use feature ':5.16';
Some modules, like Mojo::Base and Mojolicious::Lite, will enable
them for you automatically, whenever they are used.
On Perl 5.20+ you can also use the
"-signatures" flag with Mojo::Base to
enable support for subroutine signatures. Signatures are used in all
examples for clarity, even when
"-signatures" is omitted for brevity.
For brevity and clarity, example variables will reflect the type
of data the API uses. For instance, $bytes or
$chars to distinguish whether it is encoded bytes or
decoded characters in a Perl string, $bool if the
value just indicates true or false, $c to denote a
Mojolicious::Controller object, or $app to denote
the application object.
- Mojolicious::Guides::Tutorial
- A fast and fun way to get started developing web applications with
Mojolicious. The tutorial introduces the Mojolicious::Lite micro web
framework, which is only a thin wrapper around the full web framework. The
simplified notation introduced in the tutorial is commonly used throughout
the guides and is therefore considered a prerequisite, you should
definitely take a look!
Mojolicious and Mojolicious::Lite are the sum of many parts, built
on top of the Mojo web development toolkit. Small building blocks that can
be used independently for all kinds of applications, these are the most
prominent ones.
- Mojo::UserAgent
- Full featured non-blocking I/O HTTP and WebSocket user agent.
- Mojo::DOM
- Very fun and minimalistic HTML/XML DOM parser with CSS selector
support.
- Mojo::JSON
- Minimalistic JSON implementation that just works.
- Mojo::Server::Daemon
- Full featured, highly portable non-blocking I/O HTTP and WebSocket server,
with self-restart support through Mojo::Server::Morbo, perfect for
development and testing.
- Mojo::Server::Prefork
- Full featured, UNIX optimized, preforking non-blocking I/O HTTP and
WebSocket server with support for zero downtime software upgrades (hot
deployment) through Mojo::Server::Hypnotoad.
- Mojo::Server::CGI,
Mojo::Server::PSGI
- Transparent CGI and PSGI support out of the box.
- Mojo::IOLoop
- A minimalistic event loop with support for multiple reactor backends.
- Mojo::Template
- Very Perl-ish and minimalistic template system.
- Test::Mojo
- Testing toolkit for web applications.
- ojo
- Fun one-liners using everything above.
These modules are not part of the Mojolicious distribution, but
have been designed to be used with it and are being developed under the same
umbrella.
- Mojo::Pg
- A tiny wrapper around DBD::Pg that makes PostgreSQL
<https://www.postgresql.org> a lot of fun to use with Mojolicious.
Perform queries blocking and non-blocking, use all SQL features
<https://www.postgresql.org/docs/current/static/sql.html> PostgreSQL
has to offer, generate CRUD queries from data structures, manage your
database schema with migrations and build scalable real-time web
applications with the publish/subscribe pattern.
Examples: The minimal chat
<https://github.com/mojolicious/mojo-pg/tree/main/examples/chat.pl>
application will show you how to scale WebSockets to multiple servers,
and the well-structured blog
<https://github.com/mojolicious/mojo-pg/tree/main/examples/blog>
application how to apply the MVC design pattern in practice.
- Minion
- A full featured job queue for Mojolicious with support for multiple
backends (such as PostgreSQL <https://www.postgresql.org>). Job
queues allow you to process time and/or computationally intensive tasks in
background processes, outside of the request/response lifecycle. Among
those tasks you'll commonly find image resizing, spam filtering, HTTP
downloads, building tarballs, warming caches and basically everything else
you can imagine that's not super fast.
Examples: The link checker
<https://github.com/mojolicious/minion/tree/main/examples/linkcheck>
will show you how to integrate background jobs into well-structured
Mojolicious applications.
This is the class hierarchy of the Mojolicious distribution.
- •
- Mojolicious
- Mojo::HelloWorld
- Mojolicious::Lite
- Mojo::Cookie::Request
- Mojo::Cookie::Response
- Mojo::DOM::CSS
- Mojo::DOM::HTML
- Mojo::Date
- Mojo::EventEmitter
- •
- Mojo::Asset
- Mojo::Asset::File
- Mojo::Asset::Memory
- •
- Mojo::Content
- Mojo::Content::MultiPart
- Mojo::Content::Single
- Mojo::IOLoop
- Mojo::IOLoop::Client
- Mojo::IOLoop::Server
- Mojo::IOLoop::Stream
- Mojo::IOLoop::Subprocess
- Mojo::IOLoop::TLS
- Mojo::Log
- Mojo::Message
- Mojo::Message::Request
- Mojo::Message::Response
- •
- Mojo::Reactor
- •
- Mojo::Server
- Mojo::Server::CGI
- Mojo::Server::Daemon
- •
- Mojo::Server::PSGI
- •
- Mojo::Transaction
- Mojo::Transaction::HTTP
- Mojo::Transaction::WebSocket
- Mojo::UserAgent
- Mojolicious::Plugins
- Mojo::Exception
- Mojo::Headers
- Mojo::JSON::Pointer
- Mojo::Parameters
- Mojo::Path
- Mojo::Promise
- Mojo::Server::Hypnotoad
- Mojo::Server::Morbo
- Mojo::Server::Morbo::Backend
- •
- Mojo::Server::Morbo::Backend::Poll
- Mojo::Template
- Mojo::URL
- Mojo::Upload
- Mojo::UserAgent::CookieJar
- Mojo::UserAgent::Proxy
- Mojo::UserAgent::Server
- Mojo::UserAgent::Transactor
- Mojolicious::Command
- Mojolicious::Command::cgi
- Mojolicious::Command::daemon
- Mojolicious::Command::eval
- Mojolicious::Command::get
- Mojolicious::Command::prefork
- Mojolicious::Command::psgi
- Mojolicious::Command::routes
- Mojolicious::Command::version
- Mojolicious::Command::Author::cpanify
- Mojolicious::Command::Author::generate::app
- Mojolicious::Command::Author::generate::dockerfile
- Mojolicious::Command::Author::generate::lite_app
- Mojolicious::Command::Author::generate::makefile
- Mojolicious::Command::Author::generate::plugin
- Mojolicious::Command::Author::inflate
- Mojolicious::Commands
- •
- Mojolicious::Command::Author::generate
- Mojolicious::Controller
- Mojolicious::Plugin
- •
- Mojolicious::Plugin::Config
- •
- Mojolicious::Plugin::JSONConfig
- •
- Mojolicious::Plugin::NotYAMLConfig
- Mojolicious::Plugin::DefaultHelpers
- Mojolicious::Plugin::EPLRenderer
- •
- Mojolicious::Plugin::EPRenderer
- Mojolicious::Plugin::HeaderCondition
- Mojolicious::Plugin::Mount
- Mojolicious::Plugin::TagHelpers
- Mojolicious::Renderer
- Mojolicious::Routes::Match
- Mojolicious::Routes::Pattern
- Mojolicious::Routes::Route
- Mojolicious::Sessions
- Mojolicious::Static
- Mojolicious::Types
- Mojolicious::Validator
- Mojolicious::Validator::Validation
- Test::Mojo
- Mojo::ByteStream
- Mojo::Collection
- Mojo::DynamicMethods
- Mojo::DOM
- Mojo::File
- Mojo::JSON
- Mojo::Loader
- Mojo::Util
- Mojo::WebSocket
- ojo
A lot more documentation and examples by many different authors
can be found in the Mojolicious wiki
<https://github.com/mojolicious/mojo/wiki>.
If you have any questions the documentation might not yet answer,
don't hesitate to ask in the Forum <https://forum.mojolicious.org>, on
Matrix <https://matrix.to/#/#mojo:matrix.org>, or IRC
<https://web.libera.chat/#mojo>.