Build Status

Disclaimer 2018-03-26: Lanyon’s initial goal was to be a tool for everybody, but since it never really took off and that we have limited time to make this really nice, we’ve decided to reduce its scope to be useful to just We won’t be as interested in supported other usecases, so you might want to think twice about adopting it. This is mostly still publicly available for our own convenience, and in the off-chance Lanyon as-is, is still useful to others. In addition, we’ve introduced the requirement of Node 8 & Docker installed, in order to cut down on countering with Ruby dependency hells and speed up development without transpiling.


In your website project root:

yarn add lanyon

Add a .lanyonrc file that you can use to tweak the configuration of Jekyll, Webpack, Nodemon, BrowserSync according to your environment:

module.exports.overrideRuntime = function ({ runtime, toolkit }) {
  if (!runtime.isDev) {
    runtime['prebuild:content'] = 'npm run inject'

  return runtime

module.exports.overrideConfig = function ({ config, toolkit }) {
  if (config.runtime.isDev) {
    config.jekyll.url = 'http://localhost:3000'

  config.jekyll.profile = true
  config.jekyll.trace   = true

  if (config.runtime.isDev) {
    config.jekyll.unpublished = true
    config.jekyll.future      = true
    config.jekyll.incremental = true  // <-- for clarify; incremental is the default also
  } else {
    config.jekyll.incremental = false

  return config

To your package.json, at these run-scripts:

"build:production": "LANYON_ENV=production npx lanyon build"
"build": "npx lanyon build"
"postinstall": "rm -rf .lanyon/{babel,cache}-loader"
"start": "npx lanyon start"

Read why the postinstall is necessary.


yarn build # or npm run build
yarn start # or npm start


Please see the file.

Reading List

These articles where helpful in creating Lanyon



Copyright (c) 2016 Kevin van Zonneveld. Licenses under MIT.

Website design based on the wonderful with the author's consent.