mustache

Use mustache.js (logic-less Mustache templates) for any templating task in JavaScript/Node.js environments.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "mustache" with this command: npx skills add openlark/mustache

Mustache

Zero-dependency, logic-less template engine for JavaScript. Renders tags in templates using values from a view object.

Triggers

when the user asks to render templates, use Mustache syntax {{ }}, create .mustache files,generate HTML/config/code from templates, or mentions mustache/mustache.js/{{mustache}}.

Covers

variables, sections, inverted sections, partials, comments, custom delimiters, CLI usage, pre-parsing/caching, and common patterns (email templates, config generation, code scaffolding).

Install

npm install mustache --save        # project dependency
npm install -g mustache            # CLI tool

Core API

const Mustache = require('mustache');
const html = Mustache.render(template, view, partials, tags);
  • template (string) — Mustache template string
  • view (object) — data & helper functions
  • partials (object, optional) — { name: partialString }
  • tags (string[], optional) — custom delimiters [ open, close ]

Tag Types Quick Reference

TagSyntaxBehavior
Variable{{key}}HTML-escaped value
Unescaped{{{key}}} or {{&key}}Raw HTML output
Dot notation{{a.b.c}}Nested property access
Current item{{.}}Current item in string array loop
Section{{#key}}...{{/key}}Truthy → render block; array → loop
Inverted{{^key}}...{{/key}}Falsy/empty → render block
Comment{{! text }}Stripped from output
Partial{{> name}}Inline another template
Set Delimiter{{=<% %>=}}Change tag delimiters

Sections — Detailed

Falsy (skip): null, undefined, false, 0, NaN, "", [] → block not rendered.

Non-empty array (loop): Block renders once per item; context shifts to each item.

// String array — use {{.}} for current item
Mustache.render('{{#items}}- {{.}}\n{{/items}}', { items: ['a','b'] });
// → "- a\n- b\n"

// Object array — access properties directly
Mustache.render('{{#people}}* {{name}}\n{{/people}}', {
  people: [{ name: 'Alice' }, { name: 'Bob' }]
});
// → "* Alice\n* Bob\n"

// Lambda function — receives raw block text + render helper
Mustache.render('{{#bold}}Hi {{name}}{{/bold}}', {
  name: 'World',
  bold: function() {
    return function(text, render) {
      return '<b>' + render(text) + '</b>';
    };
  }
});
// → "<b>Hi World</b>"

Partials

Pass as third argument; inherit the calling context.

Mustache.render(
  '<h2>Names</h2>{{#names}}{{> user}}{{/names}}',
  { names: [{ name: 'Alice' }, { name: 'Bob' }] },
  { user: '<strong>{{name}}</strong>\n' }
);
// → <h2>Names</h2>\n<strong>Alice</strong>\n<strong>Bob</strong>\n

Custom Delimiters

// JS: pass as 4th argument or set Mustache.tags
Mustache.render(template, view, {}, ['<%', '%>']);

// Template: set delimiter inline
{{=<% %>=}}<% erb_style %><%={{ }}=%>
// Delimiters may not contain whitespace or =

Pre-parsing / Caching

Mustache.parse(template);  // cache parsed tree
// Later calls with the same template skip parsing

CLI Usage

mustache data.json template.mustache > output.html
mustache data.json -p partials/header.mustache -p partials/footer.mustache template.mustache
cat data.json | mustache - template.mustache > output.html

Common Patterns

For detailed examples and anti-patterns, see references/patterns.md.

Escape override (for non-HTML like config files):

Mustache.escape = t => t;

Include template in HTML (static sites):

<script id="tpl" type="x-tmpl-mustache">{{> content}}</script>

Async load template (SPAs):

fetch('tpl.mustache').then(r => r.text()).then(t => {
  document.getElementById('out').innerHTML = Mustache.render(t, data);
});

Anti-patterns

  • Do NOT put logic in views — Mustache is logic-less; move logic to pre-processing
  • Avoid recursive partials without a termination condition
  • Do NOT use Mustache.escape = t => t globally without restoring it afterward

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Aliyun Drive Uploader

阿里云盘文件上传与管理。使用 refresh_token 认证,支持大文件分片上传、自动创建文件夹、文件搜索、分享链接等。当用户需要上传文件到阿里云盘、创建文件夹、搜索文件、管理分享链接时使用。

Registry SourceRecently Updated
General

Skill Manager All In One | 一站式技能管理器

Manage OpenClaw skills end-to-end. 一站式管理 OpenClaw 技能的创建、修改、发布、更新、升版与审计。

Registry SourceRecently Updated
General

Contact Centre Grok Pack

Triage call-centre and voice support transcripts into summaries, sentiment, urgency, routing queues, and follow-up actions. Use for OpenClaw-ready Grok/voice...

Registry SourceRecently Updated
General

3dgs Method Compare

Compare 3D Gaussian Splatting variants across multiple dimensions. Generates detailed comparison tables covering primitive representation, rendering formulat...

Registry SourceRecently Updated
mustache | V50.AI