Jekyll Cheat Sheet

There's so many Jekyll variables and filters to remember it can be tricky to keep it all in your head. This cheat sheet serves as a quick reference of everything Jekyll can do.

Collection variables Docs

  • directory

    The full path to the collections’s source directory.

    Input
    {{ site.my_collection.directory }}
    
    Output
    /Users/mike/jekyll-project/_my_collection
    
  • docs

    An array of the collection’s documents.

    Input
    {{ site.my_collection.docs.first.url }}
    
    Output
    /my_collection/item.html
    
  • files

    An array of static files in the collection.

    Input
    {{ site.my_collection.files | size }}
    
    Output
    0
    
  • label

    The name of your collection.

    Input
    {{ site.my_collection.label }}
    
    Output
    my_collection
    
  • output

    Whether the collection’s documents will be output as individual files.

    Input
    {{ site.my_collection.output }}
    
    Output
    true
    
  • relative_path

    The path to the document’s source file relative to the site source.

    Input
    {{ site.collections.my_collection.relative_path }}
    
    Output
    _my_collection
    

Document variables Docs

  • collection

    Label of the containing collection.

    Input
    {{ site.my_collection.first.collection }}
    
    Output
    my_collection
    
  • content

    The content of the collection item, rendered or un-rendered depending upon what Liquid is being processed and the item is.

    Input
    {{ site.my_collection.first.content }}
    
    Output
    Hello from my_collection.
    
  • relative_path

    The path to the document’s source file relative to the site source.

    Input
    {{ site.my_collection.first.relative_path }}
    
    Output
    _my_collection/item.md
    

Global variables Docs

  • content

    In layout files, the rendered content of the Post or Page being wrapped. Not defined in Post or Page files.

  • page

    Page specific information + the YAML front matter. Custom variables set via the YAML Front Matter will be available here.

  • site

    Sitewide information + configuration settings from _config.yml.

Liquid filters - array Docs

  • array_to_sentence_string

    Append characters to a string.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {{ page.my_array | array_to_sentence_string }}
    {{ page.my_array | array_to_sentence_string: 'or' }}
    
    Output
    a, b, and c
    a, b, or c
    
  • first

    Get the first element of the passed in array.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {{ page.my_array | first }}
    
    Output
    a
    
  • group_by_exp

    Group an array’s items using a Liquid expression.

    Input
    <!-- page.people is
      - name: "John"
        school: "Stanford"
        year: 2016
      - name: "Jane"
        school: "Stanford"
        year: 2017
      - name: "Joe"
        school: "Harvard"
        year: 2015
    -->
    {{ page.people | group_by_exp: "item", "item.name | size" }}
    
    {{ page.people | group_by_exp: "item", "item.year | modulo: 2" }}
    
    {{ page.people | group_by_exp: "item", "item.school | replace: 'rd', 'ry' " }}
    
    Output
    {"name"=>4, "items"=>[{"name"=>"John", "school"=>"Stanford", "year"=>2016}, {"name"=>"Jane", "school"=>"Stanford", "year"=>2017}], "size"=>2}{"name"=>3, "items"=>[{"name"=>"Joe", "school"=>"Harvard", "year"=>2015}], "size"=>1}
    
    {"name"=>0, "items"=>[{"name"=>"John", "school"=>"Stanford", "year"=>2016}], "size"=>1}{"name"=>1, "items"=>[{"name"=>"Jane", "school"=>"Stanford", "year"=>2017}, {"name"=>"Joe", "school"=>"Harvard", "year"=>2015}], "size"=>2}
    
    {"name"=>"Stanfory", "items"=>[{"name"=>"John", "school"=>"Stanford", "year"=>2016}, {"name"=>"Jane", "school"=>"Stanford", "year"=>2017}], "size"=>2}{"name"=>"Harvary", "items"=>[{"name"=>"Joe", "school"=>"Harvard", "year"=>2015}], "size"=>1}
    
  • group_by

    Group an array’s items by a given property.

    Input
    <!-- page.people is
    - name: "John"
      school: "Stanford"
    - name: "Jane"
      school: "Stanford"
    - name: "Joe"
      school: "Harvard"
    -->
    {{ page.people | group_by: "school" }}
    
    Output
    {
      "name"=>"Stanford",
      "items"=>[{
        "name"=>"John",
        "school"=>"Stanford"
      }, {
        "name"=>"Jane",
        "school"=>"Stanford"
      }]
    },
    {
      "name"=>"Harvard",
      "items"=>[{
        "name"=>"Joe",
        "school"=>"Harvard"
      }]
    }
    
  • join

    Joins an array with the specified character.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {{ page.my_array | join: ', ' }}
    
    Output
    a, b, c
    
  • jsonify

    Convert Hash or Array to JSON.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {{ page.my_array | jsonify }}
    
    Output
    ["a","b","c"]
    
  • last

    Get the last element of the passed in array.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {{ page.my_array | last }}
    
    Output
    c
    
  • map

    Accepts an array element’s attribute as a parameter and creates a string out of each array element’s value.

    Input
    <!-- page.people is
      - name: "John"
        school: "Stanford"
      - name: "Jane"
        school: "Stanford"
      - name: "Joe"
        school: "Harvard"
    -->
    {{ page.people | map: "name" }}
    
    Output
    JohnJaneJoe
    
  • push

    Adds an object to a array.

    Input
    {% assign my_array = "a,b,c" | split:"," %}
    {% assign my_array = my_array | push: 'd' %}
    
    {{ my_array | array_to_sentence_string }}
    
    Output
    a, b, c, and d
    
  • size

    Return the size of an array or string.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {{ page.my_array | size }}
    
    Output
    3
    
  • sort

    Sorts an array.

    Input
    <!-- page.my_array is ['c', 'a', 'b'] -->
    {{ page.my_array | sort }}
    
    Output
    ['a','b','c']
    

    You can add a argument to sort on a property name:

    Input
    {{ page.posts | sort: 'author' }}
    

    And also add a second argument to say whether the nils should be first or last:

    Input
    {{ page.posts | sort: 'author', 'last' }}
    
  • uniq

    Removes duplicate elements from an array.

    Input
    <!-- page.my_array is ['cat', 'dog', 'mouse', 'cat'] -->
    {{ page.my_array | uniq }}
    
    Output
    'cat', 'dog', 'mouse'
    
  • where

    Select all the objects in an array where the key has the given value.

    Input
    <!-- page.people is
      - name: "John"
        school: "Stanford"
      - name: "Jane"
        school: "Stanford"
      - name: "Joe"
        school: "Harvard"
    -->
    {{ page.people | where: "school", "Stanford" }}
    
    Output
    {"name"=>"John", "school"=>"Stanford"}{"name"=>"Jane", "school"=>"Stanford"}
    
  • where_exp

    Select all the objects in an array where the expression is true.

    Input
    <!-- page.people is
      - name: "John"
        school: "Stanford"
        year: 2016
      - name: "Jane"
        school: "Stanford"
        year: 2017
      - name: "Joe"
        school: "Harvard"
        year: 2015
    -->
    {{ page.people | where_exp: "item", "item.name contains 'Jo'" }}
    
    {{ page.people | where_exp: "item", "item.year >= 2016" }}
    
    {{ page.people | where_exp: "item", "item.school != "Stanford" }}
    
    Output
    {"name"=>"John", "school"=>"Stanford", "year"=>2016}{"name"=>"Joe", "school"=>"Harvard", "year"=>2015}
    
    {"name"=>"John", "school"=>"Stanford", "year"=>2016}{"name"=>"Jane", "school"=>"Stanford", "year"=>2017}
    
    {"name"=>"Joe", "school"=>"Harvard", "year"=>2015}
    

Liquid filters - date Docs

  • date_to_long_string

    Convert a date to long format.

    Input
    {{ site.time | date_to_long_string }}
    
    Output
    01 January 2016
    
  • date_to_long_rfc822

    Convert a Date into RFC-822 format.

    Input
    {{ site.time | date_to_rfc822 }}
    
    Output
    Mon, 07 Nov 2008 13:07:54 -0800
    
  • date_to_string

    Convert a date to short format.

    Input
    {{ site.time | date_to_string }}
    
    Output
    01 Jan 2016
    
  • date_to_xmlschema

    Convert a Date into ISO 8601 format.

    Input
    {{ site.time | date_to_xmlschema }}
    
    Output
    2008-11-07T13:07:54-08:00
    
  • date

    Converts a date into another format.

    Input
    {{ site.time | date: "%a, %b %d, %y" }}
    
    Output
    Wed, Jan 27, 16
    
    • %a - Abbreviated weekday (Sun)
    • %A - Full weekday name (Sunday)
    • %b - Abbreviated month name (Jan)
    • %B - Full month name (January)
    • %c - Preferred local date and time representation (Fri Jan 29 11:16:09 2016)
    • %d - Day of the month, zero-padded (05)
    • %-d - Day of the month (5)
    • %D - Formats the date (29/01/16).
    • %e - Day of the month (3).
    • %F - Returns the date in ISO 8601 format (2016-01-29).
    • %H - Hour of the day, 24-hour clock (07)
    • %I - Hour of the day, 12-hour clock (04)
    • %j - Day of the year (017)
    • %k - Hour of the day, 24-hour clock (7)
    • %m - Month of the year (04)
    • %M - Minute of the hour (09)
    • %p - Meridian indicator uppercase (AM)
    • %P - Meridian indicator lowercase (pm)
    • %r - 12-hour time (01:31:43 PM)
    • %R - 24-hour time (18:09)
    • %T - 24-hour time with seconds (18:09:13)
    • %s - Number of seconds since 1970-01-01 00:00:00 UTC (1452355261)
    • %S - Second of the minute (05)
    • %U - Week number of the current year, starting with the first Sunday as the first day of the first week (03)
    • %W - Week number of the current year, starting with the first Monday as the first day of the first week (09)
    • %w - Day of the week. Sunday is 0 (4)
    • %x - Preferred representation for the date (05/11/15)
    • %X - Preferred representation for the time (17:15:31)
    • %y - Year without a century (16)
    • %Y - Year with century (2016)
    • %Z - Time zone name (PST)
    • %% - Literal % character

Liquid filters - integer Docs

  • ceil

    Rounds a number up to the nearest whole number.

    Input
    {{ 1.2 | ceil }}
    
    Output
    2
    
  • divided_by

    Integer division.

    Input
    {{ 10 | divided_by:3 }}
    
    Output
    3
    
  • floor

    Rounds a number down to the nearest whole number.

    Input
    {{ 1.2 | floor }}
    
    Output
    1
    
  • minus

    Subtraction.

    Input
    {{ 4 | minus:1 }}
    
    Output
    3
    
  • modulo

    Remainder.

    Input
    {{ 3 | modulo:2 }}
    
    Output
    1
    
  • plus

    Addition.

    Input
    {{ 4 | plus:1 }}
    
    Output
    5
    
  • round

    Rounds a number to the nearest whole number.

    Input
    {{ 1.8 | round }}
    
    Output
    2
    
  • times

    Integer multiplication.

    Input
    {{ 10 | times:3 }}
    
    Output
    30
    

Liquid filters - string Docs

  • absolute_url

    Prepend the baseurl and url to the input.

    Input
    <!-- baseurl is set to "/mysite" in _config.yml -->
    <!-- url is set to "http://example.com" in _config.yml -->
    {{ '/images/dog.jpeg' | absolute_url }}
    
    Output
    http://example.com/mysite/images/dog.jpeg
    
  • append

    Append characters to a string.

    Input
    {{ 'jekyll' | append: '.jpg' }}
    
    Output
    jekyll.jpg
    
  • capitalize

    Capitalizes the first character.

    Input
    {{ "static site generator" | capitalize }}
    
    Output
    Static site generator
    
  • cgi_escape

    Escape a string for use in a URL.

    Input
    {{ "foo,bar;baz?" | cgi_escape }}
    
    Output
    foo%2Cbar%3Bbaz%3F
    
  • default

    Set a fallback incase a value doesn’t exist.

    Input
    {{ nil | default: "hello"  }}
    
    Output
    hello
    
  • downcase

    Converts a string to lowercase.

    Input
    {{ "STATIC Site generator" | downcase }}
    
    Output
    static site generator
    
  • escape

    Returns an escaped version of html.

    Input
    {{ "<p>Jekyll</p>" | escape }}
    
    Output
    &amp;lt;p&amp;gt;Jekyll&amp;lt;/p&amp;gt;
    
  • lstrip

    Removes whitespace characters from the beginning of a string.

    Input
    {{ '          I love Jekyll!          ' | lstrip }}
    
    Output
    I love Jekyll!          
    
  • markdownify

    Convert a Markdown-formatted string into HTML.

    Input
    {{ "Hello **Jekyll**" | markdownify }}
    
    Output
    Hello <strong>Jekyll</strong>
    
  • number_of_words

    Count the number of words in a string.

    Input
    {{ "Hi Jekyll!" | number_of_words }}
    
    Output
    2
    
  • prepend

    Prepend characters to a string.

    Input
    {{ 'Jekyll' | prepend: 'I love ' }}
    
    Output
    I love Jekyll
    
  • relative_url

    Prepend the baseurl value to the input.

    Input
    <!-- baseurl is set to "/mysite" in _config.yml -->
    {{ '/images/dog.jpeg' | relative_url }}
    
    Output
    /mysite/images/dog.jpeg
    
  • remove_first

    Removes only the first occurrence of a substring from a string.

    Input
    {{ 'I really really like Jekyll' | remove_first: 'really' }}
    
    Output
    I really like Jekyll
    
  • remove

    Removes any occurrence of a substring from a string.

    Input
    {{ 'I really really like Jekyll' | remove: 'really' }}
    
    Output
    I like Jekyll
    
  • replace_first

    Replaces only the first occurrence of a substring from a string.

    Input
    {{ 'I really really like Jekyll' | replace_first: 'really', 'kinda' }}
    
    Output
    I kinda really like Jekyll
    
  • replace

    Replaces any occurrence of a substring from a string.

    Input
    {{ 'I really really like Jekyll' | replace: 'really', 'truly' }}
    
    Output
    I truly truly like Jekyll
    
  • rstrip

    Removes whitespace characters from the end of a string.

    Input
    {{ '          I love Jekyll!          ' | rstrip }}
    
    Output
              I love Jekyll!
    
  • sassify

    Convert a Sass string into CSS output.

    Input
    // assigned to sass_code
    body
      color: #333
      // ignored comment
      background-color: yellow
    
      p
        /* fixed comment
        color: green
    
    {{ sass_code | sassify }}
    
    Output
    body {
      color: #333;
      background-color: yellow;
    }
    body p {
      /* fixed comment */
      color: green;
    }
    
    
  • scssify

    Convert a SCSS string into CSS output.

    Input
    // assigned to scss_code
    body {
      color: #333;
      // ignored comment
      background-color: yellow;
    
      p {
        /* fixed comment */
        color: green;
      }
    }
    
    {{ scss_code | sassify }}
    
    Output
    body {
      color: #333;
      background-color: yellow;
    }
    body p {
      /* fixed comment */
      color: green;
    }
    
  • size

    Return the size of a string.

    Input
    <!-- page.my_string is jekyll -->
    {{ page.my_string | size }}
    
    Output
    6
    
  • slice

    returns a substring, starting at the specified index.

    Input
    {{ "hello" | slice: 0 }}
    {{ "hello" | slice: 1 }}
    {{ "hello" | slice: 1, 3 }}
    {{ "hello" | slice: -2 }}
    {{ "hello" | slice: -3, 2 }}
    
    Output
    h
    e
    ell
    l
    ll
    
  • slugify

    Convert a string into a lowercase URL slug.

    Input
    {{ "The _config.yml file" | slugify }}
    
    Output
    the-config-yml-file
    

    The slugify filter accepts an option, each specifying what to filter. The default is default. They are as follows (with what they filter):

    • none: no characters
    • raw: spaces
    • default: spaces and non-alphanumeric characters
    • pretty: spaces and non-alphanumeric characters except for ._~!$&'()+,;=@
  • smartify

    Convert quotes into smart quotes with SmartyPants

    Input
    {{ 'Use "Jekyll" --- the static generator...' | smartify }}
    
    Output
    Use &ldquo;Jekyll&rdquo; &mdash; the static generator&hellip;
    
  • split

    Divide a string into an array.

    Input
    {{ "a~b" | split:"~" }}
    
    Output
    ['a', 'b']
    
  • strip_html

    Strip all html tags from the input string.

    Input
    {{ "<p>Jekyll is cool</p>" | strip_html }}
    
    Output
    Jekyll is cool
    
  • strip_newlines

    Strip all new line characters from the input string.

    Input
    {{ "Hello
    there" | strip_newlines }}
    
    Output
    Hello there
    
  • strip

    Removes whitespace characters from around a string.

    Input
    {{ '          I love Jekyll!          ' | strip }}
    
    Output
    I love Jekyll!
    
  • truncate

    Truncate a string down to x characters.

    Input
    {{ "I love Jekyll" | truncate: 12 }}
    {{ "I love Jekyll" | truncate: 12, " etc." }}
    
    Output
    I love Je...
    I love etc.
    
  • truncatewords

    Truncate string down to x words.

    Input
    {{ "I love Jekyll" | truncatewords: 2 }}
    
    Output
    I love...
    
  • upcase

    Converts a string to uppercase.

    Input
    {{ "static site generator" | upcase }}
    
    Output
    STATIC SITE GENERATOR
    
  • uri_escape

    URI escape a string.

    Input
    {{ "foo, bar \baz?" | uri_escape }}
    
    Output
    foo,%20bar%20%5Cbaz?
    
  • url_encode

    Encodes any characters unsafe for a URL.

    Input
    {{ "john@example.com" | url_encode }}
    
    Output
    john%40example.com
    
  • xml_escape

    Select all the objects in an array where the key has the given value.

    Input
    {{ "<p>Hi Jekyll</p>"| xml_escape }}
    
    Output
    &amp;lt;p&amp;gt;Hi Jekyll&amp;lt;/p&amp;gt;
    

Liquid for loops Docs

  • else

    Condition when there are no items in the array.

    Input
    <!-- page.my_array is [] -->
    {% for item in page.my_array %}
      {{ item }}
    {% else %}
      There are no items!
    {% endfor %}
    
    Output
    There are no items!
    
  • first

    Returns whether it’s the first iteration.

    Input
    <!-- page.my_array is [1, 2, 3] -->
    {% for item in page.my_array %}
      {% if forloop.first %}
        First!
      {% else %}
        Not first
    {% endif %}
    {% endfor %}
    
    Output
    First! Not first Not first
    
  • index

    index of the current iteration.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {% for item in page.my_array %}
      {{ forloop.index }}
    {% endfor %}
    
    Output
    1 2 3
    
  • index0

    index of the current iteration (zero based).

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {% for item in page.my_array %}
      {{ forloop.index0 }}
    {% endfor %}
    
    Output
    0 1 2
    
  • last

    Returns whether it’s the last iteration.

    Input
    <!-- page.my_array is [1, 2, 3] -->
    {% for item in page.my_array %}
      {% if forloop.last %}
        Last!
      {% else %}
        Not last
      {% endif %}
    {% endfor %}
    
    Output
    Not last Not last Last!
    
  • length

    Length of the entire loop.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {% for item in page.my_array %}
      {{ forloop.length }}
    {% endfor %}
    
    Output
    3 3 3
    
  • limit

    Restrict how many items are looped through.

    Input
    <!-- page.my_array is [1, 2, 3, 4, 5] -->
    {% for item in page.my_array limit: 2 %}
      {{ item }}
    {% endfor %}
    
    Output
    1 2
    
  • offset

    Start looping from the nth item.

    Input
    <!-- page.my_array is [1, 2, 3, 4, 5] -->
    {% for item in page.my_array offset: 2 %}
      {{ item }}
    {% endfor %}
    
    Output
    3 4 5
    
  • reversed

    Reverses the order.

    Input
    <!-- page.my_array is [1, 2, 3, 4, 5] -->
    {% for item in page.my_array reversed %}
      {{ item }}
    {% endfor %}
    
    Output
    5 4 3 2 1
    
  • rindex

    Outputs the number of iterations left.

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {% for item in page.my_array %}
      {{ forloop.rindex }}
    {% endfor %}
    
    Output
    3 2 1
    
  • rindex0

    Outputs the number of iterations left (zero based).

    Input
    <!-- page.my_array is ['a', 'b', 'c'] -->
    {% for item in page.my_array %}
      {{ forloop.rindex0 }}
    {% endfor %}
    
    Output
    2 1 0
    

Liquid tags - control flow Docs

  • case

    Creates a switch statement to compare a variable with different values. case initializes the switch statement, and when compares its values.

    Input
    <!-- page.name is set to "home" -->
    {% case page.name %}
      {% when 'home' %}
        Home Page
      {% when 'about' %}
        About Page
      {% else %}
        Contact Page
    {% endcase %}
    
    Output
    Home Page
    
  • elsif

    Adds more conditions to an if or unless block.

    Input
    <!-- page.name is set to "contact" -->
    {% if page.name == 'about' %}
      About Page
    {% elsif page.name == 'contact' %}
      Contact Page
    {% else %}
      Other Page
    {% endif %}
    
    Output
    Contact Page
    
  • if

    Executes a block of code only if a certain condition is met.

    Input
    <!-- page.name is set to "about" -->
    {% if page.name == 'about' %}
      About Page
    {% endif %}
    
    Output
      About Page
    
  • operations

    Operators used in logic statements.

    • == equal
    • != not equal
    • > bigger than
    • < less than
    • >= bigger or equal
    • <= less or equal
    • or this or that
    • and must be this and that
    • contains includes the substring if used on a string, or element if used on an array
  • unless

    Similar to if, but executes a block of code only if a certain condition is not met.

    Input
    <!-- page.name is set to "about" -->
    {% unless page.name == "contact" %}
      It's not the contact page
    {% endunless %}
    
    Output
    It's not the contact page
    

    Which is the same as doing:

    {% if page.name != "contact" %}
      It's not the contact page
    {% endif %}
    

Liquid tags - iteration Docs

  • break

    Causes the loop to stop iterating.

    Input
    {% for i in (1..5) %}
      {% if i == 3 %}
        {% break %}
      {% else %}
        {{ i }}
      {% endif %}
    {% endfor %}
    
    Output
    1 2
    
  • continue

    Causes the loop to skip the current iteration.

    Input
    {% for i in (1..5) %}
      {% if i == 3 %}
        {% continue %}
      {% else %}
        {{ i }}
      {% endif %}
    {% endfor %}
    
    Output
    1 2 4 5
    
  • cycle

    Loops through a group of strings and outputs them in the order that they were passed as parameters.

    cycle must be used within a for loop block.

    Input
    {% for i in (1..5) %}
      {% cycle 'red', 'blue', 'yellow' %}
    {% endfor %}
    
    Output
    red blue yellow red blue
    
  • decrement

    Creates a new variable and every time it’s called the value decreases by 1, with the initial value being -1.

    Input
    {% decrement my_variable %}
    {% decrement my_variable %}
    {% decrement my_variable %}
    
    Output
    -1
    -2
    -3
    

    Like increment, variables declared inside decrement are independent from variables created through assign or capture.

  • for

    Repeatedly executes a block of code.

    Input
    {% for page in site.pages %}
      {{ page.title }}
    {% endfor %}
    
    Output
    index
    about
    contact
    
  • increment

    Creates a new variable and every time it’s called the value increases by 1, with the initial value being 0.

    Input
    {% increment my_variable %}
    {% increment my_variable %}
    {% increment my_variable %}
    
    Output
    0
    1
    2
    

    Variables created through the increment tag are independent from variables created through assign or capture.

    In the example below, my_var is created through assign. The increment tag is then used several times on a variable with the same name. However, note that the increment tag does not affect the value of my_var that was created through assign.

    Input
    {% assign my_var = 15 %}
    {% increment var %}
    {% increment var %}
    {% increment var %}
    {{ my_var }}
    
    Output
    0
    1
    2
    15
    

Liquid tags - other Docs

  • comment

    Don’t output the contained text.

    Input
    My name is {% comment %}Mr{% endcomment %} Jekyll
    
    Output
    My name is Jekyll
    
  • highlight

    Code snippet highlighting.

    Input
    {% highlight ruby %}
      def foo
        puts 'foo'
      end
    {% endhighlight %}
    
    Output
    <div class="highlight">
      <pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">foo</span>
      <span class="nb">puts</span> <span class="s1">&#39;foo&#39;</span>
    <span class="k">end</span></code></pre></div>
    
  • include

    Inserts a file from the _includes directory.

    Input
    <h1>My site</h1>
    {% include nav.html %}
    
    Output
    <h1>My Site</h1>
    <ul class="nav">
      <li><a href="/">Home</a></li>
      <li><a href="/about/">About</a></li>
      <li><a href="/contact/">Contact</a></li>
    </ul>
    
  • include_relative

    Includes a file relative to the current file.

    Input
    <h1>My site</h1>
    {% include_relative about.html %}
    
    Output
    <h1>My Site</h1>
    <h1>About</h1>
    
  • link

    Generate the correct permalink URL for the path you specify.

    Input
    {% link _collection/my-document.md %}
    {% link _posts/2017-03-15-my-post.md %}
    {% link blog/index.html %}
    {% link assets/document.pdf %}
    
    Output
    /my_collection/custom-permalink/my-document/
    /blog/my-post/
    /blog/
    /assets/document.pdf
    
  • post_url

    Generate the correct permalink URL for a post.

    Input
    {% post_url 2010-07-21-name-of-post %}
    
    Output
    /news/2010/07/21/name-of-post/
    
  • raw

    No liquid will be parsed in within these tags.

    Input

    ~~~liquid{% raw %} {{ page.title }} {% endraw %}

    
    ##### Output
    
    ~~~html
    {{ page.title }}
    

Liquid tags - variable Docs

  • assign

    Create a new variable.

    Input
    {% assign my_variable = false %}
    {% if my_variable != true %}
      Hi there!
    {% endif %}
    
    Output
    Hi there!
    
  • capture

    Captures the string inside of the opening and closing tags and assigns it to a variable.

    Input
    {% capture my_variable %}
      Captured text.
    {% endcapture %}
    
    {{ my_variable }}
    
    Output
    Captured text.
    

Markdown Docs

  • blockquotes

    Input
    > Blockquotes are very handy in email to emulate reply text.
    > This line is part of the same quote.
    
    Output
    <blockquote>
      <p>Blockquotes are very handy in email to emulate reply text.
    This line is part of the same quote.</p>
    </blockquote>
    
  • code blocks

    Input
    ```
    def what?
      42
    end
    ```
    {: .language-ruby}
    
    Output
    <pre>
      <code class="language-ruby">
        def what?
          42
        end
      </code>
    </pre>
    
  • definition list

    Input
    HTML
    : Hypertext Markup Language, a standardized system for tagging text files.
    
    CSS
    : Cascading Style Sheets (CSS) is a style sheet language used for describing the presentation of a document written in a markup language
    
    Output
    <dl>
      <dt>HTML</dt>
      <dd>Hypertext Markup Language, a standardized system for tagging text files.</dd>
      <dt>CSS</dt>
      <dd>Cascading Style Sheets (CSS) is a style sheet language used for describing the presentation of a document written in a markup language</dd>
    </dl>
    
  • headings

    Input
    # H1
    
    ## H2
    
    ### H3
    
    #### H4
    
    ##### H5
    
    ###### H6
    
    Output
    <h1 id="h1">H1</h1>
    
    <h2 id="h2">H2</h2>
    
    <h3 id="h3">H3</h3>
    
    <h4 id="h4">H4</h4>
    
    <h5 id="h5">H5</h5>
    
    <h6 id="h6">H6</h6>
    
  • horizontal rules

    Input
    ---
    
    Output
    <hr />
    
  • lists

    Input
    1. First item
    2. Second item
    3. Third item
    
    * First item
    * Second item
    * Third item
    
    Output
    <ol>
      <li>First item</li>
      <li>Second item</li>
      <li>Third item</li>
    </ol>
    
    <ul>
      <li>First item</li>
      <li>Second item</li>
      <li>Third item</li>
    </ul>
    
  • paragraphs

    Input
    A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines
    
    Output
    <p>A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines</p>
    
  • tables

    Input
    | Tables        | Are           | Cool  |
    | ------------- |:-------------:| -----:|
    | col 3 is      | right-aligned | $1600 |
    | col 2 is      | centered      |   $12 |
    | zebra stripes | are neat      |    $1 |
    
    Output
    
    <table>
      <thead>
        <tr>
          <th>Tables</th>
          <th style="text-align: center">Are</th>
          <th style="text-align: right">Cool</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>col 3 is</td>
          <td style="text-align: center">right-aligned</td>
          <td style="text-align: right">$1600</td>
        </tr>
        <tr>
          <td>col 2 is</td>
          <td style="text-align: center">centered</td>
          <td style="text-align: right">$12</td>
        </tr>
        <tr>
          <td>zebra stripes</td>
          <td style="text-align: center">are neat</td>
          <td style="text-align: right">$1</td>
        </tr>
      </tbody>
    </table>
    
  • text markup

    Input
    **strong** text
    
    _emphasis_ text
    
    `inline` code
    
    [link](http://jekyllrb.com) text
    
    ![Alt tag](/path/to/image.jpg)
    
    
    Output
    <p><strong>strong</strong> text</p>
    
    <p><em>emphasis</em> text</p>
    
    <p><code>inline</code> code</p>
    
    <p><a href="http://jekyllrb.com">link</a> text</p>
    
    <p><img src="/path/to/image.jpg" alt="Alt tag" /></p>
    

Page variables Docs

  • path

    The path to the raw post or page.

    Input
    {{ page.path }}
    
    Output
    index.html
    
  • url

    The URL of the Post without the domain, but with a leading slash.

    Input
    {{ page.url }}
    
    Output
    /index.html
    

Post variables Docs

  • categories

    The list of categories to which this post belongs.

    Input
    <!-- tags is set to
      categories:
        - news
    -->
    {{ page.categories | array_to_sentence_string  }}
    
    Output
    news
    
  • content

    The content of the post, rendered or un-rendered depending upon what Liquid is being processed and what post is.

    Input
    {{ page.content }}
    
    Output
    Hello World!
    
  • date

    The date assigned to the Post.

    Input
    {{ page.date }}
    
    Output
    2016-02-02 00:00:00 -0800
    
  • excerpt

    The un-rendered excerpt of the Post.

    Input
    {{ page.excerpt }}
    
    Output
    Hello World!
    
  • id

    An identifier unique to the Post.

    Input
    {{ page.id }}
    
    Output
    /2015/10/11/hello-world
    
  • next

    The next post relative to the position of the current post in site.posts. Returns nil for the last entry.

    Input
    {{ page.next.title }}
    
    Output
    /2016/01/02/hello-world.html
    
  • previous

    The previous post relative to the position of the current post in site.posts. Returns nil for the first entry.

    Input
    {{ page.previous.title }}
    
    Output
    /2016/01/02/im-fleeting.html
    
  • tags

    The list of tags to which this post belongs.

    Input
    <!-- tags is set to
      tags:
        - HTML
        - CSS
    -->
    {{ page.tags | array_to_sentence_string  }}
    
    Output
    HTML and CSS
    
  • title

    The title of the post.

    Input
    {{ page.title }}
    
    Output
    Hello World
    

Site variables Docs

  • categories.category

    The list of all Posts in a category.

    Input
    {% for p in site.categories.news %}
      {{ p.url }}
    {% endfor %}
    
    Output
    /2016/01/03/goodbye-world.html
    /2016/01/01/hello-world.html
    
  • collections

    A list of all the collections.

    Input
    {{ site.collections | size }}
    
    Output
    1
    
  • configuration data

    All the variables set via the command line and your _config.yml are available through site.

    Input
    <!-- url is set to http://mysite.com in the configuration file -->
    {{ site.url }}
    
    Output
    http://mysite.com
    
  • data

    A list containing the data loaded from the YAML, JSON and CSV files located in the _data directory.

    Input
    {{ site.data.nba_players.first.name }}
    
    Output
    Michael Jordan
    
  • documents

    A list of all the documents in every collection.

    Input
    {{ site.documents | size }}
    
    Output
    19
    
  • html_pages

    A subset of site.pages listing those which end in .html

    Input
    {% for p in site.html_pages %}
      {{ p.path }}
    {% endfor %}
    
    Output
    about.html
    contact.html
    index.html
    
  • pages

    A list of all Pages.

    Input
    {% for p in site.pages %}
      {{ p.path }}
    {% endfor %}
    
    Output
    about.html
    contact.html
    index.html
    site-map.xml
    
  • posts

    A reverse chronological list of all Posts.

    Input
    {% for p in site.posts %}
      {{ p.url }}
    {% endfor %}
    
    Output
    /2016/01/03/goodbye-world.html
    /2016/01/02/im-fleeting.html
    /2016/01/01/hello-world.html
    
  • related_posts

    If the page being processed is a Post, this contains a list of up to ten related Posts. By default, these are the ten most recent posts.

    Input
    <!-- run on /_posts/2016-01-01-hello-world.md -->
    {% for p in site.related_posts %}
      {{ p.title }}
    {% endfor %}
    
    Output
    Goodbye World
    Im Fleeting
    
  • static_files

    A list of all static files (i.e. files not processed by Jekyll’s converters or the Liquid renderer).

    Input
    {% for file in site.static_files %}
      {{ file.path }}
    {% endfor %}
    
    Output
    /css/style.css
    /js/my-script.js
    
  • tags.tag

    The list of all Posts with a particular tag.

    Input
    {% for p in site.tags.sad %}
      {{ p.url }}
    {% endfor %}
    
    Output
    /2016/01/03/goodbye-world.html
    /2016/01/02/im-fleeting.html
    
  • time

    The current time (when you run the jekyll command).

    Input
    {{ site.time }}
    
    Output
    2016-01-28 08:32:19 -0800
    

Static file variables Docs

  • extname

    The extension name for the file.

    Input
    {{ site.static_files.first.extname }}
    
    Output
    .css
    
  • modified_time

    The time the file was last modified.

    Input
    {{ site.static_files.first.modified_time }}
    
    Output
    1454000258
    
  • path

    The relative path to the file.

    Input
    {{ site.static_files.first.path }}
    
    Output
    /css/style.css
    

Yaml Docs

  • hashes

    Input
    # Nest hash
    my_hash:
      subkey:
        subsubkey1: 5
        subsubkey2: 6
      another:
        somethingelse: 'Important!'
    
    # Hash of hashes
    my_hash: {nr1: 5, nr2: 6}
    
  • sequences

    Input
    # sequence
    array:
      - 132
      - 2.434
      - 'abc'
    
    # sqeuence of sequences
    my_array:
    - [1, 2, 3]
    - [4, 5, 6]
    
  • variables

    Input
    a: 1
    b: 1.234
    c: 'abc'
    d: "abc"
    e: abc
    f: false # boolean type
    g: 2015-04-05 # date type
    
    # Enforcing strings
    h: !str 2015-04-05