Jekyll Markdown Syntax Reference
Jekyll Markdown Syntax Reference
This page is a single-file reference for writing Markdown in a typical Jekyll site.
Jekyll supports Markdown, and the default Markdown engine is kramdown. In practice, that means you usually have access to:
- standard Markdown
- many kramdown extensions
- YAML front matter at the top of the file
- optional Liquid templating inside Markdown files
Use this document as a practical cheat sheet when you forget how to format something.
Important: exact behavior can vary based on your
_config.yml, theme, plugins, and whether your site uses plain kramdown input or GFM-style input through kramdown. This reference covers the syntax you are most likely to use in normal Jekyll posts and pages.
Quick start
A minimal Jekyll post looks like this:
---
layout: post
title: "My Post Title"
date: 2026-03-10
tags:
- jekyll
- markdown
---
# My Heading
This is a paragraph with **bold**, *italic*, and a [link](https://example.com).
1. YAML front matter
Jekyll uses YAML front matter at the top of a file to define metadata.
Example
---
layout: post
title: "Example Post"
date: 2026-03-10
permalink: /example-post/
tags:
- jekyll
- markdown
categories:
- docs
published: true
---
Common fields
layout- layout file to usetitle- page or post titledate- publication datetags- tag listcategories- category listpermalink- custom output URLpublished- whether the page/post should be published
2. Paragraphs and line breaks
Paragraph
Leave a blank line between paragraphs.
This is the first paragraph.
This is the second paragraph.
Hard line break
End a line with two trailing spaces, or use the HTML break tag.
First line.
Second line.
First line.<br>
Second line.
3. Headings
Markdown supports headings from level 1 to level 6.
# H1
## H2
### H3
#### H4
##### H5
###### H6
Heading IDs in kramdown
kramdown lets you assign explicit IDs to headings, which is useful for stable anchor links.
## Installation {#installation}
You can then link to it with:
[Jump to Installation](#installation)
4. Emphasis
Italic
*italic*
_italic_
Bold
**bold**
__bold__
Bold + italic
***bold italic***
___bold italic___
Strikethrough
This is commonly available when using GFM-style parsing.
~~strikethrough~~
5. Blockquotes
> This is a blockquote.
Nested blockquotes:
> Outer quote
>> Inner quote
Blockquote with multiple paragraphs:
> First paragraph.
>
> Second paragraph.
6. Lists
Unordered list
- Item one
- Item two
- Item three
You can also use * or +:
* Item one
* Item two
Ordered list
1. First
2. Second
3. Third
Nested list
- Parent
- Child
- Child
- Parent
Task list
Often available with GFM-style input.
- [x] Done
- [ ] Not done
7. Links
Inline link
[OpenAI](https://openai.com)
Link with title
[OpenAI](https://openai.com "OpenAI homepage")
Reference-style link
[OpenAI][openai]
[openai]: https://openai.com
Link to local page or file
[About](/about/)
[My PDF](/assets/files/example.pdf)
Link to heading anchor
[Go to Lists](#lists)
8. Images
Inline image

Image with title

Linked image
[](https://example.com)
Reference-style image
![Alt text][logo]
[logo]: /assets/images/example.png
9. Inline code and code blocks
Inline code
Use the `bundle exec jekyll serve` command.
Fenced code block
```bash
bundle exec jekyll serve
```
Fenced code block with language
```powershell
Get-ChildItem -Path .
```
Indented code block
This is an indented code block.
Escaping backticks in inline code
Use double backticks when the code itself contains a backtick.
``code with a ` backtick``
10. Horizontal rules
Any of these usually works:
---
***
___
11. Tables
Tables are widely used in Jekyll sites when supported by the active parser/input mode.
| Name | Role | Status |
|------|------|--------|
| Sam | Admin | Active |
| Lee | User | Pending |
Alignment:
| Left | Center | Right |
|:-----|:------:|------:|
| A | B | C |
12. Escaping special characters
Use a backslash to escape Markdown punctuation.
\*not italic\*
\# not a heading
\[not a link\]
Common characters you may escape include:
\\ ` * _ { } [ ] ( ) # + - . ! >
13. HTML inside Markdown
Jekyll/kramdown allows raw HTML in Markdown files.
<div class="note">
This is raw HTML inside Markdown.
</div>
Useful examples:
<kbd>Ctrl</kbd>+<kbd>C</kbd>
<sup>2</sup>
<sub>2</sub>
<mark>highlighted</mark>
Use raw HTML when Markdown syntax does not cover the formatting you need.
14. Automatic IDs and manual IDs
kramdown can generate header IDs automatically, and it also supports manually assigned IDs.
Manual block ID
A paragraph with an explicit ID.
{: #my-paragraph}
Manual class
A paragraph with a CSS class.
{: .note}
Multiple attributes
A paragraph with both.
{: #important-note .note .warning}
This syntax is one of the most useful kramdown extensions in Jekyll.
15. Attribute lists (IAL)
IAL stands for Inline Attribute List in kramdown.
You can attach attributes to many block elements.
Paragraph
This paragraph has a class.
{: .callout}
Heading
## Warning {#warning .title}
List
- One
- Two
{: .compact-list}
Image with attributes
{: width="600" .shadowed }
16. Definition lists
kramdown supports definition lists.
Term 1
: Definition for term 1
Term 2
: Definition for term 2
: Another definition for term 2
Useful for glossaries and references.
17. Footnotes
kramdown supports footnotes.
Here is a statement with a footnote.[^1]
[^1]: This is the footnote text.
Footnotes can span multiple lines:
Here is another footnote example.[^long]
[^long]: This footnote continues
on the next indented line.
18. Abbreviations
kramdown supports abbreviations.
The HTML specification is widely used.
*[HTML]: HyperText Markup Language
When rendered, HTML may show the full expansion depending on styling/output.
19. Typographic symbols and smart quotes
Depending on configuration, typographic replacements may occur.
Examples you may write normally:
"quotes"
-- dashes --
... ellipsis ...
Actual output depends on configuration and parser options.
20. Math support
Math is not guaranteed by Markdown alone. It depends on your Jekyll setup, theme, and math rendering approach.
A common style is:
Inline math: $E = mc^2$
Block math:
$$
a^2 + b^2 = c^2
$$
This usually requires MathJax, KaTeX, or theme/plugin support.
21. Liquid in Markdown files
Jekyll lets you use Liquid templating in Markdown documents.
Output a variable
Jekyll Markdown Syntax Reference
Use a filter
/assets/files/example.pdf
Conditional example
# Jekyll Markdown Syntax Reference
Loop example
- [Four Rye Sourdough Bread Recipes](/2026/03/10/rye-bread-recipes.html)
- [Jekyll Markdown Syntax Reference](/2026/03/10/jekyll-markdown-syntax-reference.html)
- [Understanding the /mnt/data Directory in ChatGPT's Python Environment](/2026/03/07/mnt-data-directory-guide.html)
- [Creating Jekyll Markdown Posts](/2026/03/07/creating-jekyll-markdown-posts.html)
- [Chat Policy Block Reference Guide](/2026/03/07/chat-policy-block-reference-guide.html)
Warning about Liquid and code examples
If you want to show Liquid syntax literally, wrap it so Jekyll does not execute it:
{{ page.title }}
22. Comments
HTML comment
<!-- This is an HTML comment -->
Liquid comment
23. Auto-linking and bare URLs
Do not assume a plain bare URL will always render as a clickable link in every Jekyll setup.
Safer form:
<https://example.com>
Or the standard link form:
[Example](https://example.com)
24. Mixed Markdown + HTML examples
Collapsible section
<details>
<summary>Click to expand</summary>
Hidden content written in **Markdown**.
</details>
Keyboard shortcut
Press <kbd>Ctrl</kbd>+<kbd>S</kbd> to save.
Superscript / subscript
H<sub>2</sub>O
x<sup>2</sup>
25. Common block attribute patterns
These are especially handy in Jekyll sites using kramdown.
Add an ID to a paragraph
Remember this paragraph.
{: #remember-this }
Add classes for styling
Important note.
{: .notice .notice-warning }
Add attributes to a blockquote
> Warning: back up your site first.
{: .warning }
26. Syntax you may expect but should verify
Some syntax depends on parser mode, plugins, or theme behavior.
Task lists
- [x] Completed
- [ ] Pending
Strikethrough
~~old text~~
Tables
| A | B |
|---|---|
| 1 | 2 |
Emoji
:smile:
Math
$$x + y = z$$
These often work, but not in every Jekyll configuration.
27. Things that are not really “Markdown tokens” but matter in Jekyll
Front matter separators
---
These are not normal Markdown content; they mark the YAML front matter block.
Liquid delimiters
{{ variable }}
{% tag %}
These belong to Liquid, not Markdown, but they are commonly used inside Jekyll Markdown files.
HTML tags
<div></div>
These are HTML, but Jekyll Markdown files often include them.
28. Copy-ready examples by task
Create a note box
> **Note:** Review `_config.yml` after changing plugins.
{: .notice }
Create a section with a stable anchor
## Restore workflow {#restore-workflow}
Link to a local asset
[Download the ZIP](/assets/files/toolkit.zip)
Show a shell command
```bash
bundle exec jekyll build
```
Show PowerShell
```powershell
Get-ChildItem -Force
```
Create a glossary entry
Front matter
: YAML metadata at the top of a Jekyll file.
Add a footnote
This behavior depends on configuration.[^config]
[^config]: Check `_config.yml` and theme docs.
29. Recommended habits for Jekyll writing
- Use explicit heading IDs when you want stable anchors.
- Prefer normal Markdown first; use HTML only when needed.
- Use fenced code blocks with a language whenever possible.
- Use absolute asset paths like
/assets/...for site files. - Be careful when showing Liquid examples; use `` when needed.
- Verify parser-dependent features such as task lists, math, emoji, and strikethrough.
30. One-page syntax index
| Purpose | Syntax |
|---|---|
| Front matter | --- YAML --- |
| H1-H6 | # through ###### |
| Italic | *text* or _text_ |
| Bold | **text** or __text__ |
| Bold italic | ***text*** |
| Strikethrough | ~~text~~ |
| Blockquote | > quote |
| Unordered list | - item |
| Ordered list | 1. item |
| Task list | - [ ] item |
| Link | [text](url) |
| Image |  |
| Inline code | `code` |
| Fenced code | ```lang |
| Horizontal rule | --- |
| Table | | a | b | |
| Footnote ref | [^1] |
| Footnote def | [^1]: note |
| Definition list | Term then : Definition |
| Abbreviation | *[HTML]: HyperText Markup Language |
| Header ID | ## Title {#id} |
| Block attributes | {: .class #id } |
| HTML | <div>...</div> |
| Liquid output | {{ page.title }} |
| Liquid tag | {% if %}...{% endif %} |
| Raw Liquid escape | {% raw %}... |
31. Final note
If something in this file does not render the way you expect, the first places to check are:
_config.yml- your active Jekyll theme
- whether you are using standard kramdown input or GFM-style input through kramdown
- whether a feature requires additional JavaScript, CSS, or a plugin
For everyday authoring, the syntax in this document covers the vast majority of what you will actually need.