NodeJS: How to use mixins in Pug templates

Updated: February 6, 2024 By: Guest Contributor Post a comment


Understanding the use of mixins in Pug templates can greatly enhance your web development process, especially when you’re working with Node.js. Mixins in Pug offer a powerful way to create reusable pieces of HTML, helping you to write more maintainable and cleaner code. This tutorial will guide you through the basics of creating and using mixins within your Pug templates when working in a Node.js environment.

What are mixins?

First, let’s understand what mixins are in the context of Pug. A mixin is essentially a reusable piece of Pug code that can be inserted into templates wherever needed. Think of it as a function that returns HTML based on its input.


Before diving into mixins, ensure your Node.js environment is set up. You’ll need Node.js and NPM installed. If you haven’t yet, download them from Next, create a new Node.js project by initializing it with npm init and then install Pug using npm install pug.

Defining a Mixin in Pug

To define a mixin in Pug, you use the mixin keyword followed by the name of the mixin and its parameters. For example:

mixin link(text, href)
  a(href=href)= text

This mixin creates an anchor tag with the provided text and href.

Using Mixins in Your Templates

To use a mixin in a Pug template, you simply call it by its name, like a function, passing any required arguments:

+link('Node.js', '')

This would compile to an anchor tag leading to the Node.js homepage.

Advanced Mixin Usage

Mixins can also accept blocks of Pug code as content, allowing for more complex structures:

mixin infoPanel(title)
    .panel-heading= title
    if block
mixin listItem(item)
  li= item

Here, the infoPanel mixin generates a panel structure, optionally including a body if content is provided. listItem is a simpler mixin for list items.

Calling Mixins with Blocks

To use the infoPanel mixin with additional content within its body, you use the following syntax:

+infoPanel('User Details')
  each user in users

This allows dynamic generation of user lists within an info panel.

Practical Applications and Examples

Reusability is one of the main advantages of using mixins. They can dramatically reduce the redundancy of your HTML code in templates. Consider a website where several pages display information panels; using the infoPanel mixin allows you to define the panel’s structure once and reuse it across all these pages.

Best Practices for Using Mixins

  • Name Mixins Clearly: Choose names that clearly describe what the mixin does to improve code readability.
  • Don’t Overuse: While mixins are powerful, overuse can make templates hard to follow. Use them for repetitive, not one-off elements.
  • Parameter Default Values: Providing default values for mixin parameters can make mixins more versatile and error-resistant.


Mixins in Pug present a flexible and powerful feature for Node.js web developers looking to create dynamic and maintainable templates. With the ability to define and call reusable pieces of HTML code, developers can streamline their workflow and improve the readability of their templates. By following the practices outlined in this guide, you’ll be well-prepared to utilize mixins in your Pug templates, making for a more efficient and enjoyable web development process.