Easily deploy Jekyll to Google App Engine
Ruby Shell
Latest commit e562baf Mar 10, 2016 @jamesramsay Merge pull request #6 from jamesramsay/clean-yaml
Fix: remove nil values before writing app.yaml (fixes #5)
Failed to load latest commit information.
script New: jekyll-app-engine generates app.yaml to host static site on Goog… Mar 1, 2016
spec Fix: remove nil values before writing app.yaml (fixes #5) Mar 10, 2016
.simplecov Build: add codecov.io coverage monitoring Mar 6, 2016
LICENSE Initial commit Feb 25, 2016
Rakefile New: jekyll-app-engine generates app.yaml to host static site on Goog… Mar 1, 2016
jekyll-app-engine.gemspec Build: deployment setup Mar 7, 2016


Jekyll App Engine: easy deployments to Google App Engine

Build Status Version Coverage Status

Jekyll App Engine (jekyll-app-engine) makes it easy to deploy your Jekyll static site to Google App Engine by generating your app.yaml handlers.

Hosting your static site on Google App Engine gives you greater flexibility than using Github Pages and may potentially be cheaper and more configurable than Amazon AWS. Using Google App Engine allows:

  • fine grained HTTP cache control for pages and assets,
  • HTTP/2 support including server push Link: "</assets/style.css>; rel=preload; as=style,", and
  • custom jekyll plugins not permitted by Github Pages, such as jekyll-assets

Using Google App Engine has some challenges:

  • Customising handling of 404 errors can only be done by running an application instance, which may be costly.

Get Started

These instructions assume you already have a Google App Engine account.

1. Install jekyll-app-engine

Add gem jekyll-app-engine to your Gemfile.

source 'https://rubygems.org'
gem 'github-pages'
gem 'jekyll-app-engine'

Add to your config.yml.

  - jekyll-app-engine

2. Basic configuration

Specify a basic configuration in the file _app.yaml or using the app_engine option configurations to your Jekyll _config.yml.

  # Insert your configuration here or within _app.yaml
  # You need to specify a runtime for App Engine
  runtime: go
  api_version: go1
  default_expiration: 300s

3. Create an empty 'app'

App Engine expects all apps to have some sort of application. Create a file called init.go.

// Included to enable deployment to Google App Engine
package hello

import (

func init() {

You can put this anywhere, for example in a folder _app/init.go to keep your root tidy.

4. Test and Deploy

Build your jekyll site, and you should notice the file app.yaml in the output directory. Before deploying you will need to move this file to the projects root directory, where your config.yml file is located.

Automatic deployment using Travis: https://docs.travis-ci.com/user/deployment/google-app-engine

Manual deployment using the Google App Engine tools: todo


Basic Configuration

jekyll-app-engine can be configured by creating a file _app.yaml in the source directory or by providing the configuration in the Jekyll config _config.yml. The handlers option allows you to specify custom http headers and other feature supported by Google App Engine by Jekyll content type. The supported content types are:

  • posts
  • pages
  • collections
  • static

If you provide an Array or a url option, the configuration for the content type will be inserted directly as a handler, instead of generating a handler per item within the content type.

Document Specific Overrides

Each document can specify overrides within the document's YAML frontmatter.