npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@sissijs/muh

v2.0.0

Published

Muh (say: Moo!) stands for 'mustached hypertext' and is a template language for static site generators

Readme

Muh

Muh (say: Moo!) stands for "mustached hypertext" and is the template language that runs Sissi, the static site generator. It is put into a single package so it can be re-used in other projects as well.

Flavors

Muh comes in 2 flavors. Both of them live in the @sissijs/muh package.

@sissijs/muh includes everything. A full-fledged processTemplateFile function that supports SmolYAML/JSON frontmatter, layout files, basic preprocessing such as (a minimal) markdown, handling css imports and resolving <html-include src=""> directives. In roughly 10KB of JavaScript.

@sissijs/muh/template is just the template function that implements the mustache syntax. It also provides the built-in filters for formatting dates/numbers, and built-in helper functions. The helper functions provided are small wrappers around fetch, namely fetchText() and fetchJson(). All that is contained in roughly 4KB of JavaScript.

Sizes are measured with minification and without compression.

TypeScript declarations and API documentation are autogenerated from JSDoc.

Syntax

The syntax is {{ moo }} where moo can be any arbitrary JavaScript. JavaScript is evaluated in a safe context. The only globals it can access are the ones you provide, plus a few built-ins.

When the evaluated expression is a promise, it is automatically resolved (or rejected). When the evaluated expression is a function, it is automatically invoked without parameters.

Under the hood, it uses node:vm, which makes it a node-only library (for now). It should work in Deno 2, as it provides some backwards-compatibility to node.js.

Filters

You can apply filters to your mustache expressions using the pipe notation. There are a few built-in filters:

{{ content | safe }} // dont escape html
{{ promise | async }} // resolve promises
{{ result | json }} // print json
{{ article.date | date: 'de' }} // 25.12.2024 (for first Christmas Day 2024)
{{ price | currency: 'de', 'euro' }}  // 1.234,56 €
{{ fetchJson('/api/articles') | async | limit: 5 | each: templateFunction }} 
{{ include('article.html', {title: 'Article Title'}) | safe }}
{{ '<' | htmlentities }} // &lt;
{{ ' ' | urlencode }} // %20

Helpers

There are a few built-in helper functions:

{{ fetchJson('https://yesno.wtf/api') | async | json }}
{{ fetchText('https://some-html.api/api/weather') | async }}

{{ include('partial.html', {title: 'some additional data'}) }}

Additional Syntaxes

HTML-files can use <html-include src="partial.html" title="some additional data"/> directives. Additional attributes are passed to the include's data.

There is a basic markdown processor for markdown files involved. Markdown files also interprete the <html-include> directive.

Also, CSS import directives are resolved.

All file types mentioned above can also work with the mustache syntax.

Usage

const result = await processTemplateFile(
  '<h1>{{ title }}</h1>',
  'index.html', 
  {title: 'Test'}
);

console.log(result) // <h1>Test</h1>