cmd/gojekyll | ||
collections | ||
config | ||
constants | ||
helpers | ||
liquid | ||
pages | ||
pipelines | ||
scripts | ||
server | ||
sites | ||
templates | ||
testdata | ||
.gitignore | ||
.gometalinter.json | ||
.travis.yml | ||
LICENSE | ||
Makefile | ||
README.md |
Go Jekyll
When I grow up, I want to be a Go implementation of Jekyll.
Status
See the significant missing functionality below. This tool currently works on some simple sites that don't use drafts, templates, future posts, or various other features listed below.
We are currently ~5x faster than Jekyll. Some obvious improvements would include caching SASS, caching templates, and using goroutines to render pages.
- Content
- Front Matter
- Posts
- Categories
- Tags
- Drafts
- Future
- Related
- Static Files
- Variables
- Collections
- Data Files
- CSV
- JSON
- YAML
- Assets
- Coffeescript
- Sass/SCSS
- Sass caching
- Customization
- Templates
- Jekyll filters (partial)
- Jekyll tags (partial)
markdown=1
- Includes
include_relative
- parameters
- variables
{% include {{ expr }} %}
- Permalinks
- Pagination
- Themes
- Layouts
- Templates
- Server
- Directory watch
- Live reload
- Windows -- not tested
Intentional differences from Jekyll:
serve
doesn't write to the file system- No
.sass-cache
. (When caching is added, it will go to a temporary directory.) - Server live reload is always on.
Install
go get -u osteele/gojekyll/cmd/gojekyll
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
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 | Description |
---|---|---|
github.com/jaschaephraim/lrserver | Jascha Ephraim | Live Reload server |
github.com/osteele/liquid | Oliver Steele | 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 to 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 Ruby implementation, Jekyll's solid documentation was indispensible. The Jekyll docs were always open in at least one tab.
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"