.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
. ds C`
. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
. if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
. \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "Mojolicious::Guides 3"
.TH Mojolicious::Guides 3 "2022-06-14" "perl v5.26.3" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
Mojolicious::Guides \- The Mojolicious Guide to the Galaxy
.SH "DON'T PANIC!"
.IX Header "DON'T PANIC!"
The Mojolicious <https://mojolicious.org> documentation is structured into three parts. The \*(L"\s-1TUTORIAL\*(R"\s0 everyone
starts with, the \*(L"\s-1GUIDES\*(R"\s0 that explain all major features in detail, and the \*(L"\s-1API\*(R"\s0 reference listing all
available classes.
.PP
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.
.SH "BASICS"
.IX Header "BASICS"
.SS "Learning Perl"
.IX Subsection "Learning Perl"
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/>.
.SS "Learning Web Technologies"
.IX Subsection "Learning Web Technologies"
All web development starts with \s-1HTML, CSS\s0 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
\&\s-1HTTP\s0 <https://developer.mozilla.org/en-US/docs/Web/HTTP>.
.SH "CONVENTIONS"
.IX Header "CONVENTIONS"
.SS "Modern Perl"
.IX Subsection "Modern Perl"
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.
.PP
.Vb 4
\& use strict;
\& use warnings;
\& use utf8;
\& use feature \*(Aq:5.16\*(Aq;
.Ve
.PP
Some modules, like Mojo::Base and Mojolicious::Lite, will enable them for you automatically, whenever they are
used.
.SS "Signatures"
.IX Subsection "Signatures"
On Perl 5.20+ you can also use the \f(CW\*(C`\-signatures\*(C'\fR flag with Mojo::Base to enable support for
subroutine signatures. Signatures are used in all examples for clarity, even when \f(CW\*(C`\-signatures\*(C'\fR
is omitted for brevity.
.SS "Variable names"
.IX Subsection "Variable names"
For brevity and clarity, example variables will reflect the type of data the \s-1API\s0 uses. For instance, \f(CW$bytes\fR or
\&\f(CW$chars\fR to distinguish whether it is encoded bytes or decoded characters in a Perl string, \f(CW$bool\fR if
the value just indicates true or false, \f(CW$c\fR to denote a Mojolicious::Controller object, or \f(CW$app\fR to denote the
application object.
.SH "TUTORIAL"
.IX Header "TUTORIAL"
.IP "Mojolicious::Guides::Tutorial" 2
.IX Item "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!
.SH "GUIDES"
.IX Header "GUIDES"
.IP "Mojolicious::Guides::Growing" 2
.IX Item "Mojolicious::Guides::Growing"
Starting a Mojolicious::Lite prototype from scratch and growing it into a well-structured Mojolicious
application.
.IP "Mojolicious::Guides::Routing" 2
.IX Item "Mojolicious::Guides::Routing"
Simple and fun introduction to the Mojolicious router.
.IP "Mojolicious::Guides::Rendering" 2
.IX Item "Mojolicious::Guides::Rendering"
Generating content with the Mojolicious renderer.
.IP "Mojolicious::Guides::Testing" 2
.IX Item "Mojolicious::Guides::Testing"
Powerful yet elegant testing techniques and tools for Mojolicious and other web applications.
.IP "Mojolicious::Guides::Cookbook" 2
.IX Item "Mojolicious::Guides::Cookbook"
Cooking with Mojolicious, recipes for every taste.
.IP "Mojolicious::Guides::Contributing" 2
.IX Item "Mojolicious::Guides::Contributing"
Become a part of the ongoing Mojolicious development.
.IP "Mojolicious::Guides::FAQ" 2
.IX Item "Mojolicious::Guides::FAQ"
Answers to the most frequently asked questions.
.SH "HIGHLIGHTS"
.IX Header "HIGHLIGHTS"
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.
.IP "Mojo::UserAgent" 2
.IX Item "Mojo::UserAgent"
Full featured non-blocking I/O \s-1HTTP\s0 and WebSocket user agent.
.IP "Mojo::DOM" 2
.IX Item "Mojo::DOM"
Very fun and minimalistic \s-1HTML/XML DOM\s0 parser with \s-1CSS\s0 selector support.
.IP "Mojo::JSON" 2
.IX Item "Mojo::JSON"
Minimalistic \s-1JSON\s0 implementation that just works.
.IP "Mojo::Server::Daemon" 2
.IX Item "Mojo::Server::Daemon"
Full featured, highly portable non-blocking I/O \s-1HTTP\s0 and WebSocket server, with self-restart support through
Mojo::Server::Morbo, perfect for development and testing.
.IP "Mojo::Server::Prefork" 2
.IX Item "Mojo::Server::Prefork"
Full featured, \s-1UNIX\s0 optimized, preforking non-blocking I/O \s-1HTTP\s0 and WebSocket server with support for zero downtime
software upgrades (hot deployment) through Mojo::Server::Hypnotoad.
.IP "Mojo::Server::CGI, Mojo::Server::PSGI" 2
.IX Item "Mojo::Server::CGI, Mojo::Server::PSGI"
Transparent \s-1CGI\s0 and \s-1PSGI\s0 support out of the box.
.IP "Mojo::IOLoop" 2
.IX Item "Mojo::IOLoop"
A minimalistic event loop with support for multiple reactor backends.
.IP "Mojo::Template" 2
.IX Item "Mojo::Template"
Very Perl-ish and minimalistic template system.
.IP "Test::Mojo" 2
.IX Item "Test::Mojo"
Testing toolkit for web applications.
.IP "ojo" 2
.IX Item "ojo"
Fun one-liners using everything above.
.SH "FULL-STACK"
.IX Header "FULL-STACK"
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.
.IP "Mojo::Pg" 2
.IX Item "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 \s-1SQL\s0
features <https://www.postgresql.org/docs/current/static/sql.html> PostgreSQL has to offer, generate \s-1CRUD\s0 queries from
data structures, manage your database schema with migrations and build scalable real-time web applications with the
publish/subscribe pattern.
.Sp
\&\fBExamples:\fR 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 \s-1MVC\s0 design pattern
in practice.
.IP "Minion" 2
.IX Item "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, \s-1HTTP\s0 downloads, building tarballs, warming caches and basically everything else you can
imagine that's not super fast.
.Sp
\&\fBExamples:\fR 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.
.SH "API"
.IX Header "API"
This is the class hierarchy of the Mojolicious distribution.
.IP "\(bu" 2
Mojo
.IP "\(bu" 2
Mojo::Base
.RS 2
.IP "\(bu" 2
Mojolicious
.RS 2
.IP "\(bu" 2
Mojo::HelloWorld
.IP "\(bu" 2
Mojolicious::Lite
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Cache
.IP "\(bu" 2
Mojo::Cookie
.RS 2
.IP "\(bu" 2
Mojo::Cookie::Request
.IP "\(bu" 2
Mojo::Cookie::Response
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::DOM::CSS
.IP "\(bu" 2
Mojo::DOM::HTML
.IP "\(bu" 2
Mojo::Date
.IP "\(bu" 2
Mojo::EventEmitter
.RS 2
.IP "\(bu" 2
Mojo::Asset
.RS 2
.IP "\(bu" 2
Mojo::Asset::File
.IP "\(bu" 2
Mojo::Asset::Memory
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Content
.RS 2
.IP "\(bu" 2
Mojo::Content::MultiPart
.IP "\(bu" 2
Mojo::Content::Single
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::IOLoop
.IP "\(bu" 2
Mojo::IOLoop::Client
.IP "\(bu" 2
Mojo::IOLoop::Server
.IP "\(bu" 2
Mojo::IOLoop::Stream
.IP "\(bu" 2
Mojo::IOLoop::Subprocess
.IP "\(bu" 2
Mojo::IOLoop::TLS
.IP "\(bu" 2
Mojo::Log
.IP "\(bu" 2
Mojo::Message
.RS 2
.IP "\(bu" 2
Mojo::Message::Request
.IP "\(bu" 2
Mojo::Message::Response
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Reactor
.RS 2
.IP "\(bu" 2
Mojo::Reactor::Poll
.RS 2
.IP "\(bu" 2
Mojo::Reactor::EV
.RE
.RS 2
.RE
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Server
.RS 2
.IP "\(bu" 2
Mojo::Server::CGI
.IP "\(bu" 2
Mojo::Server::Daemon
.RS 2
.IP "\(bu" 2
Mojo::Server::Prefork
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Server::PSGI
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Transaction
.RS 2
.IP "\(bu" 2
Mojo::Transaction::HTTP
.IP "\(bu" 2
Mojo::Transaction::WebSocket
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::UserAgent
.IP "\(bu" 2
Mojolicious::Plugins
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Exception
.IP "\(bu" 2
Mojo::Headers
.IP "\(bu" 2
Mojo::JSON::Pointer
.IP "\(bu" 2
Mojo::Parameters
.IP "\(bu" 2
Mojo::Path
.IP "\(bu" 2
Mojo::Promise
.IP "\(bu" 2
Mojo::Server::Hypnotoad
.IP "\(bu" 2
Mojo::Server::Morbo
.IP "\(bu" 2
Mojo::Server::Morbo::Backend
.RS 2
.IP "\(bu" 2
Mojo::Server::Morbo::Backend::Poll
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::Template
.IP "\(bu" 2
Mojo::URL
.IP "\(bu" 2
Mojo::Upload
.IP "\(bu" 2
Mojo::UserAgent::CookieJar
.IP "\(bu" 2
Mojo::UserAgent::Proxy
.IP "\(bu" 2
Mojo::UserAgent::Server
.IP "\(bu" 2
Mojo::UserAgent::Transactor
.IP "\(bu" 2
Mojolicious::Command
.RS 2
.IP "\(bu" 2
Mojolicious::Command::cgi
.IP "\(bu" 2
Mojolicious::Command::daemon
.IP "\(bu" 2
Mojolicious::Command::eval
.IP "\(bu" 2
Mojolicious::Command::get
.IP "\(bu" 2
Mojolicious::Command::prefork
.IP "\(bu" 2
Mojolicious::Command::psgi
.IP "\(bu" 2
Mojolicious::Command::routes
.IP "\(bu" 2
Mojolicious::Command::version
.IP "\(bu" 2
Mojolicious::Command::Author::cpanify
.IP "\(bu" 2
Mojolicious::Command::Author::generate::app
.IP "\(bu" 2
Mojolicious::Command::Author::generate::dockerfile
.IP "\(bu" 2
Mojolicious::Command::Author::generate::lite_app
.IP "\(bu" 2
Mojolicious::Command::Author::generate::makefile
.IP "\(bu" 2
Mojolicious::Command::Author::generate::plugin
.IP "\(bu" 2
Mojolicious::Command::Author::inflate
.IP "\(bu" 2
Mojolicious::Commands
.RS 2
.IP "\(bu" 2
Mojolicious::Command::Author::generate
.RE
.RS 2
.RE
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojolicious::Controller
.IP "\(bu" 2
Mojolicious::Plugin
.RS 2
.IP "\(bu" 2
Mojolicious::Plugin::Config
.RS 2
.IP "\(bu" 2
Mojolicious::Plugin::JSONConfig
.RS 2
.IP "\(bu" 2
Mojolicious::Plugin::NotYAMLConfig
.RE
.RS 2
.RE
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojolicious::Plugin::DefaultHelpers
.IP "\(bu" 2
Mojolicious::Plugin::EPLRenderer
.RS 2
.IP "\(bu" 2
Mojolicious::Plugin::EPRenderer
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojolicious::Plugin::HeaderCondition
.IP "\(bu" 2
Mojolicious::Plugin::Mount
.IP "\(bu" 2
Mojolicious::Plugin::TagHelpers
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojolicious::Renderer
.IP "\(bu" 2
Mojolicious::Routes::Match
.IP "\(bu" 2
Mojolicious::Routes::Pattern
.IP "\(bu" 2
Mojolicious::Routes::Route
.RS 2
.IP "\(bu" 2
Mojolicious::Routes
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojolicious::Sessions
.IP "\(bu" 2
Mojolicious::Static
.IP "\(bu" 2
Mojolicious::Types
.IP "\(bu" 2
Mojolicious::Validator
.IP "\(bu" 2
Mojolicious::Validator::Validation
.IP "\(bu" 2
Test::Mojo
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::ByteStream
.IP "\(bu" 2
Mojo::Collection
.IP "\(bu" 2
Mojo::DynamicMethods
.IP "\(bu" 2
Mojo::DOM
.IP "\(bu" 2
Mojo::File
.RS 2
.IP "\(bu" 2
Mojo::Home
.RE
.RS 2
.RE
.IP "\(bu" 2
Mojo::JSON
.IP "\(bu" 2
Mojo::Loader
.IP "\(bu" 2
Mojo::Util
.IP "\(bu" 2
Mojo::WebSocket
.IP "\(bu" 2
ojo
.SH "MORE"
.IX Header "MORE"
A lot more documentation and examples by many different authors can be found in the Mojolicious
wiki <https://github.com/mojolicious/mojo/wiki>.
.SH "SUPPORT"
.IX Header "SUPPORT"
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
\&\s-1IRC\s0 <https://web.libera.chat/#mojo>.