Add a Plugin

Blog Tools for 11ty

This plugin is a series of shortcodes and filters that aim to help you write and organize your blog

Install instructions

Available on npm.

npm install eleventy-plugin-blog-tools --save

Open up your Eleventy config file (probably .eleventy.js) and add the plugin:

const blogTools = require("eleventy-plugin-blog-tools");
module.exports = function(eleventyConfig) {


There are multiple shortcodes and filters in this plugin. Each has its own usage.


This custom tag creates an excerpt from a page with front matter and/or standard markdown.

Main Usage:

    {% excerpt post %}

Where post is an instance of a markdown file being pulled in via an 11ty template engine.

The Excerpt is built from one of three options:

  1. Excerpt first looks for a singular <!-- excerpt --> tag in the markdown.
  2. Then, Excerpt looks for a pair of HTML comments in your markdown specifying a start and end point for the excerpt. <!-- excerpt start --> and <!-- excerpt end --> (capitalization not important)
  3. If no start and end specified, the Excerpt tag will then look for the excerpt property in your MD file's frontmatter.
  4. If no excerpt is found in frontmatter, the tag will pull the first paragraph of the post.


The YouTube shortcode takes a YouTube video ID and creates the markup for a fluidly-responsive YouTube embed.

{% youtube "idstring" %}


The Vimeo shortcode takes a Vimeo video ID and creates the markup for a fluidly-responsive Vimeo embed.

{% vimeo "idstring" %}


The CodePen shortcode takes multiple values to customize your embed.

{% codepen "URL", "codepen tabs string", "unitlessHeight", "theme ID" %}

{% codepen "" %}
{% codepen "", "css,result", "900", "26704"  %}

The various options have a required order (hopefully that will change in the future):

The first argument is the only required argument and it's the Pen's full URL. In Nunjucks, they need to be comma separated, in Liquid commas are optional.

Related Filter

The related filter will pull items from a list based on parameters passed to the function.


The basic usage is to filter a collection based on an array of items and a threshold.

Syntax: {{ collections.posts | related(<sort-field-key>, <sort-field-data>, <threshold-integer Defaults to 1>, <URL-to-Exclude-optional>)}}

The threshold integer is meant to force a number of array items in common. Defaults to 1.

{% for post in collections.posts | related("sortField", sortField, 1) %}
  {{ }}
{% endfor %}