Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


:globe_with_meridians: Jekyll is a blog-aware static site generator in Ruby

Subscribe to updates I use jekyll

Statistics on jekyll

Number of watchers on Github 40871
Number of open issues 157
Average time to close an issue about 18 hours
Main language Ruby
Average time to merge a PR 3 days
Open pull requests 307+
Closed pull requests 161+
Last commit 3 months ago
Repo Created about 12 years ago
Repo Last Updated 3 months ago
Size 17.6 MB
Homepage https://jekyllrb.com
Organization / Authorjekyll
Latest Releasev4.1.1
Page Updated
Do you use jekyll? Leave a review!
View open issues (157)
View jekyll activity
View TODOs for jekyll (6)
View on github
Book a Mock Interview With Me (Silicon Valley Engineering Leader, 100s of interviews conducted)
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating jekyll for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


Gem Version Linux Build Status Windows Build status Maintainability Test Coverage Security Backers on Open Collective Sponsors on Open Collective

Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind GitHub Pages, which you can use to host sites right from your GitHub repositories.


Jekyll does what you tell it to do no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.

See: https://jekyllrb.com/philosophy

Getting Started

Diving In

Need help?

If you don't find the answer to your problem in our docs, or in the troubleshooting section, ask the community for help.

Code of Conduct

In order to have a more open and welcoming community, Jekyll adheres to a code of conduct adapted from the Ruby on Rails code of conduct.

Please adhere to this code of conduct in any interactions you have in the Jekyll community. It is strictly enforced on all official Jekyll repositories, websites, and resources. If you encounter someone violating these terms, please let one of our core team members know and we will address it as soon as possible.



Support this project by becoming a sponsor. Your logo will show up in this README with a link to your website. Become a sponsor!


This project exists thanks to all the people who contribute.


Thank you to all our backers! Become a backer


See the LICENSE file.

jekyll open issues Ask a question     (View All Issues)
  • almost 4 years Update Code Climate Reporter
  • almost 4 years External files include.
  • almost 4 years relative_url percent-encodes its input; documentation doesn't mention that
  • almost 4 years markdownify, sassify, scssify filters misnamed
  • almost 4 years Upgrade to Rouge 2.0
  • almost 4 years Raw tags are not respected when encoding urls
  • almost 4 years Missing collation with sort
  • almost 4 years include tag does not allow to pass variable in hash[key] format
  • almost 4 years where_exp and filters
  • almost 4 years Passing `/` to the absolute URL filter results in a double trailing slash
  • almost 4 years Config folder locations: plugins_dir
  • almost 4 years Layout yaml front matter copied from a project not working
  • almost 4 years Add hooks to `doctor`
  • about 4 years [Windows 10 / Cygwin] - bundle exec jekyll serve - "LoadError: cannot load such file -- json"
  • about 4 years Incorrect documentation in `jekyll/readers/data_reader.rb`
  • about 4 years Jekyll generates broken output when a page has a yaml syntax error in header
  • about 4 years [Proposal] Date localisation filter
  • about 4 years broken codeblocks with pygments.rb and jekyll
  • about 4 years Front matter in Markdown files not being processed on Windows/Visual Studio
  • about 4 years Extra log entries in Jekyll 3.3.0
  • about 4 years Delete merged / stale branches
  • about 4 years `rake spec` (`script/test`) outputs bundle commands
  • about 4 years [Proposal] Have developmental branch(es)
  • about 4 years jekyll serve --lsi throws sqrt error
  • about 4 years The Future of Theme Gems [Discussion]
  • about 4 years Add group_by_exp filter
  • about 4 years Faulty handling of `timezone` key on Windows
  • about 4 years [Feature Request] semantic liquid filters for assets
  • about 4 years [Site] menu overflows on mobile res
  • about 4 years [NEW FEATURE] site should contain a map of layouts
jekyll open pull requests (View All Pulls)
  • Adding a debug log statment for skipped future documents.
  • Add size property to group_by result
  • Add array support to `where` filter
  • Prevent permalink_ext return extension with colon
  • Allow collections to have documents that have no file extension
  • Allow collections to have documents that have no file extension
  • `jekyll new` should create a Gemfile which is educational
  • Add a template for pull requests
  • Fix warnings
  • Add show_dir_listing option for serve command and fix index file names
  • add failing test for scope values in subdirs
  • Fix #4494: Allow users to set nil for highlighter/kramdown.syntax_highlighter.
  • EntryFilter#special?: ignore filenames which begin with '~'
  • Add a where_exp filter for filtering by expression
  • Rouge does not close div after highlighting ends
  • typo in post_url.rb
  • Backport Github Flavored Markdown.
  • Add space and Rus-lang chars support in filenames
  • Pages as a collection
  • Doctor should check for Liquid errors
  • Update Templates Docs to include Array Filters
  • Move to Bundler + a Gemfile (WIP)
  • symlinks support
  • Upgrade to Liquid v4
  • WIP: Incremental regen improvements
  • Fix relative path handling in Jekyll 2.5.x
  • Add casesensitive_categories option
  • keep_files should be read as paths under destination rather than keywords for cleaner to work.
  • Configurable way do define default sort order for collections
  • Allow static files to be symlinked in unsafe mode or non-prod environments
  • Add failing test that demonstrates data files cannot be included in the build output
  • Adds collection_tag
  • Allow multiple directories
  • Gem-based themes
  • Add lots of timing metrics around the render process.
  • Explain how site variables work (Fixes #4556)
  • 3.2.x/master: Fix defaults for Documents (posts/collection docs)
  • Fixed typo
  • Add jekyll-autoprefixer plugin
  • Comment out the example domain
  • Updates example domain in config template
  • Globalize Jekyll's Filters.
  • Configuration: allow users to specify a collections.posts.permalink directly
  • Add roadmap for Jekyll
  • more form baas
  • Add hook to modify rendered content without layout
  • Multi-format layouts [WIP]
  • Allow symlinks iff they point to stuff inside site.source
  • Add "urlsafe" mode to Utils.slugify
  • WIP: Move to raising custom errors
  • Add ability to jsonify Drop
  • Update YAML for default collection attributes
  • jekyll/commands passing rubocop
  • Add pubstorm deployment instructions to docs
  • Fix #3926 post_url helper with sub-directories
  • Failing test: where_exp filter should filter posts
  • WIP: Add 'jekyll new-theme' command
  • Pages as a collection: Again!
  • Add jekyll-tags-list-plugin
  • rubocop: jekyll/lib/filters.rb
  • Suggested a more elegant way to handle the lang attribute
  • rubocop: document.rb, convertible.rb and renderer.rb
  • Cleaning up site template & theme updates.
  • Add normalize_whitepace filter
  • Add timings for each scenario in cucumber & print worst offenders
  • It's called macOS now
  • rubocop: lib/jekyll/collection.rb
  • Remove JRuby and ruby-head from Travis matrix
  • Internal documentation for working on Jekyll
  • Updates html-proofer code
  • Jekyll Community
  • check if relative URL contains a colon
  • Stringify configuration overrides before first use
  • Added JekyllConf page
  • Enable strict (or lax) liquid parsing.
  • rubocop: lib/jekyll/renderer.rb complexity fixes
  • Use hard links for static files.
  • rubocop: lib/jekyll/document.rb complexity fixes
  • Fix more theme things
  • [site] Document `link` Liquid tag
  • Update appveyor.yml and fix optional deps for Ruby x64
  • Rename .markdown to .md
  • Improve tests for Jekyll::PluginManager
  • Run hooks in priority order.
  • Add LiveReload functionality to Jekyll.
  • add `plugins` config key as replacement for `gems`
  • Documentation: improve highlight in `Creating a theme`
  • Fix a link in deployment-methods.md
  • Update jekyllrb style
  • Edit files to pass Appveyor --Experimental--
  • Update AppVeyor config.
  • Add bundle install to jekyll new command
  • Enhance new command to include argument passed, as blog-title
  • Fix #5233: Increase our ability to detect Windows.
  • bump rouge to 2.0.x
  • Fix grid-width for large screens
  • Add link to Staticman
  • Extending the 'new' command
  • Add support for indented link references on excerpt
  • WIP: Pages as Documents
  • Exclude node_modules by default
  • WIP: Allow front matter to be optional for pages
  • WIP: Convert data dir to a collection
  • Adds ability to link to all files
  • Updates for Bundler
  • Add debug output to theme rendering
  • Site#configure_theme: do not set theme unless it's a string
  • Add Gemfile template
  • Proxy a number of Convertible methods to Renderer
  • add debug message to print default config file path if no config file is found
  • Get static filename
  • Fix issue where Windows drive name is stripped from Jekyll.sanitized_path incorrectly
  • Updating install instruction link for Jekyll 3 on Windows
  • Addition of a sample "typical post"
  • Fix typo in theme_template README
  • Update normalize.css to v5.0.0
  • Add ThemeDataReader for data files in theme-gems
  • Fix broken forum link
  • Fix #5462: Only shutdown watch in Bash On Windows.
  • Move documentation to docs folder
  • replace development_dependency with runtime_dependency
  • add `asset_url` filter
  • Replace backticks within HTML blocks with HTML tags
  • make site main-nav as a drawer on small-screens
  • Add cucumber feature to test for bonafide theme gems
  • Themes: Gem `files` RegExp as constant
  • Make Jekyll hyper-parallel, how about we make Jekyll fast, yes?
  • Accept a base theme for `new-theme` to import files from
  • add test to use variable in where_exp condition
  • [docs] Info about the help command usage
  • Add jekyll-pinboard to list of third-party plugins
  • WIP: Adds group_by_exp filter
  • Provide an "inline" mode to markdownify filter
  • Fix formatting in 2-to-3.md
  • Add two plugins to the plugins page
  • create configuration from options only once in the boot process
  • Be much more specific about ignoring vendored directories.
  • Add a set of filters to generate HTML tags for assets
  • Use site.baseurl before link and post_url tags
  • Collections.feature: conditional steps to have it pass on Windows
  • Docs: move permalinks from documents into config
  • test double slash when input = '/'
  • Use only the used Font Awesome icons.
  • Fix tests to get them to pass on Windows
  • tested on two windows comps, both needed this extra step
  • no more invalid US-ASCII on lines 30 and 97
  • github-pages gem should replace all Gemfile stuff
  • Add more details for using includes
  • Update upgrading.md
  • Add an excluded 'README.txt' to `/site_template`
  • add 'jekyll extract' command to library
  • Bump rubocop
  • Add URL checks to Doctor
  • Update installation.md
  • Add missing merge labels for jekyllbot
  • Retire Jekyll 2 docs
  • Fix broken links in documentation
  • BUGFIX: fix pagination link for page 1
  • Add support for detached front matter (optional)
  • Fix #5730: add gcc and make to the list of requirements
  • Remove broken test
  • Date filters should never raise an exception
  • Documentation on how to build navigation
  • Improve template docs
  • Improve collections docs
  • Improve theme docs
  • Test against Ruby 2.4.0
  • Index Posts by any attribute
  • Added custom output extension for the Markdown format.
  • add 'bundler' as a dependency
  • Interactive Directory Structure in documentation
  • Write Jekyll::Utils::Exec.run for running shell commands.
  • Accessing subvalue from filters
  • add formester to the list of saas form backend
  • patch URLFilters to prevent `//`
  • add plugins for multiple page pagination
  • Ignore final newline in folded YAML string
  • allow check if site has a specific plugin enabled
  • Use plugins key instead of gems
  • Added plugin jekyll-analytics
  • Restore where-filter null handling to match earlier versions (<3.2)
  • Add a blacklist to restrict gems when not in safe mode
  • (Another) tutorial to convert existing site to Jekyll
  • ISO week date drops
  • A command to generate a manifest file for the theme-gem currently in use
  • Disable default layouts for documents with a `layout: none` declaration
  • [WIP] Add shim that works for both Rouge 1 and Rouge 2
  • Address reading non-binary static files in themes
  • Sort collection items by an attribute.
  • Add Utils::Internet.connected? to determine whether host machine has internet connection.
  • Enable support for tags and categories across all documents
  • Support wildcards in scope => path
  • Add option to fail a build with front matter syntax errors
  • Rescue from Psych::SyntaxError instead of SyntaxError after parsing YAML
  • Remove `ruby RUBY_VERSION` from generated Gemfile
  • add `jekyll-admin` by default
  • Bump Rubocop to 0.49.0
  • Read explicitly included dot-files in collections.
  • Update plugins example with new name
  • Define path with __dir__
  • Add test for uri_escape on reserved characters
  • Document difference between cgi_escape and uri_escape #5970
  • Add strip_index filter
  • Fix layout front-matter variables rendering
  • In `jekyll new`, make copied site template user-writable
  • Debug writing files during the build process
  • WIP: Refactor the profiler into a unified class & measure more things.
  • WIP: Read collections like how posts are read
  • Allow Jekyll Doctor to detect stray posts dir
  • Test against Ruby 2.5 on AppVeyor
  • Allow Doctor to check for outdated dependencies [WIP]
  • Add a script to profile methods in Jekyll::Site & Jekyll::Renderer
  • Use the first entry in a list of output extensions instead of conditionally selecting the last / second-last entry
  • Upgrade Rubocop to 0.52.1
  • Output Liquid and Markdown Profiles in same table
  • Allow profiling converters
  • Change regex to sanitize and normalize filenames passed to LiquidRenderer
  • Update item_property to return numbers as numbers instead of strings
  • Excerpt relative-path should match its path
  • move duplicate code to a single private method
  • Drop support for Ruby 2.1 and 2.2
  • Include document path in kramdown warnings
  • Suggest re-running command with --trace on fail
  • Request for Jekyll version on GitHub issue tickets
  • Remove unused error class
  • Ignore future dated documents in hidden collection
  • Docs: Fix Ruby 2.4 path for Windows
  • Bugfixed `jekyll build` and moved environment check from `jekyll serve` to `jekyll build`
  • Add sort_by_post_count Feature
  • Date filters should pass through empty strings with whitespace
  • Loggers should accept both numbers and symbols.
  • Liquefied link tag
  • Enhance 'link' tag to include variables support
  • Gemfile and Gemfile.lock needed to run jekyll serve
  • Accept unicode characters in data subfolder filenames
  • Cache and retrieve escaped path components
  • Profile various stages of a site's build process
  • Create a single instance of PostReader per site
  • Return early unless there is a valid front matter default set
  • Avoid creating unnecessary Renderer instances
  • WIP: Add basic benchmarking to CI
  • Minimize calls to `Addressable::URI.parse`
  • Cache the value of unescaped document url string
  • Cache the list of documents to be written
  • Access document permalink attribute efficiently
  • Parse document date just once
  • Replace simple regex with equivalent Ruby methods
  • Bypass rendering via Liquid unless required
  • WIP: Incorporate relative_url filter in link tag
  • Allow passing :strict_variables and :strict_filters options to Liquid's renderer
  • Append appropriate closing tag to Liquid block in an excerpt
  • add missing step for gem-based theme conversion
  • Remind user to resolve conflict in `jekyll new` with `--force`
  • Add generator-jekyll-plugin instructions
  • Write future-dated docs only if `site.future` is true
  • Do not hardcode locale unless certainly necessary
  • Only read layouts from source_dir or theme_dir
  • add Arch Linux instalation troubleshoot
  • Don't prompt for sudo when installing with Ubuntu WSL
  • Allow date filters to output ordinal days
  • Create Pathutil instances only as required
  • Remove unnecessary Jekyll::Page constant
  • Useless privates removed
  • Compute document's relative_path faster
  • Return empty content without attempting conversion
  • Align Schwartzian-transform benchmark w/ library
  • Optimize computing filename in LiquidRenderer
  • Add `jekyll-random` plugin to docs
  • Print special relative path for layouts from theme while debugging
  • Add Bundler Installation Instructions
  • WIP: Disable Liquid via front matter
  • Refactor private method `HighlightBlock#parse_options`
  • WIP: Refactor `highlight` tag to behave like the `raw` tag
  • `include_relative` tag should find related documents in collections gathered within custom `collections_dir`
  • Memoize document output extension
  • Build docs on CI after successful tests
  • Memoize `Site#site_data`
  • Rewrite relative symlinks to the correct path
  • Enable Rubocop accessor grouping, fix existing offenses
  • Test that Liquid expressions are not deeply evaled
  • Build docs site with GitHub Actions
  • Optimize parsing of parameters in include tag
  • Implement custom delegators for drop methods
  • Add additional package requirements for Ubuntu in WSL
  • Employ `find` filters in documentation site
  • Add console command to the Jekyll CLI
  • Remove default_proc from pages and documents
  • Added zlib1g-dev and sudo
  • Add details in warning message to reveal --future switch
  • Add Event Machine into Gemfile
  • docs: convert note boxes and other HTML to Kramdown
  • Remove leading slashes from relative paths
  • Debug reading Page and Layout objects
  • Update ubuntu.md
  • reverse collection sort order when `collections.<collection>.sort_by` value has `_rev` suffix
  • Trials with Nokogiri 1.11.x
  • Leave a footprint for every dev-server instance
  • Docs: Added a new theme source.
  • say where to find jekyll plugins
  • Show nice error message when serve fails
  • New plugin added to 'your first plugin' page
  • Improvements to CSS
  • Cache Liquid templates via Jekyll's Cache API
  • `jekyll-commonmark` as default Markdown converter
  • Implement item versions of certain Array filters
  • Improve API surrounding Jekyll::Cache
  • add support for journaling
jekyll questions on Stackoverflow (View All Questions)
  • Start Jekyll on boot or jekyll cronjob
  • Jekyll autoloading don't work
  • GitHub Pages and Jekyll content duplication and SEO issues
  • Getting Pygments dependency error when trying to compile Jekyll site
  • Jekyll Collections - Skip index page
  • Jekyll site attempting to download 'Posts' page instead of rendering it when link is clicked (deployed at Github)
  • Jekyll use config.yml values in the HTML
  • How do I use rbenv with Jekyll?
  • Image not appearing on Jekyll site
  • Prevent Jekyll from creating a page link from a static file
  • Workflow to post on Jekyll via Windows
  • Integrating React.js into Jekyll
  • Jekyll extension-less permalinks with markdown
  • How to speed up Jekyll/Octopress generation?
  • How can I install Jekyll on OSX 10.11?
  • Jekyll, jquery window.open, then insert into div
  • Can Jekyll omit index.html from folder URLs?
  • How get ints in Jekyll?
  • Error installing Jekyll, requires Ruby >= 2.0.0
  • Can I generate navigation from folder structure with Jekyll?
  • Issue with If Statement in Jekyll
  • Can not push any commits to Heroku for Jekyll site (App crashed H10 error)
  • main.scss file not reflecting the changes in jekyll using gulp
  • Jekyll (Liquid): Setting post state in included templates
  • gulp file opening jekyll but not the way it should
  • Sorting posts by category using Jekyll works locally but not on Github pages?
  • Insert HTML to Jekyll post
  • Integrating GCS on a staging Jekyll website
  • Jekyll for loop over all images in a folder?
  • Jekyll - declare image path in front matter as variable using {{ site.url }}
jekyll list of languages used
jekyll latest release notes
v4.1.1 v4.1.1
  • Fix grammar in documentation section (#8265)

Development Fixes

  • Bump RuboCop to v0.85.x (#8223)
  • Expect drive letter only on vanilla windows (#8227)

Bug Fixes

  • Disable page excerpts by default (#8222)
  • Revert introduction of PageDrop (#8221)
  • Don't generate excerpts for non-html pages (#8234)
  • Make page excerpts consistent with doc excerpts (#8236)


  • Replace deprecated 'show' command with 'info' (#8235)
  • Change name to Vercel (#8247)
  • Add language and examples to describe how to use the configuration op (#8249)
  • Fix missing yaml front matter colon and adjust/add clarifying language. (#8250)
  • correct typo (#8261)
  • Allow hyperlinks to specific filter documentation (#8231)
  • Update link to Netlify step-by-step guide (#8264)

Site Enhancements

  • Including correct Sketch website (#8241)
  • Release post for v4.1.1 (#8243)
v4.1.0 v4.1.0

Minor Enhancements

  • serve: add support for ECC certificates (#7768)
  • Update item_property to recognize integers (#7878)
  • Include _config.yml in a new theme's gemspec (#7865)
  • Add an option to easily disable disk-cache (#7928)
  • Optimize markdown parsing with Kramdown by reusing the options and parser objects (#8013)
  • Add PageDrop to provide Liquid templates with data (#7992)
  • Optimize Kramdown::JekyllDocument#to_html calls (#8041)
  • Reduce Jekyll::Renderer instances during a build (#7570)
  • Configure default language for syntax-highlighting (#8035)
  • Remove dev dependencies from new theme-gem gemspec (#8042)
  • Allow disabling import of theme configuration (#8131)
  • Allow excerpts to be generated for Page objects (#7642)
  • Profile various stages of a site's build process (#6760)
  • Add find filters to optimize where-first chains (#8171)
  • Make number_of_words respect CJK characters (#7813)
  • Initialize static files' data hash only if needed (#8188)

Bug Fixes

  • Memoize absolute_url and relative_url filters (#7793)
  • Fix documentation comment for Jekyll::Converters::Identity (#7883)
  • Optimize Jekyll::Filters#item_property (#7696)
  • Allow multiple binary operators in where_exp filter (#8047)
  • Fix documents custom-ordering logic (#8028)
  • Use layout.path when rendering the Liquid layout (#8069)
  • Reduce array allocations from StaticFile#path (#8083)
  • Simplify Jekyll::Renderer#validate_layout (#8064)
  • Add static file's basename to its url_placeholder (#7908)
  • Clear cached Liquid template scope before render (#7967)
  • Add slugified_categories URL placeholder (#8094)
  • Cache URLFilter results of string inputs per site (#7990)
  • Use platforms instead of install_if (#8140)
  • Config include trailing slash (#8113)
  • Allow extensionless document in a strict site (#7950)
  • Improve path normalization in liquid_renderer (#8075)
  • Switch slugify regex to support more Unicode character groups (#8167)
  • Check if entry is a directory once per enumerator (#8177)
  • Filter out exclusively excluded entries sooner (#7482)
v4.0.1 v4.0.1

Bug Fixes

  • Prevent console warnings with Ruby 2.7 (#8124)
  • Clear cached Liquid template scope before render (#8141)
  • Add static file's basename to its url_placeholder (#8142)
  • Update item_property to recognize integers (#8160)

Development Fixes

  • Fix Kramdown converter based tests for v4.0.x (#8143)
Other projects in Ruby
Powered by Autocode - Instant Webhooks, Scripts and APIs
Autocode logo wordmark