A [now unmaintained] barebones, node-based blog engine
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



A simple, bare-bones, file-based blog engine.


Derp is bascially a glorified markdown parser, and it wants posts in a certain way. Given the following first-post.md:

url: my-first-post

# My First Post

...herpin' the derp...

Derp will give you an object that looks like this:

  title: "My First Post",
  url: "my-first-post",
  content: "<p>...herpin' the derp...</p>"

Derp takes the first heading 1 it finds and sets it to be the post's title. Anything before that heading is treated as a meta section. Simply add the key:values you want, and they'll come out in the post object:

url: a-new-post
tags: derp, markdown, another tag
date: 15 June 2014

# A new post

  title: "A new post",
  url: "a-new-post",
  tags: ['derp', 'markdown', 'another tag'],
  date: "Sun Jun 15 2014 21:05:39 GMT+0100 (BST)",
  content: "<p>...</p>"

Derp treats certain meta keys in certain ways:

  • the url meta becomes the url slug for the post, and is the only meta which is required. (Posts without URLs are ignored — think of it as a primitive draft system)
  • a tags key with a comma-delimmited list will become an array of tags
  • a date will be parsed as a javascript date

Other than those, add whatever meta you want!

Also, it'll watch for changes in the post directory, making sure to keep everything updates for you.


I needed a blog engine for my site, and wanted an excuse to play around with ES6 generators, node streams, and regex. I drew some heavy inspiration from @jsantell's poet.

Basic setup

  1. Install Node
  2. npm install derpjs

Here's a basic (and contrived) example:

var express = require('express');
var app = express();
var derp = require('derpjs');


app.get('/', function(req, res) {
  res.send(derp.getAllPosts()); // What, you don't like JSON?

app.get('/:url', function(req, res, next) {
  var post = derp.getPost(req.params.url);
  if (!post) res.send(404);


For more real-wordl examples, see the koa and express examples.



Parses all the posts, and sets up a watcher on the posts directory to keep track of file changes. Optionally pass in an options hash (checkout the defaults).


Returns a post that matches the given path (where the path is a relative url defined on a post).


Returns an array containing all the posts. The array is not sorted, so this is up to you.

Thanks to...