{"id":16508577,"url":"https://github.com/osteele/gojekyll","last_synced_at":"2025-05-16T10:07:33.007Z","repository":{"id":22576197,"uuid":"94036828","full_name":"osteele/gojekyll","owner":"osteele","description":"A fast Go implementation of the Jekyll blogging engine","archived":false,"fork":false,"pushed_at":"2025-05-09T11:32:05.000Z","size":916,"stargazers_count":343,"open_issues_count":27,"forks_count":16,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-05-09T12:33:57.328Z","etag":null,"topics":["blog-engine","cli","golang","jekyll","liquid","static-site-generator"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osteele.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-11T22:59:13.000Z","updated_at":"2025-05-09T11:32:08.000Z","dependencies_parsed_at":"2023-11-06T23:41:51.672Z","dependency_job_id":"ece61943-b5ee-49e2-9abd-26a26bfe5f2e","html_url":"https://github.com/osteele/gojekyll","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fgojekyll","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fgojekyll/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fgojekyll/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fgojekyll/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osteele","download_url":"https://codeload.github.com/osteele/gojekyll/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254509476,"owners_count":22082891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog-engine","cli","golang","jekyll","liquid","static-site-generator"],"created_at":"2024-10-11T15:46:19.669Z","updated_at":"2025-05-16T10:07:27.997Z","avatar_url":"https://github.com/osteele.png","language":"Go","readme":"# Gojekyll\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-)\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n[![go badge][go-svg]][go-url]\n[![Golangci-lint badge][golangci-lint-svg]][golangci-lint-url]\n[![Coveralls badge][coveralls-svg]][coveralls-url]\n[![Go Report Card badge][go-report-card-svg]][go-report-card-url]\n[![MIT License][license-svg]][license-url]\n\nThis project was created by Oliver Steele ([@osteele](https://github.com/osteele)), and is currently maintained by Daniil Gentili ([@danog](https://github.com/danog)).  \n\nGojekyll is a partially-compatible clone of the [Jekyll](https://jekyllrb.com)\nstatic site generator, written in the [Go](https://golang.org) programming\nlanguage. It provides `build` and `serve` commands, with directory watch and\nlive reload.\n\n| \u0026nbsp;                  | Gojekyll                                  | Jekyll | Hugo                         |\n| ----------------------- | ----------------------------------------- | ------ | ---------------------------- |\n| Stable                  |                                           | ✓      | ✓                            |\n| Fast                    | ✓\u003cbr\u003e([~20×Jekyll](./docs/benchmarks.md)) |        | ✓                            |\n| Template language       | Liquid                                    | Liquid | Go, Ace and Amber templates  |\n| SASS                    | ✓                                         | ✓      | ✓                            |\n| Jekyll compatibility    | [partial](#current-limitations)           | ✓      |                              |\n| Plugins                 | [some](./docs/plugins.md)                 | yes    | shortcodes, theme components |\n| Windows support         | ✓                                         | ✓      | ✓                            |\n| Implementation language | Go                                        | Ruby   | Go                           |\n\n\u003c!-- TOC --\u003e\n\n- [Usage](#usage)\n- [Installation](#installation)\n  - [Docker](#docker)\n  - [Binary Downloads](#binary-downloads)\n  - [From Source](#from-source)\n- [[Optional] Install command-line autocompletion](#optional-install-command-line-autocompletion)\n- [Status](#status)\n  - [Current Limitations](#current-limitations)\n  - [Other Differences](#other-differences)\n  - [Feature Checklist](#feature-checklist)\n- [Troubleshooting](#troubleshooting)\n- [Contributors](#contributors)\n- [Attribution](#attribution)\n- [Related](#related)\n- [License](#license)\n\n\u003c!-- /TOC --\u003e\n\n## Usage\n\n```bash\ngojekyll build       # builds the site in the current directory into _site\ngojekyll serve       # serve the app at http://localhost:4000; reload on changes\ngojekyll help\ngojekyll help build\n```\n\n## Installation\n\n### Docker\n\nYou can use `gojekyll` with the official `danog/gojekyll` image, for example to build the site in the current directory into `_site`:\n\n```bash\ndocker run --user $UID:$GID -v $PWD:/app --pull always --rm -it danog/gojekyll build -s /app\n```\n\nAnother example, serve the website in the current directory on `http://localhost:4040`, automatically reloading on changes:\n\n```bash\ndocker run --user $UID:$GID -v $PWD:/app --pull always --network host --rm -it danog/gojekyll serve -s /app\n```\n\n### Binary Downloads\n\n1. Linux, Mac OS and Windows binaries for x86, amd64, armv6/v7, armv8, riscv64 are available from the [releases\n   page](https://github.com/osteele/gojekyll/releases).\n2. Download the latest version of [dart-sass](https://github.com/sass/dart-sass/releases) and [add it to your PATH](https://katiek2.github.io/path-doc/), or see the [Sass website](https://katiek2.github.io/path-doc/) for full installation instructions.\n3. [Optional] **Themes**. To use a theme, you need to install Ruby and\n   [bundler](http://bundler.io/). Create a `Gemfile` that lists the theme., and\n   run `bundle install`. The [Jekyll theme\n   instructions](https://jekyllrb.com/docs/themes/) provide more detail, and\n   should work for Gojekyll too.\n\n### From Source\n\nPre-requisites:\n\n1. **Install go** (1) via [Homebrew](https://brew.sh): `brew install go`; or (2)\n   [download](https://golang.org/doc/install#tarball).\n2. See items (2-3) under [Binary Downloads](#binary-downloads), above.\n\nThen run:\n\n```bash\ngo install github.com/osteele/gojekyll@latest\n```\n\n\n## [Optional] Install command-line autocompletion\n\nAdd this to your `.bashrc` or `.zshrc`:\n\n```bash\n# Bash:\neval \"$(gojekyll --completion-script-bash)\"\n# Zsh:\neval \"$(gojekyll --completion-script-zsh)\"\n```\n\n## Status\n\nThis project works on the GitHub Pages sites that I and other contributors care\nabout. It looks credible on a spot-check of other Jekyll sites.\n\n### Current Limitations\n\nMissing features:\n\n- Pagination\n- Math\n- Plugin system. ([Some individual plugins](./docs/plugins.md) are emulated.)\n- Liquid filter `sassify` is not implemented\n- Liquid is run in strict mode: undefined filters and variables are errors.\n- Missing markdown features:\n  - [attribute lists](https://kramdown.gettalong.org/syntax.html#attribute-list-definitions)\n  - [`markdown=\"span\"`, `markdown=\"block\"`](https://kramdown.gettalong.org/syntax.html#html-blocks)\n  - Markdown configuration options\n\nAlso see the [detailed status](#feature-status) below.\n\n### Other Differences\n\nThese will probably not change:\n\nBy design:\n\n- Plugins must be listed in the config file, not a Gemfile.\n- The wrong type in a `_config.yml` file – for example, a list where a string is\n  expected, or vice versa – is generally an error.\n- Server live reload is always on.\n- `serve --watch` (the default) reloads the `_config.yml` and data files too.\n- `serve` generates pages on the fly; it doesn't write to the file system.\n- Files are cached in `/tmp/gojekyll-${USER}`, not `./.sass-cache`\n\nUpstream:\n\n- Markdown:\n  - `\u003c` and `\u003e` inside markdown is interpreted as HTML. For example, `This is\n\u003cb\u003ebold\u003c/b\u003e` renders as \u003cb\u003ebold\u003c/b\u003e. This behavior matches the [Markdown\n    spec](https://daringfireball.net/projects/markdown/syntax#html), but differs\n    from Jekyll's default Kramdown processor.\n  - The autogenerated id of a header that includes HTML is computed from the\n    text of the title, ignoring its attributes. For example, the id of `## Title\n(\u003ca href=\"https://example.com/path/to/details\"\u003eref\u003c/a\u003e))` is `#title-ref`,\n    not `#title-https-example-path-to-details-ref`.\n  - Autogenerated header ids replace punctuation by the hyphens, rather than the\n    empty string. For example, the id of `## Either/or` is `#either-or` not\n    `#eitheror`; the id of `## I'm Lucky` is `#i-m-lucky` not `#im-lucky`.\n\nMuzukashii:\n\n- An extensible plugin mechanism – support for plugins that aren't compiled into\n  the executable.\n\n### Feature Checklist\n\n- [ ] Content\n  - [x] Front Matter\n  - [x] Posts\n  - [x] Static Files\n  - [x] Variables\n  - [x] Collections\n  - [x] Data Files\n  - [ ] Assets\n    - [ ] Coffeescript\n    - [x] Sass/SCSS\n- [ ] Customization\n  - [x] Templates\n    - [ ] Jekyll filters\n      - [ ] `scssify`\n      - [x] everything else\n    - [x] Jekyll tags\n  - [x] Includes\n  - [x] Permalinks\n  - [ ] Pagination\n  - [ ] Plugins – partial; see [here](./docs/plugins.md)\n  - [x] Themes\n  - [x] Layouts\n- [x] Server\n  - [x] Directory watch\n- [ ] Commands\n  - [x] `build`\n    - [x] `--source`, `--destination`, `--drafts`, `--future`, `--unpublished`\n    - [x] `--incremental`, `--watch`, `--force_polling`, `JEKYLL_ENV=production`\n    - [ ] `--baseurl`, `--config`, `--lsi`\n    - [ ] `--limit-posts`\n  - [x] `clean`\n  - [x] `help`\n  - [x] `serve`\n    - [x] `--open-uri`, `--host`, `--port`\n    - [x] `--incremental`, `–watch`, `--force_polling`\n    - [ ] `--baseurl`, `--config`\n    - [ ] `--detach`, `--ssl`-\\* – not planned\n  - [ ] `doctor`, `import`, `new`, `new-theme` – not planned\n- [x] Windows\n\n## Troubleshooting\n\nIf the error is \"403 API rate limit exceeded\", you are probably building a\nrepository that uses the `jekyll-github-metadata` gem. Try setting the\n`JEKYLL_GITHUB_TOKEN`, `JEKYLL_GITHUB_TOKEN`, or `OCTOKIT_ACCESS_TOKEN`\nenvironment variable to the value of a [GitHub personal access\ntoken][personal-access-token] and trying again.\n\n[personal-access-token]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token\n\n## Contributors\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://code.osteele.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/674?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eOliver Steele\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/osteele/gojekyll/commits?author=osteele\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#design-osteele\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"https://github.com/osteele/gojekyll/commits?author=osteele\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-osteele\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#infra-osteele\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#maintenance-osteele\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#projectManagement-osteele\" title=\"Project Management\"\u003e📆\u003c/a\u003e \u003ca href=\"https://github.com/osteele/gojekyll/pulls?q=is%3Apr+reviewed-by%3Aosteele\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"https://github.com/osteele/gojekyll/commits?author=osteele\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://bep.is/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/394382?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBjørn Erik Pedersen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/osteele/gojekyll/commits?author=bep\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://tqdev.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1288217?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMaurits van der Schee\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/osteele/gojekyll/commits?author=mevdschee\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://daniil.it/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7339644?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniil Gentili\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/osteele/gojekyll/commits?author=danog\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://cameronelliott.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/868689?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCameron Elliott\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-cameronelliott\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the\n[all-contributors](https://github.com/all-contributors/all-contributors)\nspecification. [Contributions of any kind welcome](./CONTRIBUTING.md)!\n\n## Attribution\n\nGojekyll uses these libraries:\n\n| Package                                                                        | Author(s)                                        | Usage                                                      | License                                 |\n| ------------------------------------------------------------------------------ | ------------------------------------------------ | ---------------------------------------------------------- | --------------------------------------- |\n| [github.com/jaschaephraim/lrserver](https://github.com/jaschaephraim/lrserver) | Jascha Ephraim                                   | Live Reload                                                | MIT License                             |\n| [github.com/kyokomi/emoji](https://github.com/kyokomi/emoji)                   | kyokomi                                          | `jemoji` plugin emulation                                  | MIT License                             |\n| [github.com/osteele/liquid](https://github.com/osteele/liquid)                 | yours truly                                      | Liquid processor                                           | MIT License                             |\n| [github.com/pkg/browser](https://github.com/pkg/browser)                       | [pkg](https://github.com/pkg)                    | `serve --open-url` option                                  | BSD 2-clause \"Simplified\" License       |\n| [github.com/radovskyb/watcher](https://github.com/radovskyb/watcher)           | Benjamin Radovsky                                | Polling file watch (`--force_polling`)                     | BSD 3-clause \"New\" or \"Revised\" License |\n| [github.com/danog/blackfriday](https://github.com/danog/blackfriday)           | Russ Ross, Daniil Gentili                        | Markdown processing                                        | Simplified BSD License                  |\n| [github.com/sass/dart-sass](https://github.com/sass/dart-sass)                 | Listed [here](https://github.com/sass/dart-sass) | The reference implementation of Sass, written in Dart.     | MIT License                             |\n| [github.com/tdewolff/minify](https://github.com/tdewolff/minify)               | Taco de Wolff                                    | CSS minimization                                           | MIT License                             |\n| [github.com/bep/godartsass](https://github.com/bep/godartsass)                 | Drew Wells                                       | Go API backed by the native Dart Sass Embedded executable. | MIT License                             |\n| [github.com/alecthomas/kingpin/v2](https://github.com/alecthomas/kingpin)      | Alec Thomas                                      | command-line arguments                                     | MIT License                             |\n| [github.com/alecthomas/chroma](https://github.com/alecthomas/chroma)           | Alec Thomas                                      | Syntax highlighter                                         | MIT License                             |\n| [gopkg.in/yaml.v2](https://github.com/go-yaml/yaml)                            | Canonical                                        | YAML support                                               | Apache License 2.0                      |\n\nIn addition, the following pieces of text were taken from Jekyll and its plugins.\nThey are used under the terms of the MIT License.\n\n| Source                                                                          | Use                  | Description            |\n| ------------------------------------------------------------------------------- | -------------------- | ---------------------- |\n| [Jekyll template documentation](https://jekyllrb.com/docs/templates/)           | test cases           | filter examples        |\n| `jekyll help` command                                                           | `gojekyll help` text | help text              |\n| [`jekyll-feed` plugin](https://github.com/jekyll/jekyll-feed)                   | plugin emulation     | `feed.xml` template    |\n| [`jekyll-redirect-from` plugin](https://github.com/jekyll/jekyll-redirect-from) | plugin emulation     | redirect page template |\n| [`jekyll-sitemap` plugin](https://github.com/jekyll/jekyll-redirect-from)       | plugin emulation     | sitemap template       |\n| [`jekyll-seo-tag` plugin](https://github.com/jekyll/jekyll-redirect-from)       | plugin emulation     | feed template          |\n\nThe theme for in-browser error reporting was adapted from facebookincubator/create-react-app.\n\nThe gopher image in the `testdata` directory is from [Wikimedia\nCommons](https://commons.wikimedia.org/wiki/File:Gophercolor.jpg). It is used\nunder the [Creative Commons Attribution-Share Alike 3.0 Unported\nlicense](https://creativecommons.org/licenses/by-sa/3.0/deed.en).\n\nIn addition to being totally and obviously inspired by Jekyll and its plugins,\nJekyll's solid _documentation_ was indispensible --- especially since I wanted\nto implement Jekyll as documented, not port its source code. The [Jekyll\ndocs](https://jekyllrb.com/docs/home/) were always open in at least one tab\nduring development.\n\n## Related\n\n[Hugo](https://gohugo.io) is the pre-eminent Go static site generator. It isn't\nJekyll-compatible (-), but it's highly polished, performant, and productized\n(+++).\n\n[Liquid](https://github.com/osteele/liquid) is a pure Go implementation of\nLiquid templates. I created it in order to use in this project.\n\n[Jekyll](https://jekyllrb.com), of course.\n\n## License\n\nMIT\n\n[coveralls-url]: https://coveralls.io/r/osteele/gojekyll\n[coveralls-svg]: https://img.shields.io/coveralls/osteele/gojekyll.svg?branch=master\n[license-url]: https://github.com/osteele/gojekyll/blob/master/LICENSE\n[license-svg]: https://img.shields.io/badge/license-MIT-blue.svg\n[go-url]: https://github.com/osteele/gojekyll/actions?query=workflow%3A%22Build+Status%22\n[go-svg]: https://github.com/osteele/gojekyll/actions/workflows/go.yml/badge.svg\n[golangci-lint-url]: https://github.com/osteele/gojekyll/actions?query=workflow%3Agolangci-lint\n[golangci-lint-svg]: https://github.com/osteele/gojekyll/actions/workflows/golangci-lint.yml/badge.svg\n[go-report-card-url]: https://goreportcard.com/report/github.com/osteele/gojekyll\n[go-report-card-svg]: https://goreportcard.com/badge/github.com/osteele/gojekyll\n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosteele%2Fgojekyll","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosteele%2Fgojekyll","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosteele%2Fgojekyll/lists"}