Markdown & Theme Showcase
This page is a living reference for everything the revinder-blog theme can render. Copy any block here as a starting point for a new post. It is deliberately back-dated so it sinks to the bottom of the blog index.
H1 — The Main Heading
H2 — Section Heading
H3 — Subsection
H4 — Deeper
H5 — Deeper Still
H6 — The Bottom
Footnotes
Zola supports standard Markdown footnotes1 and inline footnotes are not supported. 2
Text Formatting
Bold, italic, bold italic, strikethrough, inline code, and a hyperlink. You can also use autolinks: https://example.com or https://example.com.
This is a standard Markdown blockquote. It can span multiple lines and even contain
inline code.
Lists
Unordered
- First item
- Second item
- Nested item
- Another nested item
- Deeper still
- Third item
Ordered
- Step one
- Step two
- Sub-step
- Another sub-step
- Step three
Task Lists
- Todo item
- Done item
- Another todo
Horizontal Rule
Text above.
Text below.
Tables
| Feature | Supported | Notes |
|---|---|---|
| Headers | ✓ | All six levels |
| Tables | ✓ | GFM pipe syntax |
| Code highlighting | ✓ | Giallo (VSCode grammars) |
| Alerts | ✓ | 7 types + AI notice |
| Charts | ✓ | ApexCharts via JSON |
Aligned columns: :---, :---:, ---: give left / center / right.
| Left | Center | Right |
|---|---|---|
| a | b | c |
| long | med | x |
Code Blocks
Plain (no language)
No language hint — rendered as plain text.
Arbitrary monospace content here.Single language
def greet(name: str) -> None:
print(f"Hello, {name}!")
greet("Revinder")With the copy=true marker (Zola 0.21+)
Adding copy=true to the fence emits a data-copy="true" attribute on the <code> element. By itself this is just a marker — Zola does not render a button or wire up clipboard. It is a hook for your JS (or a theme) to opt a block into showing a Copy button. This block uses it:
def greet(name: str) -> None:
# copy=true adds data-copy="true" to the <code> tag
print(f"Hello, {name}!")
greet("Revinder")With line numbers
def fib(n: int) -> int:
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
for i in range(10):
print(fib(i))Line numbers + highlighted lines
def fib(n: int) -> int:
if n < 2:
return n # highlighted
return fib(n - 1) + fib(n - 2) # highlightedLine numbers starting at 20 + hidden lines
hide_lines uses 1-indexed source line numbers (not the displayed linenostart value). Below, hide_lines=1-2 removes the first two source lines — the comments — so only the function body shows, with numbering continuing from the linenostart=20 base.
def visible():
return "shown"Named block (renders a data-name label)
fn main() {
let xs: Vec<i32> = (1..=5).collect();
println!("{:?}", xs);
}A few more languages
SELECT username, tier
FROM users
WHERE created_at > now() - interval '30 days'
ORDER BY created_at DESC;#!/usr/bin/env sh
set -euo pipefail
echo "deploying $1"
rsync -avz public/ user@host:/srv/blog/name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4Images
Markdown image syntax

image shortcode (with caption + position)
The image shortcode wraps a single <img> with optional caption and CSS class (position).
Caption rendered by the image shortcode.
Shortcodes
alert — all 7 types
Alerts are framed callout boxes. Each type picks its border/background colour and icon automatically. The title is optional (defaults to the uppercased type).
A note alert. Supports Markdown, code, and links.
A tip alert with a custom title.
An info alert.
An important alert.
A warning alert with a custom title.
A danger alert — use sparingly.
alert — AI notice
A special ai_notice type renders a robot icon and structured model/agent metadata. Used at the top of AI-assisted posts to disclose usage.
This article was not written by AI. AI was used for typo-spotting and to draft auxiliary functions. All scripts were read, understood, and run by a human.
Models: DeepSeek V4 Flash
Agent: Opencode v1.2.27
character — speech bubbles
Two characters ship with the theme: CoolPizza and Monk. They can appear on either side.
Welcome to the blog! The avatar sits on the left and the bubble points rightward.
And I appear on the right, with a mirrored avatar.
quote — framed quote / poem
A dashed-border block for short quotes or multi-line verse. Whitespace is preserved (white-space: pre-wrap).
Two roads diverged in a wood, and I— I took the one less traveled by, And that has made all the difference.
chart — ApexCharts via JSON
The chart shortcode fetches a JSON file from static/ at render time and draws an ApexCharts line chart. The JSON must have labels (array) and series (array of {name, data}). Optional terminal-style window with dots via withDots=true, plus title, x_title, y_title.
Escaping & Edge Cases
Literal asterisks: \*not italic\*, literal backticks: `not code` (wrapped in double backticks with spaces).
A line that ends with two spaces
forces a hard line break (the line above has trailing spaces).
A very long word or URL like https://github.com/getzola/zola/blob/master/CHANGELOG.md should wrap rather than overflow the container.
That's everything. If a feature you need isn't shown here, it probably isn't wired up yet — check templates/shortcodes/ and sass/shortcodes.scss.