1
0
mirror of https://github.com/danog/gojekyll.git synced 2024-11-27 06:44:40 +01:00
Go to file
2017-06-20 08:59:54 -04:00
cmd/gojekyll Subcommand data -> variables 2017-06-19 14:03:51 -04:00
example New file site_config.go; honor site config layouts_dir 2017-06-16 21:53:14 -04:00
helpers Create _sass tmp subdirectories 2017-06-18 16:54:36 -04:00
liquid Move site initialization 2017-06-19 14:03:04 -04:00
scripts Rename package main -> gojekyll; move commands to subdirectory 2017-06-17 10:51:32 -04:00
.gitignore Add benchmark subcommand 2017-06-18 18:54:08 -04:00
.travis.yml Add travis file 2017-06-13 12:45:33 -04:00
build.go Refactor in prep for page.content 2017-06-20 08:59:54 -04:00
collection.go Refactor in prep for page.content 2017-06-20 08:59:54 -04:00
dynamic_page.go Refactor in prep for page.content 2017-06-20 08:59:54 -04:00
layout.go Improve, doc benchmark subcommand 2017-06-19 09:15:52 -04:00
LICENSE Create LICENSE 2017-06-11 19:18:10 -04:00
markdown.go Rename package main -> gojekyll; move commands to subdirectory 2017-06-17 10:51:32 -04:00
page.go Refactor in prep for page.content 2017-06-20 08:59:54 -04:00
permalinks_test.go Rename package main -> gojekyll; move commands to subdirectory 2017-06-17 10:51:32 -04:00
permalinks.go Refactor -> page.OutputExt() 2017-06-18 22:48:33 -04:00
README.md Read yaml site data files 2017-06-19 14:44:34 -04:00
sass.go Move site initialization 2017-06-19 14:03:04 -04:00
server.go Refactor -> page.OutputExt() 2017-06-18 22:48:33 -04:00
site_config.go Read yaml site data files 2017-06-19 14:44:34 -04:00
site_test.go Rename package main -> gojekyll; move commands to subdirectory 2017-06-17 10:51:32 -04:00
site.go Refactor in prep for page.content 2017-06-20 08:59:54 -04:00
variable_map_test.go Rename package main -> gojekyll; move commands to subdirectory 2017-06-17 10:51:32 -04:00
variable_map.go Rename package main -> gojekyll; move commands to subdirectory 2017-06-17 10:51:32 -04:00

Go Jekyll

When I grow up, I want to be a Go implementation of Jekyll.

Status

Build Status Go Report Card

This project is missing more functionality than it implements. It may accidentally work on tiny or simple sites.

When using an embedded Liquid engine (that isn't very compliant with the Liquid spec), it's about 50x faster than Jekyll. When using an un-optimized JSON-RPC connection to a JavaScript library (see below), it's about 5x faster.

  • Content
    • Front Matter
    • Posts
      • Categories
      • Tags
      • Drafts
      • Future
      • Related
    • Static Files
    • Variables
    • Collections -- rendered, but not available as variables
    • Data Files
      • CSV
      • JSON
      • YAML
    • Assets
      • Coffeescript
      • Sass/SCSS
        • Sass caching
  • Customization
    • Templates
      • link tag
      • include tag
      • Remaining Jekyll Liquid tags
      • Jekyll Liquid filters
    • Includes
    • Permalinks
    • Pagination
    • Themes
    • Layouts
  • Server
    • Directory watch
    • Live reload
  • Windows -- not tested

Install

go install osteele/gojekyll/cmd/gojekyll

Sometimes this package benefits from my unmerged improvements to the acstech/liquid library. If you want to use my fork instead:

cd $(go env GOPATH)/src/github.com/acstech/liquid
git remote add osteele https://github.com/osteele/liquid.git
git pull -f osteele

(See articles by Shlomi Noach and Francesc Campoy for how this works and why it is necessary.)

Usage

gojekyll build                # builds into ./_site
gojekyll serve                # serves from memory, w/ live reload
gojekyll   # use a local Liquid engine server
gojekyll help

Liquid Template Server

The embedded Liquid server isn't very compliant with Shopfiy Liquid syntax.

You can run a "Liquid Template Server" on the same machine, and tell gojekyll to use this instead. This is currently about 10x slower than using the embedded engine, but still 5x faster than Ruby jekyll.

  1. Download and run (liquid-template-server)[https://github.com/osteele/liquid-template-server].
  2. Invoke gojekyll with the --use-liquid-server option; e.g.:
gojekyll --use-liquid-server build
gojekyll --use-liquid-server serve

Neither the embedded Liquid server nor the Liquid Template Server implements very many Jekyll Liquid filters or tags. I'm adding to these as necessary to support my own sites.

Development

gojekyll render index.md      # render a file to stdout
gojekyll render /             # render a URL to stdout
gojekyll variables /          # print a file or URL's variables

./scripts/gojekyll is an alternative to the gojekyll executable, that uses go run each time it's invoked.

Profiling:

gojekyll --remote-liquid profile
go tool pprof gojekyll gojekyll.prof

Credits

For rendering Liquid templates: ACS Technologies's fork acstech/liquid of Karl Seguin's karlseguin/liquid Go implementation; or, Jun Yang's JavaScript implementation harttle/shopify-liquid via JSON-RPC.

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.

Hugo isn't Jekyll-compatible (-), but actually works (+++).

Jekyll, of course.

This project is a clean-room implementation of Jekyll, based solely on Jekyll's documentation and testing a few sites.

License

MIT

Alternate Naming Possibilities

  • "Gekyll". (Hard or soft "g"? See gif.)
  • "Gekko"