CINXE.COM
Mojolicious::Guides - The Mojolicious Guide to the Galaxy
<!doctype html><html> <head> <link rel="apple-touch-icon" href="/mojolicious/touch-icon.png"> <link rel="apple-touch-icon" sizes="152x152" href="/mojolicious/touch-icon-152x152.png"> <link rel="apple-touch-icon" sizes="167x167" href="/mojolicious/touch-icon-167x167.png"> <link rel="apple-touch-icon" sizes="180x180" href="/mojolicious/touch-icon-180x180.png"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mojolicious" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Mojolicious::Guides - The Mojolicious Guide to the Galaxy</title> <script src="/mojolicious/jquery/jquery.js"></script> <script src="/mojolicious/highlight.js/highlight.min.js"></script> <link href="/mojolicious/highlight.js/highlight-mojo-light.css" rel="stylesheet"> <script>hljs.initHighlightingOnLoad();</script> <script src="/mojolicious/bootstrap/bootstrap.js"></script> <link href="/mojolicious/bootstrap/bootstrap.css" rel="stylesheet"> <link href="/mojolicious/fontawesome/fontawesome.css" rel="stylesheet"> <link href="/app.css?v=3" rel="stylesheet"> <link href="/mojodocs.css" rel="stylesheet"> </head> <body><a id="toc"></a> <header> <nav class="navbar navbar-expand-lg navbar-dark mojobar"> <a href="https://mojolicious.org" id="mojobar-brand" class="navbar-brand"> <picture> <img src="/mojo/logo-white.png" srcset="/mojo/logo-white-2x.png 2x"> </picture> </a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div id="navbarNav" class="collapse navbar-collapse"> <ul class="navbar-nav mr-auto"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Documentation </a> <div class="dropdown-menu" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="https://docs.mojolicious.org">Overview</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/Tutorial">Tutorial</a> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/Growing">Growing</a> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/Routing">Routing</a> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/Rendering">Rendering</a> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/Testing">Testing</a> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/Cookbook">Cookbook</a> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/Contributing">Contributing</a> <a class="dropdown-item" href="https://docs.mojolicious.org/Mojolicious/Guides/FAQ">FAQ</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="https://docs.mojolicious.org#API">API</a> </div> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="communityDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Community </a> <div class="dropdown-menu" aria-labelledby="communityDropdown"> <a class="dropdown-item" href="https://web.libera.chat/#mojo">IRC</a> <a class="dropdown-item" href="https://forum.mojolicious.org">Forum</a> <a class="dropdown-item" href="https://fosstodon.org/@mojolicious">Mastodon</a> <a class="dropdown-item" href="https://www.linkedin.com/groups/8963713/">LinkedIn</a> <a class="dropdown-item" href="https://github.com/mojolicious/mojo/wiki">Wiki</a> <a class="dropdown-item" href="https://metacpan.org/release/Mojolicious/">CPAN</a> </div> </li> <li class="nav-item"> <a class="nav-link" href="https://github.com/mojolicious/mojo/">Contribute on GitHub</a> </li> </ul> <a class="navbar-brand" href="https://mojojs.org"> <picture> <img src="/mojolicious/mojojs-white.png" srcset="/mojolicious/mojojs-white-2x.png 2x"> </picture> </a> <form action="https://www.google.com/cse" target="_blank" class="form-inline my-2 my-lg-0"> <input name="cx" type="hidden" value="014527573091551588235:pwfplkjpgbi"> <input name="ie" type="hidden" value="UTF-8"> <input name="q" placeholder="Search..." type="search"> </form> </div> </nav> </header> <div class="container-fluid"> <div class="row flex-wrap"> <aside class="col-sm-12 col-md-4 col-lg-2 mojo-sidebar"> <form class="mojo-version d-flex align-items-center"> <fieldset disabled> <input type="text" id="disabledTextInput" class="form-control" placeholder="v9.40"> </fieldset> </form> <ul> <li> <a href="#NAME"><b>NAME</b></a> </li> <li> <a href="#DONT-PANIC"><b>DON'T PANIC!</b></a> </li> <li> <a href="#BASICS"><b>BASICS</b></a> <ul> <li><a href="#Learning-Perl">Learning Perl</a></li> <li><a href="#Learning-Web-Technologies">Learning Web Technologies</a></li> </ul> </li> <li> <a href="#CONVENTIONS"><b>CONVENTIONS</b></a> <ul> <li><a href="#Modern-Perl">Modern Perl</a></li> <li><a href="#Signatures">Signatures</a></li> <li><a href="#Variable-names">Variable names</a></li> </ul> </li> <li> <a href="#TUTORIAL"><b>TUTORIAL</b></a> </li> <li> <a href="#GUIDES"><b>GUIDES</b></a> </li> <li> <a href="#HIGHLIGHTS"><b>HIGHLIGHTS</b></a> </li> <li> <a href="#FULL-STACK"><b>FULL-STACK</b></a> </li> <li> <a href="#API"><b>API</b></a> </li> <li> <a href="#MORE"><b>MORE</b></a> </li> <li> <a href="#SUPPORT"><b>SUPPORT</b></a> </li> </ul> </aside> <main class="col-sm-12 col-md-8 col-lg-10 py-md-3 pl-md-5 mojo-main"> <div class="mojo-docinfo"> <div> <div class="mojo-docnav"> <a class="nav-link" alt="API" href="https://docs.mojolicious.org#API"><i class="fas fa-book"></i></a> </div> Document: <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a>::<a href="http://docs.mojolicious.org/">Guides</a> </div> </div> <div class="mojo-external"> <a class="btn btn-outline-secondary btn-sm" href="http://docs.mojolicious.org/Mojolicious/Guides.txt" role="button"> Source </a> <a class="btn btn-outline-secondary btn-sm" href="https://metacpan.org/pod/Mojolicious::Guides" role="button">CPAN</a> </div> <div class="mojo-perldoc"> <h1 id="NAME"><a class="permalink" href="#NAME">#</a><a href="#toc">NAME</a></h1> <p>Mojolicious::Guides - The Mojolicious Guide to the Galaxy</p> <h1 id="DONT-PANIC"><a class="permalink" href="#DONT-PANIC">#</a><a href="#toc">DON'T PANIC!</a></h1> <p>The <a href="https://mojolicious.org">Mojolicious</a> documentation is structured into three parts. The <a href="#TUTORIAL">"TUTORIAL"</a> everyone starts with, the <a href="#GUIDES">"GUIDES"</a> that explain all major features in detail, and the <a href="#API">"API"</a> reference listing all available classes.</p> <p>Some parts of the documentation only use the <a href="http://docs.mojolicious.org/Mojolicious/Lite">Mojolicious::Lite</a> micro web framework for examples, but that's merely a convenience for the reader. Almost all features are exactly the same for full <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> applications.</p> <h1 id="BASICS"><a class="permalink" href="#BASICS">#</a><a href="#toc">BASICS</a></h1> <h2 id="Learning-Perl"><a class="permalink" href="#Learning-Perl">#</a><a href="#toc">Learning Perl</a></h2> <p>If you are new to Perl, we recommend <a href="https://qntm.org/perl_en">Learn Perl in 2 hours 30 minutes</a> for a quick introduction, or the <a href="https://pragprog.com/book/swperl/modern-perl-fourth-edition">Modern Perl book</a>, freely available in many formats. Both are excellent introductions to the language. For more books and documentation, check out <a href="https://learn.perl.org/">learn.perl.org</a>.</p> <h2 id="Learning-Web-Technologies"><a class="permalink" href="#Learning-Web-Technologies">#</a><a href="#toc">Learning Web Technologies</a></h2> <p>All web development starts with HTML, CSS and JavaScript, to learn the basics we recommend the <a href="https://developer.mozilla.org/en-US/docs/Web">Mozilla Developer Network</a>. And if you want to know more about how browsers and web servers actually communicate, there's also a very nice introduction to <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP">HTTP</a>.</p> <h1 id="CONVENTIONS"><a class="permalink" href="#CONVENTIONS">#</a><a href="#toc">CONVENTIONS</a></h1> <h2 id="Modern-Perl"><a class="permalink" href="#Modern-Perl">#</a><a href="#toc">Modern Perl</a></h2> <p><a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> uses a modern subset of Perl exclusively, and therefore all documentation assumes that <a href="http://docs.mojolicious.org/strict">strict</a>, <a href="http://docs.mojolicious.org/warnings">warnings</a>, <a href="http://docs.mojolicious.org/utf8">utf8</a> and Perl 5.16 <a href="http://docs.mojolicious.org/feature">features</a> are enabled, even if examples don't specifically mention it.</p> <pre><code>use strict; use warnings; use utf8; use feature ':5.16';</code></pre> <p>Some modules, like <a href="http://docs.mojolicious.org/Mojo/Base">Mojo::Base</a> and <a href="http://docs.mojolicious.org/Mojolicious/Lite">Mojolicious::Lite</a>, will enable them for you automatically, whenever they are used.</p> <h2 id="Signatures"><a class="permalink" href="#Signatures">#</a><a href="#toc">Signatures</a></h2> <p>On Perl 5.20+ you can also use the <code>-signatures</code> flag with <a href="http://docs.mojolicious.org/Mojo/Base">Mojo::Base</a> to enable support for <a href="http://docs.mojolicious.org/perlsub#Signatures">subroutine signatures</a>. Signatures are used in all examples for clarity, even when <code>-signatures</code> is omitted for brevity.</p> <h2 id="Variable-names"><a class="permalink" href="#Variable-names">#</a><a href="#toc">Variable names</a></h2> <p>For brevity and clarity, example variables will reflect the type of data the API uses. For instance, <code>$bytes</code> or <code>$chars</code> to distinguish whether it is encoded bytes or decoded characters in a Perl <a href="http://docs.mojolicious.org/perlunifaq">string</a>, <code>$bool</code> if the value just indicates true or false, <code>$c</code> to denote a <a href="http://docs.mojolicious.org/Mojolicious/Controller">Mojolicious::Controller</a> object, or <code>$app</code> to denote the <a href="http://docs.mojolicious.org/Mojolicious">application</a> object.</p> <p>When the return value of a method is the object it was called on, this will be represented by using the same variable name in the example. This does not mean the return value needs to be assigned back to it, but indicates that further methods can be <a href="http://docs.mojolicious.org/Mojo/Base#FLUENT-INTERFACES">called in a chain</a>.</p> <h1 id="TUTORIAL"><a class="permalink" href="#TUTORIAL">#</a><a href="#toc">TUTORIAL</a></h1> <dl> <dt id="Mojolicious::Guides::Tutorial"><a href="http://docs.mojolicious.org/Mojolicious/Guides/Tutorial">Mojolicious::Guides::Tutorial</a></dt> <dd> <p>A fast and fun way to get started developing web applications with <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a>. The tutorial introduces the <a href="http://docs.mojolicious.org/Mojolicious/Lite">Mojolicious::Lite</a> 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!</p> </dd> </dl> <h1 id="GUIDES"><a class="permalink" href="#GUIDES">#</a><a href="#toc">GUIDES</a></h1> <dl> <dt id="Mojolicious::Guides::Growing"><a href="http://docs.mojolicious.org/Mojolicious/Guides/Growing">Mojolicious::Guides::Growing</a></dt> <dd> <p>Starting a <a href="http://docs.mojolicious.org/Mojolicious/Lite">Mojolicious::Lite</a> prototype from scratch and growing it into a well-structured <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> application.</p> </dd> <dt id="Mojolicious::Guides::Routing"><a href="http://docs.mojolicious.org/Mojolicious/Guides/Routing">Mojolicious::Guides::Routing</a></dt> <dd> <p>Simple and fun introduction to the <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> router.</p> </dd> <dt id="Mojolicious::Guides::Rendering"><a href="http://docs.mojolicious.org/Mojolicious/Guides/Rendering">Mojolicious::Guides::Rendering</a></dt> <dd> <p>Generating content with the <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> renderer.</p> </dd> <dt id="Mojolicious::Guides::Testing"><a href="http://docs.mojolicious.org/Mojolicious/Guides/Testing">Mojolicious::Guides::Testing</a></dt> <dd> <p>Powerful yet elegant testing techniques and tools for <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> and other web applications.</p> </dd> <dt id="Mojolicious::Guides::Cookbook"><a href="http://docs.mojolicious.org/Mojolicious/Guides/Cookbook">Mojolicious::Guides::Cookbook</a></dt> <dd> <p>Cooking with <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a>, recipes for every taste.</p> </dd> <dt id="Mojolicious::Guides::Contributing"><a href="http://docs.mojolicious.org/Mojolicious/Guides/Contributing">Mojolicious::Guides::Contributing</a></dt> <dd> <p>Become a part of the ongoing <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> development.</p> </dd> <dt id="Mojolicious::Guides::FAQ"><a href="http://docs.mojolicious.org/Mojolicious/Guides/FAQ">Mojolicious::Guides::FAQ</a></dt> <dd> <p>Answers to the most frequently asked questions.</p> </dd> </dl> <h1 id="HIGHLIGHTS"><a class="permalink" href="#HIGHLIGHTS">#</a><a href="#toc">HIGHLIGHTS</a></h1> <p><a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> and <a href="http://docs.mojolicious.org/Mojolicious/Lite">Mojolicious::Lite</a> are the sum of many parts, built on top of the <a href="http://docs.mojolicious.org/Mojo">Mojo</a> web development toolkit. Small building blocks that can be used independently for all kinds of applications, these are the most prominent ones.</p> <dl> <dt id="Mojo::UserAgent"><a href="http://docs.mojolicious.org/Mojo/UserAgent">Mojo::UserAgent</a></dt> <dd> <p>Full featured non-blocking I/O HTTP and WebSocket user agent.</p> </dd> <dt id="Mojo::DOM"><a href="http://docs.mojolicious.org/Mojo/DOM">Mojo::DOM</a></dt> <dd> <p>Very fun and minimalistic HTML/XML DOM parser with CSS selector support.</p> </dd> <dt id="Mojo::JSON"><a href="http://docs.mojolicious.org/Mojo/JSON">Mojo::JSON</a></dt> <dd> <p>Minimalistic JSON implementation that just works.</p> </dd> <dt id="Mojo::Server::Daemon"><a href="http://docs.mojolicious.org/Mojo/Server/Daemon">Mojo::Server::Daemon</a></dt> <dd> <p>Full featured, highly portable non-blocking I/O HTTP and WebSocket server, with self-restart support through <a href="http://docs.mojolicious.org/Mojo/Server/Morbo">Mojo::Server::Morbo</a>, perfect for development and testing.</p> </dd> <dt id="Mojo::Server::Prefork"><a href="http://docs.mojolicious.org/Mojo/Server/Prefork">Mojo::Server::Prefork</a></dt> <dd> <p>Full featured, UNIX optimized, preforking non-blocking I/O HTTP and WebSocket server with support for zero downtime software upgrades (hot deployment) through <a href="http://docs.mojolicious.org/Mojo/Server/Hypnotoad">Mojo::Server::Hypnotoad</a>.</p> </dd> <dt id="Mojo::Server::CGI-Mojo::Server::PSGI"><a href="http://docs.mojolicious.org/Mojo/Server/CGI">Mojo::Server::CGI</a>, <a href="http://docs.mojolicious.org/Mojo/Server/PSGI">Mojo::Server::PSGI</a></dt> <dd> <p>Transparent CGI and <a href="http://docs.mojolicious.org/PSGI">PSGI</a> support out of the box.</p> </dd> <dt id="Mojo::IOLoop"><a href="http://docs.mojolicious.org/Mojo/IOLoop">Mojo::IOLoop</a></dt> <dd> <p>A minimalistic event loop with support for multiple reactor backends.</p> </dd> <dt id="Mojo::Template"><a href="http://docs.mojolicious.org/Mojo/Template">Mojo::Template</a></dt> <dd> <p>Very Perl-ish and minimalistic template system.</p> </dd> <dt id="Test::Mojo"><a href="http://docs.mojolicious.org/Test/Mojo">Test::Mojo</a></dt> <dd> <p>Testing toolkit for web applications.</p> </dd> <dt id="ojo"><a href="http://docs.mojolicious.org/ojo">ojo</a></dt> <dd> <p>Fun one-liners using everything above.</p> </dd> </dl> <h1 id="FULL-STACK"><a class="permalink" href="#FULL-STACK">#</a><a href="#toc">FULL-STACK</a></h1> <p>These modules are not part of the <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> distribution, but have been designed to be used with it and are being developed under the same umbrella.</p> <dl> <dt id="Mojo::Pg"><a href="http://docs.mojolicious.org/Mojo/Pg">Mojo::Pg</a></dt> <dd> <p>A tiny wrapper around <a href="http://docs.mojolicious.org/DBD/Pg">DBD::Pg</a> that makes <a href="https://www.postgresql.org">PostgreSQL</a> a lot of fun to use with <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a>. Perform queries blocking and non-blocking, use all <a href="https://www.postgresql.org/docs/current/static/sql.html">SQL features</a> 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.</p> <p><b>Examples:</b> The minimal <a href="https://github.com/mojolicious/mojo-pg/tree/main/examples/chat.pl">chat</a> application will show you how to scale WebSockets to multiple servers, and the well-structured <a href="https://github.com/mojolicious/mojo-pg/tree/main/examples/blog">blog</a> application how to apply the MVC design pattern in practice.</p> </dd> <dt id="Minion"><a href="http://docs.mojolicious.org/Minion">Minion</a></dt> <dd> <p>A full featured job queue for <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> with support for multiple backends (such as <a href="https://www.postgresql.org">PostgreSQL</a>). 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.</p> <p><b>Examples:</b> The <a href="https://github.com/mojolicious/minion/tree/main/examples/linkcheck">link checker</a> will show you how to integrate background jobs into well-structured <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> applications.</p> </dd> </dl> <h1 id="API"><a class="permalink" href="#API">#</a><a href="#toc">API</a></h1> <p>This is the class hierarchy of the <a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a> distribution.</p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo">Mojo</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Base">Mojo::Base</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious">Mojolicious</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/HelloWorld">Mojo::HelloWorld</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Lite">Mojolicious::Lite</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Cache">Mojo::Cache</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Cookie">Mojo::Cookie</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Cookie/Request">Mojo::Cookie::Request</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Cookie/Response">Mojo::Cookie::Response</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/DOM/CSS">Mojo::DOM::CSS</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/DOM/HTML">Mojo::DOM::HTML</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Date">Mojo::Date</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/EventEmitter">Mojo::EventEmitter</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Asset">Mojo::Asset</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Asset/File">Mojo::Asset::File</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Asset/Memory">Mojo::Asset::Memory</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Content">Mojo::Content</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Content/MultiPart">Mojo::Content::MultiPart</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Content/Single">Mojo::Content::Single</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/IOLoop">Mojo::IOLoop</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/IOLoop/Client">Mojo::IOLoop::Client</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/IOLoop/Server">Mojo::IOLoop::Server</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/IOLoop/Stream">Mojo::IOLoop::Stream</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/IOLoop/Subprocess">Mojo::IOLoop::Subprocess</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/IOLoop/TLS">Mojo::IOLoop::TLS</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Log">Mojo::Log</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Message">Mojo::Message</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Message/Request">Mojo::Message::Request</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Message/Response">Mojo::Message::Response</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Reactor">Mojo::Reactor</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Reactor/Poll">Mojo::Reactor::Poll</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Reactor/EV">Mojo::Reactor::EV</a></p> </li> </ul> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Server">Mojo::Server</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/CGI">Mojo::Server::CGI</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/Daemon">Mojo::Server::Daemon</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/Prefork">Mojo::Server::Prefork</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/PSGI">Mojo::Server::PSGI</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Transaction">Mojo::Transaction</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Transaction/HTTP">Mojo::Transaction::HTTP</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Transaction/WebSocket">Mojo::Transaction::WebSocket</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/UserAgent">Mojo::UserAgent</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugins">Mojolicious::Plugins</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Exception">Mojo::Exception</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Headers">Mojo::Headers</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/JSON/Pointer">Mojo::JSON::Pointer</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Parameters">Mojo::Parameters</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Path">Mojo::Path</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Promise">Mojo::Promise</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/Hypnotoad">Mojo::Server::Hypnotoad</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/Morbo">Mojo::Server::Morbo</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/Morbo/Backend">Mojo::Server::Morbo::Backend</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Server/Morbo/Backend/Poll">Mojo::Server::Morbo::Backend::Poll</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Template">Mojo::Template</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/URL">Mojo::URL</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Upload">Mojo::Upload</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/UserAgent/CookieJar">Mojo::UserAgent::CookieJar</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/UserAgent/Proxy">Mojo::UserAgent::Proxy</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/UserAgent/Server">Mojo::UserAgent::Server</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/UserAgent/Transactor">Mojo::UserAgent::Transactor</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command">Mojolicious::Command</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/cgi">Mojolicious::Command::cgi</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/daemon">Mojolicious::Command::daemon</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/eval">Mojolicious::Command::eval</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/get">Mojolicious::Command::get</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/prefork">Mojolicious::Command::prefork</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/psgi">Mojolicious::Command::psgi</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/routes">Mojolicious::Command::routes</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/version">Mojolicious::Command::version</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/cpanify">Mojolicious::Command::Author::cpanify</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/generate/app">Mojolicious::Command::Author::generate::app</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/generate/dockerfile">Mojolicious::Command::Author::generate::dockerfile</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/generate/lite_app">Mojolicious::Command::Author::generate::lite_app</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/generate/makefile">Mojolicious::Command::Author::generate::makefile</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/generate/plugin">Mojolicious::Command::Author::generate::plugin</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/inflate">Mojolicious::Command::Author::inflate</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Commands">Mojolicious::Commands</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Command/Author/generate">Mojolicious::Command::Author::generate</a></p> </li> </ul> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Controller">Mojolicious::Controller</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin">Mojolicious::Plugin</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/Config">Mojolicious::Plugin::Config</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/JSONConfig">Mojolicious::Plugin::JSONConfig</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/NotYAMLConfig">Mojolicious::Plugin::NotYAMLConfig</a></p> </li> </ul> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/DefaultHelpers">Mojolicious::Plugin::DefaultHelpers</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/EPLRenderer">Mojolicious::Plugin::EPLRenderer</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/EPRenderer">Mojolicious::Plugin::EPRenderer</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/HeaderCondition">Mojolicious::Plugin::HeaderCondition</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/Mount">Mojolicious::Plugin::Mount</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Plugin/TagHelpers">Mojolicious::Plugin::TagHelpers</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Renderer">Mojolicious::Renderer</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Routes/Match">Mojolicious::Routes::Match</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Routes/Pattern">Mojolicious::Routes::Pattern</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Routes/Route">Mojolicious::Routes::Route</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Routes">Mojolicious::Routes</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Sessions">Mojolicious::Sessions</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Static">Mojolicious::Static</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Types">Mojolicious::Types</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Validator">Mojolicious::Validator</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojolicious/Validator/Validation">Mojolicious::Validator::Validation</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Test/Mojo">Test::Mojo</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/ByteStream">Mojo::ByteStream</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Collection">Mojo::Collection</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/DynamicMethods">Mojo::DynamicMethods</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/DOM">Mojo::DOM</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/File">Mojo::File</a></p> <ul> <li><p><a href="http://docs.mojolicious.org/Mojo/Home">Mojo::Home</a></p> </li> </ul> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/JSON">Mojo::JSON</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Loader">Mojo::Loader</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/Util">Mojo::Util</a></p> </li> <li><p><a href="http://docs.mojolicious.org/Mojo/WebSocket">Mojo::WebSocket</a></p> </li> <li><p><a href="http://docs.mojolicious.org/ojo">ojo</a></p> </li> </ul> <h1 id="MORE"><a class="permalink" href="#MORE">#</a><a href="#toc">MORE</a></h1> <p>A lot more documentation and examples by many different authors can be found in the <a href="https://github.com/mojolicious/mojo/wiki">Mojolicious wiki</a>.</p> <h1 id="SUPPORT"><a class="permalink" href="#SUPPORT">#</a><a href="#toc">SUPPORT</a></h1> <p>If you have any questions the documentation might not yet answer, don't hesitate to ask in the <a href="https://forum.mojolicious.org">Forum</a>, or on <a href="https://web.libera.chat/#mojo">IRC</a>.</p> </div> </main> </div> </div> <footer> <div class="container-fluid p-3 mojo-footer"> <div class="row"> <div class="col-sm align-self-center text-center mojo-free"> <b>Free</b> and <b>Open Source</b>. </div> <div class="col-sm align-self-center text-center mojo-copy"> <i class="far fa-copyright"></i> 2008-2023 Sebastian Riedel and the <a href="https://docs.mojolicious.org/Mojolicious#AUTHORS">Mojolicious contributors</a>. </div> <div class="col-sm align-self-center text-center mojo-social"> <a alt="GitHub" href="https://github.com/mojolicious/mojo"><i class="fab fa-github-alt"></i></a> <a alt="Mastodon" rel="me" href="https://fosstodon.org/@mojolicious"><i class="fab fa-mastodon"></i></a> <a alt="LinkedIn" href="https://www.linkedin.com/groups/8963713/"><i class="fab fa-linkedin"></i></a> </div> </div> </div> </footer> <script> const links = document.querySelectorAll('.mojo-sidebar ul li a[href^="#"]'); const linkById = Object.fromEntries(Array.from(links).map(e => [e.getAttribute('href').substr(1), e])); const sections = Array.from(links).map(e => document.getElementById(e.getAttribute('href').substr(1))).reverse(); let lastSectionId; let mojoOnScroll = () => { const pos = (document.documentElement.scrollTop || document.body.scrollTop) - 63; const section = sections.find(e => e.offsetTop <= pos); if (!section) return; if (section.id == lastSectionId) return; lastSectionId = section.id; links.forEach(e => e.classList.remove('font-weight-bold')); linkById[section.id].classList.add('font-weight-bold'); }; window.onscroll = mojoOnScroll; mojoOnScroll(); </script> </body> </html>