Mojolic...Renderer(3)

πŸ’– NAME πŸ’–

okay bestie, welcome to the Mojolicious::Renderer(3) page β€” it's a User Contributed Perl Documentation moment, and the one-line vibe is Generate dynamic content. The whole main-character job of Mojolicious::Renderer is making dynamic content happen. Slay. ✨


✨ SYNOPSIS ✨

use Mojolicious::Renderer;

my $renderer = Mojolicious::Renderer->new;
push @{$renderer->classes}, 'MyApp::Controller::Foo';
push @{$renderer->paths}, '/home/sri/templates';

πŸ¦‹ DESCRIPTION πŸ¦‹

Mojolicious::Renderer is the standard Mojolicious renderer, periodt. If u want the full lore, see Mojolicious::Guides::Rendering for more. πŸ’…

πŸŽ€ ATTRIBUTES πŸŽ€

Mojolicious::Renderer implements this whole attribute squad β€” here's every one, no skips:

πŸ’– cache πŸ’–

my $cache = $renderer->cache;
$renderer = $renderer->cache(Mojo::Cache->new);

This is the renderer cache, and it defaults to a Mojo::Cache object. Cute.

πŸ’– classes πŸ’–

my $classes = $renderer->classes;
$renderer   = $renderer->classes(['main']);

These are the classes used for finding templates in DATA sections with Mojo::Loader. The first one has the highest precedence, and it defaults to main. Only files with exactly two extensions will be used, like index.html.ep. Note that for templates to be detected, these classes need to have already been loaded and added before warmup is called, which usually happens automatically during application startup.

# Add another class with templates in DATA section
push @{$renderer->classes}, 'Mojolicious::Plugin::Fun';

# Add another class with templates in DATA section and higher precedence
unshift @{$renderer->classes}, 'Mojolicious::Plugin::MoreFun';

πŸ’– compress πŸ’–

my $bool  = $renderer->compress;
$renderer = $renderer->compress($bool);

It tries to negotiate compression for dynamically generated response content and gzip compress it automatically. Defaults to true.

πŸ’– default_format πŸ’–

my $default = $renderer->default_format;
$renderer   = $renderer->default_format('html');

The default format to render if format is not set in the stash, defaults to html. Note that changing the default away from html is not recommended, as it has the potential to break, for example, plugins with bundled templates. ⚠️

πŸ’– default_handler πŸ’–

my $default = $renderer->default_handler;
$renderer   = $renderer->default_handler('ep');

The default template handler to use for rendering in cases where auto-detection doesn't work, like for inline templates.

πŸ’– encoding πŸ’–

my $encoding = $renderer->encoding;
$renderer    = $renderer->encoding('koi8-r');

Will encode generated content if set, defaults to UTF-8. Note that many renderers such as Mojolicious::Plugin::EPRenderer also use this value to determine if template files should be decoded before processing.

πŸ’– handlers πŸ’–

my $handlers = $renderer->handlers;
$renderer    = $renderer->handlers({epl => sub {...}});

The registered handlers live here.

πŸ’– helpers πŸ’–

my $helpers = $renderer->helpers;
$renderer   = $renderer->helpers({url_for => sub {...}});

The registered helpers live here too.

πŸ’– min_compress_size πŸ’–

my $size  = $renderer->min_compress_size;
$renderer = $renderer->min_compress_size(1024);

Minimum output size in bytes required for compression to be used if enabled, defaults to 860.

πŸ’– paths πŸ’–

my $paths = $renderer->paths;
$renderer = $renderer->paths(['/home/sri/templates']);

Directories to look for templates in. The first one has the highest precedence.

# Add another "templates" directory
push @{$renderer->paths}, '/home/sri/templates';

# Add another "templates" directory with higher precedence
unshift @{$renderer->paths}, '/home/sri/themes/blue/templates';

πŸ”₯ METHODS πŸ”₯

Mojolicious::Renderer inherits all methods from Mojo::Base and implements the following new ones.

✨ accepts ✨

my $all  = $renderer->accepts(Mojolicious::Controller->new);
my $best = $renderer->accepts(Mojolicious::Controller->new, 'html', 'json');

Selects the best possible representation for a Mojolicious::Controller object from the format GET/POST parameter, the format stash value, or the Accept request header. Defaults to returning the first extension if no preference could be detected.

✨ add_handler ✨

$renderer = $renderer->add_handler(epl => sub {...});

Register a handler.

$renderer->add_handler(foo => sub ($renderer, $c, $output, $options) {
  ...
  $$output = 'Hello World!';
});

✨ add_helper ✨

$renderer = $renderer->add_helper(url_for => sub {...});

Register a helper.

$renderer->add_helper(foo => sub ($c, @args) {
  ...
});

✨ get_data_template ✨

my $template = $renderer->get_data_template({
  template       => 'foo/bar',
  format         => 'html',
  handler        => 'epl'
});

Returns a DATA section template from classes for an options hash reference with template, format, variant and handler values, or undef if no template could be found. Usually used by handlers.

✨ get_helper ✨

my $helper = $renderer->get_helper('url_for');

Gets a helper by full name, generates a helper dynamically for a prefix, or returns undef if no helper or prefix could be found. Generated helpers return a proxy object containing the current controller object and on which nested helpers can be called. Ngl, that's kind of iconic.

✨ render ✨

my ($output, $format) = $renderer->render(Mojolicious::Controller->new);

Renders output through one of the renderers. See render in Mojolicious::Controller for a more user-friendly interface.

✨ respond ✨

my $bool = $renderer->respond(Mojolicious::Controller->new, $output, $format);
my $bool = $renderer->respond(
  Mojolicious::Controller->new, $output, $format, $status);

Finalizes dynamically generated response content and compresses it if possible.

✨ template_for ✨

my $name = $renderer->template_for(Mojolicious::Controller->new);

Returns the default template name for a Mojolicious::Controller object, or undef if no name could be generated.

✨ template_handler ✨

my $handler = $renderer->template_handler({
  template => 'foo/bar',
  format   => 'html'
});

Returns the handler for an options hash reference with template, format and variant values, or undef if no handler could be found.

✨ template_name ✨

my $template = $renderer->template_name({
  template => 'foo/bar',
  format   => 'html',
  handler  => 'epl'
});

Returns a template name for an options hash reference with template, format, variant and handler values, or undef if no template could be found. Usually used by handlers.

✨ template_path ✨

my $path = $renderer->template_path({
  template => 'foo/bar',
  format   => 'html',
  handler  => 'epl'
});

Returns the full template path for an options hash reference with template, format, variant and handler values, or undef if the file does not exist in paths. Usually used by handlers.

✨ warmup ✨

$renderer->warmup;

Prepares templates from classes for future use.

🌈 SEE ALSO 🌈

the see-also besties are:

go off. πŸ’…


okay that's the whole vibe check 🫢 β€” this page is from perl v5.42.0, dated 2026-07-15, and the footer calls it Mojolic...Renderer(3). no cap, that's the sign-off. periodt. βœ¨πŸ’–

πŸ“¦ where this page comes from