Help language development. Donate to The Perl Foundation

Template::Mustache cpan:SOFTMOTH last updated on 2020-05-06


Build Status Windows Status

Raku implementation of Mustache templates,


use Template::Mustache;

# Call .render as a class method
Template::Mustache.render('Hello, {{planet}}!', { planet => 'world' }).say;

# Or instantiate an instance
my $stache = :from<./views>;

# Subroutines are called
say $stache.render('The time is {{time}}', {
    time => { }

my @people =
    { :name('James T. Kirk'), :title<Captain> },
    { :name('Wesley'), :title('Dread Pirate'), :emcee },
    { :name('Dana Scully'), :title('Special Agent') },

# See this template in ./t/views/roster.mustache
$stache.render('roster', { :@people }).say;

my %context =
    event => 'Masters of the Universe Convention',
my %partials =
    welcome =>
        qq:b{Welcome to the {{event}}! We’re pleased to have you here.\n\n},

# See this result in ./t/50-readme.t
        {{> welcome}}
        {{> roster}}

            Dinner at 7PM in the Grand Ballroom. Bring a chair!
    :from([%partials, './views'])

More Examples and Tests

The Mustache spec provides a wealth of examples to demonstrate exactly how the format behaves.

To run tests,

# Using Raku's prove6 tool:
zef install App::Prove6
prove6 -Ilib -v

# or using Perl's prove:
RAKULIB=./lib prove -e raku -v

All spec tests pass: The perl6 branch just updates the .json files to match the .yml sources (needed until someone writes a compliant YAML parser in Raku … hint, hint), and adds Raku lambda code strings for that portion of the specs.

A copy of the tests is distributed in t/specs. To check against the specs repository, clone it into ../mustache-spec:

# Ensure you are using the default 'perl6' branch, not 'master'
git clone [email protected]:softmoth/mustache-spec.git ../mustache-spec
git branch -v

Other Mustache Implementations

There are many, many Mustache implementations in various languages. Some of note are:



Artistic License 2.0