metalsmith-express

August 18, 2026 ยท View on GitHub

express based middleware for metalsmith for local development and testing.

By default, this will use express.static to serve your metalsmith built files. It also uses connect-livereload which works well in conjunction with metalsmith-watch for development purposes.

To disable connect-livereload see options below.

Usage

var metalsmith        = require('metalsmith');
var watch             = require('metalsmith-watch');
var metalsmithExpress = require('metalsmith-express');

metalsmith(__dirname)
  .use(metalsmithExpress())
  .use (
    watch({
      paths: {
        '${source}/**/*': true
      },
      livereload: true
    })
  )
  .build(function(err) {
    if (err) throw err;
  });

Options

{
  "liveReload": true,
  "liveReloadPort": 35729,
  "middleware": [],
  "staticOptions": {}
}

You may use express middleware by pushing it onto the middleware option array. Currently only the use(function(req,res,next)) convention is supported.

var middleware = [];

middleware.push(function(req, res, next) {
  console.log('Time:', Date.now());
  next();  
});

var metalsmithExpress = require('metalsmith-express')
({
  middleware: middleware
});

Options for express.static (i.e. serve-static) can be passed through the staticOptions option. For example, to serve foo.html when foo is requested:

var metalsmithExpress = require('metalsmith-express');

metalsmithExpress({
  staticOptions: {
    extensions: ['html']
  }
});

Todo

  • Allow for any valid middleware pattern

License

MIT