Rust Mustache

mustache template library for rust
Alternatives To Rust Mustache
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Milk194856 years ago6May 08, 20114CoffeeScript
Milk is Mustache in CoffeeScript -- great with your browser or NodeJS!
Rust Mustache132241262 years ago12February 12, 201815otherRust
mustache template library for rust
24a year ago28March 23, 20227otherHaskell
Haskell implementation of mustache templates
Bart30543 months ago7January 05, 20237mitRust
A compile time templating language for Rust inspired by Mustache
2 days ago1mpl-2.0OCaml
A declarative, type-safe template language
Php Mustache8
10 years agoPHP
Mustache template parser, compiler and interpreter in PHP.
3 months agomitJavaScript
A natural template engine for the HTML DOM
12 years ago
C implementation of the Mustache logic-less templating language
5 years agomitSwift
Templating engine for Swift, similar to Handlebars & Mustache.
11 years ago1PHP
Mustaml is a html template language, logic-less and neat.
Alternatives To Rust Mustache
Select To Compare

Alternative Project Comparisons

Mustache Ohloh statistics Build Status

Inspired by ctemplate and et, Mustache is a framework-agnostic way to render logic-free views.

As ctemplates says, "It emphasizes separating logic from presentation: it is impossible to embed application logic in this template language."

rust-mustache is a rust implementation of Mustache.


The different Mustache tags are documented at mustache(5).

Documentation for this library is here.


Install it through Cargo!

mustache = "*"

Basic example

extern crate serde_derive;
extern crate mustache;

use std::io;
use mustache::MapBuilder;

struct Planet {
    name: String,

fn main() {
    // First the string needs to be compiled.
    let template = mustache::compile_str("hello {{name}}").unwrap();

    // You can either use an encodable type to print "hello Mercury".
    let planet = Planet { name: "Mercury".into() };
    template.render(&mut io::stdout(), &planet).unwrap();

    // ... or you can use a builder to print "hello Venus".
    let data = MapBuilder::new()
        .insert_str("name", "Venus")

    template.render_data(&mut io::stdout(), &data).unwrap();

    // ... you can even use closures.
    let mut planets = vec!("Jupiter", "Mars", "Earth");

    let data = MapBuilder::new()
        .insert_fn("name", move |_| {

    // prints "hello Earth"
    template.render_data(&mut io::stdout(), &data).unwrap();

    // prints "hello Mars"
    template.render_data(&mut io::stdout(), &data).unwrap();

    // prints "hello Jupiter"
    template.render_data(&mut io::stdout(), &data).unwrap();


Simply clone and run:

# If you want to run the test cases, you'll need the spec as well.
git submodule init
git submodule update

cargo test

# If you want to test the readme example, we're currently using the unstable feature to do so.
cargo +nightly test --features unstable


If cutting a new release, please follow something along the lines of the below:

# Assuming master is the current release commit, ideally it will be a commit
# announcing the release and the only change would be the version number.

# Ensure everything looks good
cargo publish --dry-run

# Actually publish
cargo publish

# Tag the release, prefix it with 'v' for easy tag searching, i.e. git tag --list 'v*'
git tag vX.Y.Z

git push --tags origin master



Popular Mustache Projects
Popular Template Language Projects
Popular Web User Interface Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Template Language