YeenDeer softness blog (programming and electronics)

Ellie the Yeen is a soft YeenDeer that mweeoops and does programming

View on GitHub About Bots Projects Tags

How to create a blog with Jekyll and GitHub Pages

GitHub pages is a free and quite easy way to set up a free website. It comes with many fun features like many themes you can install. What it supports is jekyll which allows you to automatically have GitHub build the HTML files for you using markdown. There are also many plugins such as Jekyll-Feed that create a RSS XML file for you

At first we are going to look at various directories and files that need or is good if exists in order for this to function properly.


This directory is used by jekyll-feed to store individual posts. the format of the files must be and you can use the Python date format code %Y-%m-%d to generate that format.

Here is an example of a post

layout: post
date: 2023-10-27 02:53:40 +0200
title: A title
Text here using markdown format

layout: post

This is to set the layout to use for the post and it must exist in the _layouts folder

date: 2023-10-27 02:53:40 +0200

This is to specify the date when the post was posted. You can use the following Python snippet to generate a date in that format. If the date is specified in here it will take priority over the date in the file name.

import datetime

tz = datetime.timezone(
    # Replace this with your timezone
now =
now = now.replace(tzinfo=tz)

title: A title This is used to set the title of the page. This will take precedence over the title in the filename but the title in the filename will be used for the URL


Contains various html files used to describe the layouts different pages can have. These support inheritance where you can specify that one layout should inherit from another and this can be done in multiple levels too. This is very good if you want to for example have a certain category of pages where all of them have certain elements


Used to store the layouts and will be accessed whenever you do something like {% include footer.html -%} inside a HTML file


This is the main config file for jekyll


theme: jekyll-theme-hacker
title: YeenDeer softness blog
description: >-
  A YeenDeer is soft

  - jekyll-relative-links
  - jekyll-feed

  enabled: true
  collections: true


This is a file used by Ruby’s package manager Gem to find packages to install. You can install the packages inside it by writing bundle install. The code in this example is what I use to run my blog locally when updating


source ""
gem "jekyll-theme-midnight"
gem "github-pages", group: :jekyll_plugins
group :jekyll_plugins do
  gem "jekyll-feed", "~> 0.12"
  gem "jekyll-relative-links"

You do not need this file per say but it is very convenient to have it there in case you want to locally run your blog when updating it


A part of git and if you run your blog locally when testing it is really recommended to have a gitignore with at least _site inside it to not have your local builds uploaded but rather let GitHub do it



A small figure resembling a creature

A small picture that will be shown in the browser tab and it is really recommended to have one for people to recognize your blog among tabs. You can put any small picture there


This is where generated site components will end up when they are generated. It is very inadvisable to write things here as they will be overwritten

Other files

You can have any file you want in the root directory and it will be processed by the Liquid ending and copied over to the _site directory.

You can for example write a file named listposts.json with the following content.

listposts.json liquid

  {%- for p in site.posts %}
    {{ p.title | jsonify }}: {{ site.url | append: p.url | jsonify }}
    {%- unless forloop.last %},{% endunless -%}
  {% endfor %}

And it might generate something like the following accessible on the web like /listposts.json with the following content.

listposts.json rendered

    "How to create a blog with Jekyll and GitHub Pages": ""

Testing locally

First make sure you have jekyll installed. it is a ruby gem so if you have ruby installed you can write gem install jekyll. You should also make sure to install bundler using gem install bundler. If you do not have Ruby you should install it first from or use a package manager if there is one you can use for it on your current system.

Now you should make a directory where you want to run jekyll and go into it and run jekyll new . which will create the files needed to run and then you can run either jekyll serve or bundle exec jekyll serve to run it which will start a web server accessible from localhost.

At times there might be issues that you will run into. On Windows I had the issue where it complained over the webrick gem being missing but I solved it by adding the line gem "webrick" to Gemfile and make sure to run it using bundle exec jekyll serve.

On Windows I tend to use the command
cmd /c bundle exec jekyll serve --livereload
as Ruby on Windows in cygwin tends to not run that well in certain situations with libraries that need to be found and on Linux
bundle exec jekyll serve -H --livereload
The reason for this is that the --livereload argument will automatically reload your page when you save a file and -H will make it visible from other hosts as I run it on a Raspberry pi at times.

Remember that a lot of files are placed there automatically like if you set a theme in _config.yml the files for the theme will automatically be downloaded.
If this is locally you tend to need to install the theme and put it in the Gemfile.

How to actually post

What you do when you want to make a post is create a new file in the _posts folder dated accordingly with and with at least the layout setting filled since otherwise there will be no loaded templates for your post. After that you just have to write whatever you want and when you are done you push to the gh-pages branch (As of now the main branch seems to work too if set up that way in repository settings) and GitHub will build it for you and update within a few seconds. You can use GitHub hooks to have things react to your blog being updated and act accordingly.

You should know a bit of markdown in order to make posts but that is something that is very easy to learn. You have perhaps used a chat service such as Discord which has support for markdown.

There are many jekyll themes you can look at at which makes it very convenient if you do not want to make your own design.

Good luck and free to ask any questions Mweeoops


By ellietheyeen 30 October 2023 Permalink Tags: github jekyll liquid