Need private packages and team management tools?Check out npm Orgs. »


1.1.1 • Public • Published


Build Status npm version

Guillermo is a static content engine written in Javascript, for Node.js projects. It powers my personal site and is meant to be used for sites with static content, such as blogs or websites, either as a complimentary addition or the sole thing driving it - that's for you to decide.

Example content file

All of the content files in Guillermo are Markdown files. That means they have a file name of They can be in any directory you want (you can specify it) and they contain YAML metadata. An example of a Guillermo file is the following (probably a familiar format if you've used Jekyll before):

date: 2019-02-18
status: public
slug: example-url-slug
title: Example page

Example content in **Markdown** goes here.

This would create the following object:

  meta: {
    date: "2019-02-18",
    status: "public",
    slug: "example-url-slug",
    title: "Example page"
  content: "<p>Example content in <em>Markdown</em> goes here.</p>"


To install Guillermo, get it from NPM:

npm install guillermo --save

And then simply require it:

const guillermo = require('guillermo')


Retrieving all content in a directory

To retrieve all of the content in a directory, simply initialize Guillermo with your provided directory and call items() on it, like this:

let content = new guillermo({directory: "./Blog/"})
content.items().then((items) => {
  // access your items here

This will return you an array of objects.

Retreving a specific item in a directory

To retrieve a specific content item in a directory, initialize Guillermo and call item({key: "key", value: "value"}) on it (where key is corresponding with the YAML meta key and the value with its value in the file), like this:

let content = new guillermo({directory: "./Blog/"})
content.item({key: "slug", value: "hello-world"}).then((item) => {
  // access your item here

Ordering content

You can order content by any meta key in descending or ascending order. For example; if we want to order content by the meta key date in a descending order, we would do the following:

let content = new guillermo({directory: "./Blog/", orderBy: "date", order: "desc"})

Likewise if you want it to be in ascending order, simply change order to asc.

Limiting and offsetting content

You can limit and offset content by adding limit and/or offset to the constructor. For example:

let content = new guillermo({directory: "./Blog", limit: 100, offset: 50})

Note that if you don't specify limit or offset, then they fall back to their default values 10 and 0, respectively.


npm i guillermo

Downloadsweekly downloads









last publish


  • avatar
Report a vulnerability