• Stars
    star
    317
  • Rank 132,216 (Top 3 %)
  • Language
    Go
  • License
    MIT License
  • Created over 7 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A fast Go implementation of the Jekyll blogging engine

Gojekyll

All Contributors

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.

  Gojekyll Jekyll Hugo
Stable
Fast
(~20×Jekyll)
Template language Liquid Liquid Go, Ace and Amber templates
SASS
Jekyll compatibility partial
Plugins some yes shortcodes, theme components
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

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:

  • Plugins must be listed in the config file, not a Gemfile.
  • The wrong type in a _config.yml file – for example, a list where a string is expected, or vice versa – is generally 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

Upstream:

  • Markdown:
    • < and > inside markdown is interpreted as HTML. For example, This is <b>bold</b> renders as bold. This behavior matches the Markdown spec, but differs from Jekyll's default Kramdown processor.
    • The autogenerated id of a header that includes HTML is computed from the text of the title, ignoring its attributes. For example, the id of ## Title (<a href="https://example.com/path/to/details">ref</a>)) is #title-ref, not #title-https-example-path-to-details-ref.
    • Autogenerated header ids replace punctuation by the hyphens, rather than the empty string. For example, the id of ## Either/or is #either-or not #eitheror; the id of ## I'm Lucky is #i-m-lucky not #im-lucky.

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
        • 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, JEKYLL_ENV=production
      • --baseurl, --config, --lsi
      • --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

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):


Oliver Steele

💻 🎨 📖 🤔 🚇 🚧 📆 👀 ⚠️

Bjørn Erik Pedersen

📖

Maurits van der Schee

💻

Daniil Gentili

💻

Cameron Elliott

🤔

This project follows the all-contributors specification. Contributions of any kind 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/danog/blackfriday Russ Ross, Daniil Gentili Markdown processing Simplified BSD License
github.com/sass/dart-sass Listed here The reference implementation of Sass, written in Dart. MIT License
github.com/tdewolff/minify Taco de Wolff CSS minimization MIT License
github.com/bep/godartsass Drew Wells Go API backed by the native Dart Sass Embedded executable. MIT License
github.com/alecthomas/kingpin/v2 Alec Thomas command-line arguments MIT License
github.com/alecthomas/chroma Alec Thomas Syntax highlighter 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.

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

More Repositories

1

functional-javascript

Functional is a library for functional programming in JavaScript. It defines the standard higher-order functions such as map, reduce (aka foldl), and select (aka filter). It also defines functions such as curry, rcurry, and partial for partial function application; and compose, guard, and until for function-level programming.
JavaScript
381
star
2

liquid

A Liquid template engine in Go
Go
243
star
3

callgraph

Magic to display dynamic call graphs of Python function calls
Python
64
star
4

dart-tonic

Music theory Dart package
Dart
50
star
5

jquery-profile

jQuery plugin to profile calls to jQuery selectors.
JavaScript
39
star
6

p5-server

Command-line tool to create and run p5.js sketches. It runs a server with live reload, sketch-aware directory listings, automatic libraries for JavaScript-only sketches.
TypeScript
38
star
7

collections-js

Framework-independent JavaScript collection methods.
JavaScript
32
star
8

ipython-secrets

A Python package that simplifies the use of secrets in a Jupyter notebook
Python
21
star
9

matrix-archive

Export a Matrix room message archive
Python
20
star
10

cl-spec

BDD for Common Lisp
Common Lisp
18
star
11

jsspec

A clone of Alan Kang's JSSpec
JavaScript
17
star
12

tonic.ts

TypeScript music theory, pitch constellation diagram, and guitar chord calculator
TypeScript
15
star
13

sequentially

Sequentially is a library of temporal and frequency adverbs for JavaScript. It provides methods to queue a function for deferred or periodic execution, and to throttle the rate or number of times that a function can be called. You could think of it as a kind of memoization, where instead of caching the result it modifies when and whether a function is called.
JavaScript
14
star
14

imu-tools

Send sensor data from an ESP + BNO055 → MQTT and/or serial port
Python
12
star
15

tuesday

Ruby-compatible strftime for golang
Go
12
star
16

mop-js

JavaScript utilities for Metaobject Programming
JavaScript
12
star
17

fluently

Fluent programming (chained method calls) for JavaScript.
JavaScript
12
star
18

Arduino-BLE-IMU

Publish IMU data over BLE
C++
10
star
19

javascript_fu

A Rails plugin to add more support for javascript files.
Ruby
9
star
20

banyan

Visualize Dropbox file and folder sizes
Elm
9
star
21

pyfsa

Python FSA constructor, determinizer, and minimizer.
Python
9
star
22

vscode-p5server

VSCode extension to launch a live server that is aware of p5.js
CSS
8
star
23

fingerboard

Display the violin, viola, and cello fingerings for each scale
CoffeeScript
8
star
24

gsheet-keyring

Python Keyring backend backed by a Google Sheet
Python
7
star
25

db_content

Rails plugin to add sql dump and restore tasks
Ruby
7
star
26

bootle

“Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.” — Stan Kelly-Bootle
Python
7
star
27

cfdg-js

A JavaScript implementation of Chris Coyne's Context Free Design Grammar.
JavaScript
7
star
28

p5.libs

JavaScript
6
star
29

flinx

Configuration-free Sphinx documentation
Python
5
star
30

p5-react

A component that embeds a p5.js canvas in a React application
JavaScript
5
star
31

classroom-tools

Tools for collecting and analyzing assignments – mostly related to GitHub and Jupyter notebooks – plus a few other tasks.
Python
5
star
32

sneetches

A Chrome extension that adds star counts next to GitHub repo links
TypeScript
5
star
33

openlaszlo-json

JSON library for OpenLaszlo
JavaScript
5
star
34

multiclone

Clone forks of a GitHub repo, or copies of a GitHub Classroom assignment
Go
4
star
35

lzosutils

OpenLaszlo utilities: flash bridge, ajax, etc.
JavaScript
4
star
36

openlaszlo_plugin

The OpenLaszlo Rails plugin makes it easy to use OpenLaszlo client-side applications with Rails.
JavaScript
4
star
37

jcon

Conformance checking of JSON values against ECMAScript 4.0 types
Ruby
4
star
38

fretboard

Tools for rendering guitar fretboard and chord diagrams.
JavaScript
4
star
39

git-timelapse

Create time-lapse movies of git repo files, metrics, or other artifacts
Python
4
star
40

wideurl.com

The PHP behind 2006's wideurl.com.
PHP
3
star
41

html2dbk

HTML to Docbook converter
HTML
3
star
42

QtTileDual

Draw a graph and its duals. I wrote this to learn Qt.
C++
3
star
43

python-utils

Oliver's Python utilities
Python
3
star
44

p5pose

Starter kit for exploring WebCam-based pose recognition with PoseNet and p5.js
JavaScript
3
star
45

p5-template

https://www.notion.so/P5-js-Particle-Workshop-aba7992a689c457a8cca10e2f49e6a04
HTML
3
star
46

storyboard

An ruby-processing extension for scripting storyboarded explanatory visualizations. In progress.
Ruby
2
star
47

gem_recent-updates

A gem command plugin that displays the tops of the history files of recently updated gems.
Ruby
2
star
48

code.osteele.com

Elm
2
star
49

notebooks

Miscellaneous Jupyter notebooks.
Jupyter Notebook
2
star
50

inventiveminds.xyz

Source to Inventive Minds web site
Ruby
2
star
51

p5pose-optitrack

Use p5.js to render data from an OptiTrack CSV -> WebSocket server.
JavaScript
2
star
52

osteele.com

Source to personal web site
PHP
2
star
53

gh-forkstats

Displays GitHub forks and their stats, to identify successors to abandoned repos.
JavaScript
2
star
54

ffmachine

DEC Digital Logic Module editor and simulator
CoffeeScript
2
star
55

lztestkit

BDD for OpenLaszlo.
JavaScript
2
star
56

hackingthelibrary.org

Hacking the Library 2017 and 2018 @ Olin College
HTML
2
star
57

imu-client-examples

Example web programs that use the imu-tools npm package to connect via BTLE or MQTT to an ESP32 + BNO055
JavaScript
2
star
58

ropenlaszlo

ROpenLaszo is a Ruby interface to the OpenLaszlo compiler. It allows you to compile OpenLaszlo programs from within Ruby, in order to integrate OpenLaszlo development into Rake or Rails applications.
Ruby
2
star
59

git-keychain-secrets

Store some parts of a repo file in the macOS Keychain; keep the rest un-encrypted
Ruby
2
star
60

minimal-keys

Compute the unique minimal keys from a collection of strings or sequences.
Python
2
star
61

old-blog

Ruby
1
star
62

tidal-memories

On-the-ground piece for Dinacon
JavaScript
1
star
63

matrix-photo-gallery

A photo gallery for photos from a Matrix room.
JavaScript
1
star
64

liquid-tabulator

Olin Election Techology Co-Curricular Vote Tabulator
Python
1
star
65

html2cheatsheet

Create a Dash Cheatsheet from HTML on apple.com
Python
1
star
66

terminal-codes-to-html

Convert strings that include terminal color codes to HTML or plain text.
TypeScript
1
star
67

changelog-parser

An npm package that parses CHANGELOG files from markdown to JSON.
CSS
1
star
68

nbcollate

Collate Jupyter assignment notebooks
Jupyter Notebook
1
star
69

p5-orientation-and-motion-example

JavaScript
1
star
70

expialidocious

Timeline tag browser for delicious, in OpenLaszlo
JavaScript
1
star
71

protodoc

JavaScript documentation generator and pydoc equivalent
JavaScript
1
star
72

signage

Web site playlist manager for digital signage
JavaScript
1
star
73

openlaszlo-rails-example

Ruby
1
star
74

volatility

Web page that displays the current value of Bitcoin alongside the face of a six-sided die
Elm
1
star
75

elm-extras

Personal Elm extras. Extracted from Banyan.
Elm
1
star
76

pwm-explorer

Interactive visualization of Pulse Width Modulation (PWM)
JavaScript
1
star
77

micropython-stubs

Stubs for MicroPython APIs, to assist type-checking tools
Python
1
star