1
0
mirror of https://github.com/danog/gojekyll.git synced 2024-11-27 01:34:41 +01:00
Go to file
2017-08-10 11:03:24 -04:00
.github Update docs to point to issues. 2017-07-09 19:20:26 -04:00
cache Tests enable, disable cache 2017-07-23 16:21:24 -04:00
collection Rename {Page.Content,Collection.SetPageContent,Site.setPageContent} -> Render 2017-08-10 11:03:24 -04:00
commands variables subcommand converts []byte to string 2017-08-10 09:07:33 -04:00
config Incremental pt. 2 2017-07-25 11:08:53 -04:00
docs comments 2017-08-08 17:22:44 -04:00
filters Implement scssify 2017-07-15 10:59:55 -04:00
frontmatter remove page.RenderContext 2017-07-10 13:23:51 -04:00
pages Rename {Page.Content,Collection.SetPageContent,Site.setPageContent} -> Render 2017-08-10 11:03:24 -04:00
pipelines Render excerpts 2017-08-10 10:44:04 -04:00
plugins Change Page.content []byte -> string 2017-08-10 09:07:33 -04:00
scripts Fix a race 2017-07-14 10:59:32 -04:00
server Better reload 2017-08-08 19:44:04 -04:00
site Rename {Page.Content,Collection.SetPageContent,Site.setPageContent} -> Render 2017-08-10 11:03:24 -04:00
tags include tag looks in $theme/_includes 2017-07-25 09:49:54 -04:00
templates Use template.SetSourceLocation instead of adding fake whitespace 2017-07-09 11:57:20 -04:00
testdata/example add Gemfile to example site for side-by-side comparison 2017-07-26 10:19:01 -04:00
utils Refine file exclusion 2017-08-03 16:24:40 +02:00
.appveyor.yml move mingw install from init 2017-07-06 22:15:35 -04:00
.dockerignore Docker 2017-07-15 17:03:27 -04:00
.gitignore Docker 2017-07-15 17:03:27 -04:00
.goreleaser-darwin.yml update goreleaser version varname target 2017-07-19 13:33:42 -04:00
.goreleaser.yml update goreleaser version varname target 2017-07-19 13:33:42 -04:00
.travis.yml Add README to tar 2017-07-19 13:25:46 -04:00
CONTRIBUTING.md make install_dev_tools -> setup 2017-07-12 20:01:17 -04:00
Dockerfile Docker 2017-07-15 17:03:27 -04:00
LICENSE Create LICENSE 2017-06-11 19:18:10 -04:00
main.go Move cmd back to commands 2017-07-19 16:06:43 -04:00
Makefile Add gometalinter deadline, for travis 2017-07-26 10:33:34 -04:00
README.md Replace cssmin -> minify for CSS minimization 2017-07-26 11:34:42 -04:00

Gojekyll

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.

  Gojekyll Jekyll Hugo
Stable
Fast
(~20×Jekyll)
Template language Liquid Liquid Go templates
SASS
Jekyll compatibility partial
Plugins some yes ?
Windows support
Implementation language Go Ruby Go

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

Binary Downloads

  1. Ubuntu (64-bit) and macOS binaries are available from the releases page.
  2. [Optional] Highlight. To use the {% highlight %} tag, you also need Pygments: pip install Pygments.
  3. [Optional] Themes. To use a theme, you need to create a Gemfile that lists the theme, and run (the Ruby command) bundle install. The Jekyll theme instructions provides 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, for optional installations.

First-time install:

go get github.com/osteele/gojekyll

[Later] Update to the latest version:

go get -u github.com/osteele/liquid github.com/osteele/gojekyll

[Optional] Install command-line autocompletion:

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

Status

This project is at an early stage of development.

It works on the GitHub Pages sites that I care about, and 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:

  • Plugins must be listed in the config file, not a Gemfile.
  • Liquid is run in strict mode; undefined filters are errors.
  • The wrong type in a _config.yml is an error.
  • Server live reload is always on.
  • serve --watch (the default) reloads the _config.yml and data files too.
  • serve generates pages on the fly; it doesn't write to the file system.
  • Files are cached in /tmp/gojekyll-${USER}, not ./.sass-cache
  • Jekyll provides an (undocumented) jekyll.version variable to templates. Copying this didn't seem right.

Muzukashii:

  • An extensible plugin mechanism support for plugins that aren't compiled into the executable.

Feature Checklist

  • Content
    • Front Matter
    • Posts
    • Static Files
    • Variables
    • Collections
    • Data Files
    • Assets
      • Coffeescript
      • Sass/SCSS
  • Customization
    • Templates
      • Jekyll filters
        • group_by_exp and scssify
        • everything else
      • Jekyll tags
    • Includes
    • Permalinks
    • Pagination
    • Plugins partial; see here
    • Themes
    • Layouts
  • Server
    • Directory watch
  • Commands
    • build
      • --source, --destination, --drafts, --future, --unpublished
      • --incremental, --watch, --force_polling
      • --baseurl, --config, --lsi, JEKYLL_ENV=production
      • --limit-posts
    • clean
    • help
    • serve
      • --open-uri, --host, --port
      • --incremental, watch, --force_polling
      • --baseurl, --config
      • --detach, --ssl-* not planned
    • doctor, import, new, new-theme not planned
  • Windows

Contributing

Bug reports, test cases, and code contributions are more than welcome.

Attribution

Gojekyll uses these libraries:

Package Author(s) Usage License
github.com/jaschaephraim/lrserver Jascha Ephraim Live Reload MIT License
github.com/kyokomi/emoji kyokomi jemoji plugin emulation MIT License
github.com/osteele/liquid yours truly Liquid processor MIT License
github.com/pkg/browser pkg serve --open-url option BSD 2-clause "Simplified" License
github.com/radovskyb/watcher Benjamin Radovsky Polling file watch (--force_polling) BSD 3-clause "New" or "Revised" License
github.com/russross/blackfriday Russ Ross Markdown processing Simplified BSD License
github.com/sass/libsass Listed here C port of the Ruby SASS compiler MIT License
github.com/tdewolff/minify Taco de Wolff CSS minimization MIT License
github.com/wellington/go-libsass Drew Wells Go bindings for libsass ???
gopkg.in/alecthomas/kingpin.v2 Alec Thomas command-line arguments MIT License
gopkg.in/yaml.v2 Canonical YAML support Apache 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.

Source Use Description
Jekyll template documentation test cases filter examples
jekyll help command gojekyll help text help text
jekyll-feed plugin plugin emulation feed.xml template
jekyll-redirect-from plugin plugin emulation redirect page template
jekyll-sitemap plugin plugin emulation sitemap template
jekyll-seo-tag plugin plugin emulation feed 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.

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

jkl is another Go clone of Jekyll. If I'd found it sooner I might have started this project by forking that one. It's got a better name.

Liquid is a pure Go implementation of Liquid templates, that I finally caved and wrote in order to use in this project.

Jekyll, of course.

License

MIT