cmd/gojekyll | ||
collections | ||
config | ||
constants | ||
filters | ||
helpers | ||
pages | ||
pipelines | ||
plugins | ||
scripts | ||
server | ||
sites | ||
tags | ||
templates | ||
testdata | ||
.gitignore | ||
.gometalinter.json | ||
.travis.yml | ||
LICENSE | ||
Makefile | ||
README.md |
Gojekyll
Gojekyll is an incomplete implementation of the Jekyll static site generator, in the Go programming language.
Major omissions:
- Themes, page tags, excerpts, plugins (except for
avatar
), pagination - Site variables:
pages
,static_files
,html_pages
,html_files
,documents
, andtags
- Jekyll's
group_by_exp
,pop
,shift
,cgi_escape
,uri_escape
,scssify
, andsmartify
filters - Jekyll's
include_relative
andgist
- The Go Liquid template engine is also missing some tags (notably around iteration and conditionals) and filters; see its README for status.
- Data files must be YAML; CSV and JSON are not supported.
{% highlight %}
uses Pygments. There's no way to tell it to use Rouge.<div markdown=1>
doesn't work. I think this is a limitation of the blackfriday Markdown processor.- The Liquid engine is probably much stricter than the original. It is also likely to have bugs.
- Parse errors aren't reported very nicely.
Other differences from Jekyll:
serve
generates pages on the fly; it doesn't write to the file system.- Files are cached to
/tmp/gojekyll-${USER}
, not./.sass-cache
- Server live reload is always on.
- The server reloads the
_config.yml
(and the rest of the site) when it changes. build
with no-d
option resolves the destination relative to the source directory, not the current directory.
Installation
- Install go. On macOS running Homebrew,
brew install go
is easier. go get -u osteele/gojekyll/cmd/gojekyll
- You need to install Pygments
pip install Pygments
to use the{% highlight %}
tag.
Usage
gojekyll -s path/to/site build # builds into ./_site
gojekyll -s path/to/site serve # serves from memory, w/ live reload
gojekyll help
gojekyll help build
Benchmark
[go]jekyll -s jekyll/docs build
Executable | Options | Time |
---|---|---|
gojekyll | multi-threaded; cache doesn't matter | 0.34s |
gojekyll | warm cache, single-threaded | 0.61s |
gojekyll | cold cache, single-threaded | 6.85s |
jekyll | 18.53s |
Status
- Content
- Front Matter
- Posts
- Categories
- Tags
- Drafts
- Future
- Related
- Static Files
- Variables
- Collections
- Data Files
- CSV
- JSON
- YAML
- Assets
- Coffeescript
- Sass/SCSS
- Customization
- Templates
- Jekyll filters
group_by_exp
pop
shift
cgi_escape
uri_escape
scssify
smartify
- everything else
- Jekyll tags
include
include_relative
link
post_url
gist
highlight
- Jekyll filters
- Includes
include
parametersinclude
variables (e.g.{% include {{ expr }} %}
)
- Permalinks
- Pagination
- Plugins
jekyll-avatar
jekyll-coffeescript
jekyll-live-reload
(always on)jekyll-paginate
- Themes
- Layouts
- Templates
- Server
- Directory watch
- Commands
build
--source
,--destination
,--drafts
,--future
,--unpublished
--config
,--baseurl
,--lsi
,--watch
, etc.- won't implement:
--force-polling
,--limit-posts
,--incremental
,JEKYLL_ENV=production
clean
doctor
help
import
new
new-theme
serve
--open-uri
--detach
,--host
,--port
,--baseurl
- won't implement:
--incremental
,--ssl-*
- Windows
Contributing
Install package dependencies and development tools:
make setup
Testing
make test
make lint
gojekyll -s path/to/site render index.md # render a file to stdout
gojekyll -s path/to/site render / # render a URL to stdout
gojekyll -s path/to/site variables / # print a file or URL's variables
./scripts/coverage && go tool cover -html=coverage.out
./scripts/gojekyll
is an alternative to the gojekyll
executable, that uses go run
each time it's invoked.
Profiling
gojekyll -s path/to/site profile
go tool pprof gojekyll gojekyll.prof
Credits
Gojekyll uses these libraries:
Package | Author(s) | Description |
---|---|---|
github.com/jaschaephraim/lrserver | Jascha Ephraim | Live Reload server |
github.com/osteele/liquid | yours truly | Liquid processor |
github.com/pkg/browser | pkg | The serve -o option to open the site in the browser |
github.com/russross/blackfriday | Russ Ross | Markdown processor |
github.com/sass/libsass | Listed here | C port of the Ruby SASS compiler |
github.com/wellington/go-libsass | Drew Wells | Go bindings for libsass |
gopkg.in/alecthomas/kingpin.v2 | Alec Thomas | command line and flag parser |
gopkg.in/yaml.v2 | Canonical | YAML support |
In addition to being totally and obviously inspired by the Jekyll, Jekyll's solid documentation was indispensible. Many of the filter test cases are taken directly from the Jekyll documentation, and the Jekyll docs were always open in at least one tab.
The help text was taken from the output of jekyll help
.
The gopher image in the test directory is from Wikimedia Commons. It is used under the Creative Commons Attribution-Share Alike 3.0 Unported license.
Related
Hugo isn't Jekyll-compatible (-), but actually works (+++).
Jekyll, of course.
License
MIT
Alternate Naming Possibilities
- "Gekyll". (Hard or soft "g"? See gif.)
- "Gekko"