{{mustaches}} for C++
C++ Makefile M4 Batchfile Shell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
include/plustache Accept const string ref in template constructor Jan 23, 2015
m4 improve build to make it more automated May 21, 2016
msvc Add MSVC build. May 21, 2016
src fix bug with special characters in replacement text May 21, 2016
tests fix bug with special characters in replacement text May 21, 2016
utils add automated package builds via travis ci May 21, 2016
.gitignore Add MSVC build. May 21, 2016
.travis.yml add automated package builds via travis ci May 21, 2016
CHANGELOG.md finalize CHANGELOG for v0.4.0 May 21, 2016
LICENSE MIT, naturally Mar 14, 2010
Makefile.am improve build to make it more automated May 21, 2016
Makefile.packaging.mk fix syntax error in packaging Makefile May 21, 2016
README.md update install instructions in README May 21, 2016
configure.ac improve build to make it more automated May 21, 2016


plustache - mustache templates for C++

Build Status Coverage Status Packagecloud MIT license

Basic port of mustache templating to C++.


I just wanted to port mustache and build simple templating for C++. And I am still trying hard to keep it simple.


Simple Usage

Create a template:

Hi I am {{name}}.
I like {{thing}}.

Fill the context:

#include <string>
#include <plustache/plustache_types.hpp>
#include <plustache/template.hpp>

using std::string;
using PlustacheTypes::ObjectType;
using Plustache::template_t;

ObjectType ctx;
ctx["title"] = "About";
ctx["name"] = "Daniel";
ctx["thing"] = "turtles";

Instantiate template class and render the template:

template_t t;
string template("<h1>{{title}}</h1>\nHi I am {{name}}.\nI like {{thing}}.");

string result = t.render(template, ctx);


Hi I am Daniel.
I like turtles.

Advanced Usage

Create the template:

<h1> {{title}} </h1>
    {{# friends}}
      <li> {{name}}</li>
      <li> {{job}}</li>
      <li> {{status}}</li>
    {{/ friends}}

Create the context:

// create types
context ctx;
CollectionType c;
ObjectType jim;
ObjectType john;
ObjectType jack;
// Fill values
ctx.add("title", "My friends");
jim["name"] = "Jim";
jim["job"] = "Wizard";
jim["status"] = "Eating";
john["name"] = "John";
john["job"] = "Rainbow Painter";
john["status"] = "Sleeping";
jack["name"] = "Jack";
jack["job"] = "Unicorn Trainer";
jack["status"] = "Riding";
// enter data
ctx.add("friends", c);
// also possible
ctx.add("friends", jack);

Render the template:

template_t t;
string result = t.render(template, ctx);


There are packages available for some Linux distributions on Packagecloud.

Otherwise clone this repository and run the manual install task:

git clone git://github.com/mrtazz/plustache.git
autoreconf -i
make install

On OSX you can get it via my homebrew tap:

brew tap mrtazz/oss
brew install plustache

Running the unit tests

Build the google test library:

cd vendor/gtest-1.7.0

On OS X, you may get an error:

vendor/gtest-1.7.0/include/gtest/internal/gtest-port.h:499:13: fatal error:
'tr1/tuple' file not found
#   include <tr1/tuple>  // NOLINT

If so, re-run configure with the following argument


Build the test program

Run this from the top-level plustache source directory:

make test-program

If you get the tr1/tuple error, do:

make test-program

Run the test program


Building with Microsoft Visual Studio

The supplied MSBuild files will look for an installation of boost in the parent directory of this repo. The boost regex library must be built. For example:

cd boost_1_55_0
b2 -j8 toolset=msvc-12.0 address-model=64 --with-regex --prefix=../boost install

The boost directories and other build parameters can be configured by creating a Directories.targets file.

The gtest project files are generated by cmake. Use a command like this to recreate the gtest project files:

cd msvc/x64/msvc120/gtest
cmake -G "Visual Studio 12 Win64" ../../../../vendor/gtest-1.6.0 -Dgtest_force_shared_crt=ON

Supported Functionality (as described in the man page)

  • Variables
  • Sections
    • False Values/Empty Lists
    • Non-Empty-Lists
  • Inverted Sections
  • Comments
  • Partials
  • Set Delimiter
  • HTML escape syntax (triple mustaches)


  • plustache executable


  • boost for regex and some other things
  • google test for unit testing (included)