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