Home

Awesome

Gojekyll

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->

All Contributors

<!-- ALL-CONTRIBUTORS-BADGE:END -->

go badge Golangci-lint badge Coveralls badge Go Report Card badge MIT License

This project was created by Oliver Steele (@osteele), and is currently maintained by Daniil Gentili (@danog).

Gojekyll is a partially-compatible clone of the Jekyll static site generator, written in the Go programming language. It provides build and serve commands, with directory watch and live reload.

 GojekyllJekyllHugo
Stable
Fast<br>(~20×Jekyll)
Template languageLiquidLiquidGo, Ace and Amber templates
SASS
Jekyll compatibilitypartial
Pluginssomeyesshortcodes, theme components
Windows support
Implementation languageGoRubyGo
<!-- TOC --> <!-- /TOC -->

Usage

gojekyll build       # builds the site in the current directory into _site
gojekyll serve       # serve the app at http://localhost:4000; reload on changes
gojekyll help
gojekyll help build

Installation

Docker

You can use gojekyll with the official danog/gojekyll image, for example to build the site in the current directory into _site:

docker run --user $UID:$GID -v $PWD:/app --pull always --rm -it danog/gojekyll build -s /app

Another example, serve the website in the current directory on http://localhost:4040, automatically reloading on changes:

docker run --user $UID:$GID -v $PWD:/app --pull always --network host --rm -it danog/gojekyll serve -s /app

Binary Downloads

  1. Linux, Mac OS and Windows binaries for x86, amd64, armv6/v7, armv8, riscv64 are available from the releases page.
  2. Download the latest version of dart-sass and add it to your PATH, or see the Sass website for full installation instructions.
  3. [Optional] Themes. To use a theme, you need to install Ruby and bundler. Create a Gemfile that lists the theme., and run bundle install. The Jekyll theme instructions provide more detail, and should work for Gojekyll too.

From Source

Pre-requisites:

  1. Install go (1) via Homebrew: brew install go; or (2) download.
  2. See items (2-3) under Binary Downloads, above.

Then run:

go install github.com/osteele/gojekyll@latest

[Optional] Install command-line autocompletion

Add this to your .bashrc or .zshrc:

# Bash:
eval "$(gojekyll --completion-script-bash)"
# Zsh:
eval "$(gojekyll --completion-script-zsh)"

Status

This project works on the GitHub Pages sites that I and other contributors care about. It looks credible on a spot-check of other Jekyll sites.

Current Limitations

Missing features:

Also see the detailed status below.

Other Differences

These will probably not change:

By design:

Upstream:

Muzukashii:

Feature Checklist

Troubleshooting

If the error is "403 API rate limit exceeded", you are probably building a repository that uses the jekyll-github-metadata gem. Try setting the JEKYLL_GITHUB_TOKEN, JEKYLL_GITHUB_TOKEN, or OCTOKIT_ACCESS_TOKEN environment variable to the value of a GitHub personal access token and trying again.

Contributors

Thanks goes to these wonderful people (emoji key):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tr> <td align="center"><a href="https://code.osteele.com/"><img src="https://avatars.githubusercontent.com/u/674?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Oliver Steele</b></sub></a><br /><a href="https://github.com/osteele/gojekyll/commits?author=osteele" title="Code">💻</a> <a href="#design-osteele" title="Design">🎨</a> <a href="https://github.com/osteele/gojekyll/commits?author=osteele" title="Documentation">📖</a> <a href="#ideas-osteele" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-osteele" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-osteele" title="Maintenance">🚧</a> <a href="#projectManagement-osteele" title="Project Management">📆</a> <a href="https://github.com/osteele/gojekyll/pulls?q=is%3Apr+reviewed-by%3Aosteele" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/osteele/gojekyll/commits?author=osteele" title="Tests">⚠️</a></td> <td align="center"><a href="https://bep.is/"><img src="https://avatars.githubusercontent.com/u/394382?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Bjørn Erik Pedersen</b></sub></a><br /><a href="https://github.com/osteele/gojekyll/commits?author=bep" title="Documentation">📖</a></td> <td align="center"><a href="https://tqdev.com/"><img src="https://avatars.githubusercontent.com/u/1288217?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Maurits van der Schee</b></sub></a><br /><a href="https://github.com/osteele/gojekyll/commits?author=mevdschee" title="Code">💻</a></td> <td align="center"><a href="https://daniil.it/"><img src="https://avatars.githubusercontent.com/u/7339644?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Daniil Gentili</b></sub></a><br /><a href="https://github.com/osteele/gojekyll/commits?author=danog" title="Code">💻</a></td> <td align="center"><a href="http://cameronelliott.com/"><img src="https://avatars.githubusercontent.com/u/868689?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cameron Elliott</b></sub></a><br /><a href="#ideas-cameronelliott" title="Ideas, Planning, & Feedback">🤔</a></td> </tr> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the all-contributors specification. Contributions of any kind welcome!

Attribution

Gojekyll uses these libraries:

PackageAuthor(s)UsageLicense
github.com/jaschaephraim/lrserverJascha EphraimLive ReloadMIT License
github.com/kyokomi/emojikyokomijemoji plugin emulationMIT License
github.com/osteele/liquidyours trulyLiquid processorMIT License
github.com/pkg/browserpkgserve --open-url optionBSD 2-clause "Simplified" License
github.com/radovskyb/watcherBenjamin RadovskyPolling file watch (--force_polling)BSD 3-clause "New" or "Revised" License
github.com/danog/blackfridayRuss Ross, Daniil GentiliMarkdown processingSimplified BSD License
github.com/sass/dart-sassListed hereThe reference implementation of Sass, written in Dart.MIT License
github.com/tdewolff/minifyTaco de WolffCSS minimizationMIT License
github.com/bep/godartsassDrew WellsGo API backed by the native Dart Sass Embedded executable.MIT License
github.com/alecthomas/kingpin/v2Alec Thomascommand-line argumentsMIT License
github.com/alecthomas/chromaAlec ThomasSyntax highlighterMIT License
gopkg.in/yaml.v2CanonicalYAML supportApache License 2.0

In addition, the following pieces of text were taken from Jekyll and its plugins. They are used under the terms of the MIT License.

SourceUseDescription
Jekyll template documentationtest casesfilter examples
jekyll help commandgojekyll help texthelp text
jekyll-feed pluginplugin emulationfeed.xml template
jekyll-redirect-from pluginplugin emulationredirect page template
jekyll-sitemap pluginplugin emulationsitemap template
jekyll-seo-tag pluginplugin emulationfeed template

The theme for in-browser error reporting was adapted from facebookincubator/create-react-app.

The gopher image in the testdata directory is from Wikimedia Commons. It is used under the Creative Commons Attribution-Share Alike 3.0 Unported license.

In addition to being totally and obviously inspired by Jekyll and its plugins, Jekyll's solid documentation was indispensible --- especially since I wanted to implement Jekyll as documented, not port its source code. The Jekyll docs were always open in at least one tab during development.

Related

Hugo is the pre-eminent Go static site generator. It isn't Jekyll-compatible (-), but it's highly polished, performant, and productized (+++).

Liquid is a pure Go implementation of Liquid templates. I created it in order to use in this project.

Jekyll, of course.

License

MIT