# Changelog
All notable changes to this project will be documented in this file.
## [6.0.0] - 2026-09-06
- feat: migrate to zola v0.23 / Tera v2, the minimum zola version required is now `v0.23.4`, shortcodes are rewritten as Tera components
- feat: tag links are now generated via zola's taxonomy API instead of hardcoded `/tags/` paths, so the `taxonomy_root` config option (e.g. `taxonomy_root = "blog"` for `/blog/tags/xxx` URLs) is respected
- feat: support multiple blog-like list sections — post pages now read config from their own parent section instead of the `blog_section_path` one, and each list section can have its own feed (`generate_feeds = true` in its `_index.md`); `blog_section_path` now only designates the main section used by the home page's recent posts and the tags pages
- refactor: `blog.html` template is renamed to `posts.html`, change `template = "blog.html"` to `template = "posts.html"` in your blog section's `_index.md`
- feat: display options (`toc` / `code_copy` / `comment` / `math` / `mermaid` / `reaction` / `outdated_alert` / `date_format`, etc.) now follow a unified fallback chain: post front-matter → section `_index.md` → `[extra]` of `zola.toml`, the closest one wins — notably `math` / `mermaid` can now be enabled for a whole section, and site-wide defaults can be set in `zola.toml`
- refactor: several options are renamed for clarity: `force_theme` (`false | "light" | "dark"`) → `color_scheme` (`"auto" | "light" | "dark"`), `copy` → `code_copy`, `outdate_alert*` → `outdated_alert*`, and `id` of the home section → `handle`
- refactor: the `sections` config option is renamed to `nav`, and its `is_external` field is removed — a `path` starting with `/` is an internal link, anything else (e.g. an `https://` URL) is treated as an external link automatically; external nav links now show a `ne-resize` cursor
- refactor: `name` / `handle` / `bio` / `avatar` / `links` of the home page are moved from the home section's `_index.md` to `[extra]` of `zola.toml`
- refactor: the example config file is renamed from `config.example.toml` to `zola.toml.example`, following zola v0.23's new default config file name `zola.toml` (the old `config.toml` name still works)
- refactor: the callout components (`note` / `tip` / `important` / `warning` / `caution`) are removed in favor of zola's native [GitHub alert syntax](https://github.com/orgs/community/discussions/16925) (`> [!NOTE]`), styled with icon and title by the theme; the title texts can be customized via css variables (`--callout-note-title`, etc.)
- feat: collections are redesigned — item appearance (`layout = "card" | "row" | "tile" | "gallery"`) and arrangement (`flow = "stack" | "inline" | "grid"`, the grid adapts its column count to the available width) are now declared at the collection level, and all layouts share one unified set of item fields (`title` / `subtitle` / `content` / `icon` / `image` / `link` / `badge` / `tags` / `featured`) with graceful degradation; item `link`s are auto-detected as internal or external, and `image` supports section-colocated files; `card` items can additionally show a picture on the left via `image` (the small `icon` before the title is a separate field)
- chore: upgrade Mermaid to 11.17.2 and KaTeX to 0.18.6, refreshing KaTeX resource integrity hashes
### Migrate from zola v0.22
Zola v0.23 removed shortcodes and Tera macros in favor of [Tera components](https://www.getzola.org/documentation/content/overview/#templating-your-content), and your markdown content is now itself a Tera template. Once you update zola and this theme, you need to update your content accordingly:
- Shortcode calls in your markdown must be rewritten in component syntax. Arguments other than strings are wrapped in `{...}`:
- `{{ figure(src="...", width="600") }}` → `{{ }}`
- `{% quote(cite="...") %} ... {% end %}` → `{% %} ... {% %}`
- `{{ youtube(id="...", autoplay=true) }}` → `{{ }}`
- `{{ collection(file="projects.toml") }}` → `{{ }}` (note the extra `section`)
- The callout shortcodes are removed, rewrite them with the GitHub alert syntax (custom titles are not supported, the title is always the type name):
```md
{% note(title="Note") %}
note text
{% end %}
```
becomes:
```md
> [!NOTE]
> note text
```
- For `figure` with a colocated image, pass the page context: `{{ }}` (or `section` instead of `page` when used in a section's `_index.md`)
- `width` / `height` of `figure` must be strings: `width="600"`, not `width=600`
- Literal `{{` or `{%` in your content (e.g. code blocks showing template syntax, GitHub Actions `${{ ... }}`) must be wrapped with `{% raw %}` ... `{% endraw %}`, otherwise zola will try to interpret them as Tera syntax. For files full of such content, you can instead list them in the `skip_content_templating` config option (glob patterns) to opt them out of templating entirely (components won't work in those files)
- Component calls must be at the top level of your markdown content — nesting them inside a list item is no longer supported (the component's HTML output breaks the list's indentation rules and produces broken HTML). If you had e.g. a callout inside a list item, move it out of the list
- The `date` filter is now backed by [jiff](https://docs.rs/jiff/latest/jiff/fmt/strtime/index.html) instead of chrono. Common `date_format` values like `"%b %-d, %Y"` still work, but chrono-specific specifiers (e.g. `%+`) are no longer supported and will fail the build — check your `date_format` options against the jiff docs
- Syntax highlighting CSS files (`giallo-light.css` / `giallo-dark.css`) are now generated directly into the output directory instead of `static/`, so you can remove them from your `static/` folder and `.gitignore`
- If you have custom templates that override serene's, they must be migrated to Tera v2 as well, see the [Tera migration guide](https://github.com/Keats/tera/blob/master/MIGRATION.md)
- The `blog.html` template is renamed to `posts.html`: change `template = "blog.html"` to `template = "posts.html"` in your blog section's `_index.md`
- Zola's default config file name is now `zola.toml` — you can rename your `config.toml` to `zola.toml` (optional, the old name still works)
- Several options are renamed, update them in your `zola.toml` / section `_index.md` / post front-matter:
- `force_theme = false | "light" | "dark"` → `color_scheme = "auto" | "light" | "dark"` (`false` becomes `"auto"`)
- `copy` → `code_copy`
- `outdate_alert` / `outdate_alert_days` / `outdate_alert_text_before` / `outdate_alert_text_after` → `outdated_alert` / `outdated_alert_days` / `outdated_alert_text_before` / `outdated_alert_text_after`
- `id` in the home section's `_index.md` → `handle`
- `sections` in `zola.toml` → `nav`, and remove the `is_external` field from its entries (external links are now detected automatically from the `path`)
- `name` / `handle` / `bio` / `avatar` / `links` move from the home section's `_index.md` to `[extra]` of `zola.toml`
- Collection toml files use a new schema, update them as follows:
- each `[[collection]]` becomes `[[item]]`, and the per-item `type` moves to a single collection-level `layout` at the top of the file: `card` → `layout = "card"`, `card_simple` → `layout = "row"` plus `flow = "stack"` (rename its `content` to `subtitle`), `entry` → `layout = "row"`, `box` → `layout = "tile"`, `art` → `layout = "gallery"`, `art_simple` → `layout = "gallery"` plus `flow = "grid"`
- rename item fields: `img` → `image` (`icon` keeps its name), and both `date` and `footer` → `badge` (a short mark rendered as-is: a year, a date range, a rating, a status...)
- remove `type = "br"` items — arrangement is now controlled by the collection-level `flow` (`"stack"` / `"inline"` / `"grid"`) option
## [5.7.0] - 2026-08-09
- feat: add open graph & twitter card meta tags and canonical link
- fix: resolve colocated figure image URLs [@uchouT](https://github.com/uchouT) ([#109](https://github.com/isunjn/serene/pull/109))
- fix: art collection content margin
## [5.6.3] - 2026-02-14
- fix: back link behavior on new tab
## [5.6.2] - 2026-02-13
- feat: add markdown support for collection's content and subtitle [@paulhdk](https://github.com/paulhdk) ([#104](https://github.com/isunjn/serene/pull/104))
## [5.6.1] - 2026-02-01
- fix: codeblock with filename
## [5.6.0] - 2026-02-01
- feat: adapt zola v0.22 new code highlighting, custom highlight themes (`serene-light`/`serene-dark`) are removed in favor of built-in themes
- feat: add `github_alerts` color styling (zola v0.21+ feature)
- feat: add `rel_me` option for links (useful for Mastodon verification)
- feat: add `youtube` shortcode [@gloomydumber](https://github.com/gloomydumber) ([#92](https://github.com/isunjn/serene/pull/92))
- fix: input element color scheme should be changed along with light/dark mode change
### Migrate from zola v0.21
Since this version, the minimum zola version required has changed to `v0.22.1`.
Replace the old `[markdown]` section in your `config.toml`:
```toml
# Old (remove these)
[markdown]
highlight_code = true
highlight_theme = "css"
extra_syntaxes_and_themes = ["themes/serene/highlight_themes"]
highlight_themes_css = [
{ theme = "serene-light", filename = "hl-light.css" },
{ theme = "serene-dark", filename = "hl-dark.css" },
]
```
With the new format:
```toml
# New
[markdown]
github_alerts = true # optional, enables GitHub-style callout syntax
[markdown.highlighting]
style = "class"
light_theme = "github-light" # or any zola built-in theme
dark_theme = "github-dark" # or any zola built-in theme
```
You should also delete the generated `hl-light.css` and `hl-dark.css` files from your `static/` directory if you have them.
The new generated css files for code highlighting will be `giallo-light.css` and `giallo-dark.css`. (giallo is zola's new syntax highlighter)
## [5.5.0] - 2025-10-18
- feat: shortcode `figure`'s `caption` can use markdown now, the `via` prop is removed, use `caption="[via](https://example.com)"` instead
- fix: shortcode `figure` now will keep img's ratio on small screens when `width` and `height` is set
- ui: a few tweaks
## [5.4.3] - 2025-09-29
- fix: correct back link button behavior when there is a hash in url
## [5.4.2] - 2025-09-27
- fix: feed.xml template build error when there is no post
## [5.4.1] - 2025-09-21
- feat: add overflow scroll indicator for table-of-contents
## [5.4.0] - 2025-09-06
- ui: a few tweaks
- feat: back link button now do `history.back()` if appropriate
- feat: add custom height and width options for `figure` shortcode [@znxftw](https://github.com/znxftw) ([#83](https://github.com/isunjn/serene/pull/83))
## [5.3.1] - 2025-05-22
- fix: `extra_syntaxes_and_themes` defaults to theme's, so you don't need to copy that path [@makai410](https://github.com/makai410) ([#80](https://github.com/isunjn/serene/pull/80))
## [5.3.0] - 2025-05-07
- ui: a few tweaks
## [5.2.1] - 2025-04-19
- fix: homepage avatar style
## [5.2.0] - 2025-04-10
- ui: a few tweaks
## [5.1.0] - 2025-04-08
- feat: add support for zola v0.20.0 codeblock [name annotation](https://www.getzola.org/documentation/content/syntax-highlighting/#annotations), previous `codeblock` shortcode is deprecated
- refactor: remove `static/` prefix from icon paths, eliminates the need to copy icon files [@koyokr](https://github.com/koyokr) ([#76](https://github.com/isunjn/serene/pull/76))
## [5.0.1] - 2025-03-31
- fix: external links & recent posts on the homepage [@Hiramiya](https://github.com/Hiramiya) ([#74](https://github.com/isunjn/serene/pull/74))
## [5.0.0] - 2025-03-20
> **Warning**
>
> This version is a big redesign and contains lots of breaking changes.
> If you came from a previous version and want to upgrade, I suggest you start all over again.
- New style: headerless, section title and subtitle, improved typography...
- Collections: special blocks for showcasing your list (a more general form of previous 'projects' page)
- Default icon size changed from 20 to 18
- Some config options are moved from `config.toml` to specific `_index.md`
- Added options: `date_format` `back_link_text`, (section) `title` `subtitle`, (homepage) `footer`
- Removed options: `display_*` `nav_*` `blur_effect` `display_tags` `truncate_summary` `not_found_title`
- Callouts: `question` removed, `alert` renamed to `caution`, attribution `header` renamed to `title`
- Typst math rendering removed
- Added CSS variables: `--primary-decoration-color` `--text-decoration-color` `--highlight-mark-color` `--font-size` `--line-height`
- Removed CSS variables: `--homepage-font-size` `--homepage-line-height` `--paragraph-font-size` `--paragraph-line-height` `--aside-font-size`
- Lots of UI tweaks
- feat: Support subpath `base_url` [@b-d-e](https://github.com/b-d-e) ([#68](https://github.com/isunjn/serene/pull/68))
- fix: `force_theme` option [@teh-banana](https://github.com/teh-banana) ([#71](https://github.com/isunjn/serene/pull/71))
- fix: Add content-type header to reaction fetch [@sorokya](https://github.com/sorokya) ([#72](https://github.com/isunjn/serene/pull/72))
## [4.5.0] - 2024-11-03
### UI:
- A few tweaks
## [4.4.0] - 2024-11-02
### Add:
- New feature: Anonymous emoji reactions
- New options: `display_bio` `display_avatar` `recent`
### Remove:
- Removed options: `homepage_layout` (use `recent` instead), `recent_more`
- Removed css variable: `--icon-size`
### UI:
- A few tweaks
## [4.3.0] - 2024-10-13
### Add:
- Add katex [copy-tex](https://github.com/KaTeX/KaTeX/tree/main/contrib/copy-tex) extension & bump katex version to 0.16.11
## [4.2.0] - 2024-10-04
### Fix:
- Fix anchor link style issue, now `#` should no be present in the RSS file
## [4.1.0] - 2024-09-16
### Add:
- `force_theme` option to only use light or dark theme [@bruceoberg](https://github.com/bruceoberg) ([#62](https://github.com/isunjn/serene/issues/62))
- A few more icons [@bruceoberg](https://github.com/bruceoberg) ([#63](https://github.com/isunjn/serene/issues/63))
## [4.0.0] - 2024-08-11
- Deal with breaking changes of zola 19 config options:
> - Changed config options named `generate_feed` to `generate_feeds` (both in config.toml and in section front-matter)
> - Changed config option `feed_filename: String` to `feed_filenames: Vec`
## [3.4.0] - 2024-04-25
### Add:
- Math rending with [Typst](https://typst.app) [@Lambdaris](https://github.com/Lambdaris) ([#57](https://github.com/isunjn/serene/pull/57))
## [3.3.1] - 2024-03-10
### Fix:
- Callout content overflow issue
### UI:
- Change highlight color of `diff` syntax
- A few tweaks
## [3.3.0] - 2024-03-01
### Add:
- New css variables: `--callout-border-radius` `--detail-border-radius`
### Fix:
- Overflow issue on mobile screens
### UI:
- Update quote icon
- A few tweaks
## [3.2.0] - 2024-01-26
### Add:
- Dark mode img/chart brightness option
## [3.1.0] - 2024-01-20
### Add:
- New shortcode: `quote` and `detail`
### Fix:
- Add `word-wrap: break-word` to inline code
## [3.0.0] - 2024-01-14
> **Warning**
>
> This version contains several breaking changes.
> If you came from a previous version and want to upgrade, I suggest you start all over again.
### Add:
- `recent` homepage layout
- `featured` mark
- Add title to ToC when it's too long
- A way to sort categories
- Project item image
- prerender/prefetch when hover, using `speculationrules` or `prefetch`
- RSS mask
- A few more css variables
### Fix:
- Theme init logic
- Mobile sidebar ui
### UI:
- A few tweaks
- Default icon size set to 20 (You should re-copy the `static/icon` folder)
## [2.3.0] - 2024-01-09
### Fix:
- `z-index` of mobile sidebar
### UI:
- Color change and some small tweaks
### Remove:
- Default custom font removed
## [2.2.1] - 2024-01-02
### Fix:
- Use `sessionStorage` for theme init in `_base.html`
## [2.2.0] - 2023-12-29
### Fix:
- Use `sessionStorage` for theme restore
- Fix an issue when initializing giscus theme
- Hide `#` anchor link in feed file
## [2.1.2] - 2023-09-19
### Fix:
- Outdate alert not 'hidden' ([#49](https://github.com/isunjn/serene/issues/49))
## [2.1.1] - 2023-09-16
### Add:
- Custom 404 page
## [2.0.1] - 2023-09-13
### Fix:
- Min height of prose page & post page
## [2.0.0] - 2023-09-01
> **Warning**
>
> This version contains several breaking changes.
> If you came from a previous version and want to upgrade, I suggest you start all over again.
### UI:
- Text selction now is styled
- Other minor tweaks
- Change defalut bg color of codeblock to transparent
### Add:
- Option `dispaly_tags` and `truncate_summary` [@woojiq](https://github.com/woojiq) ([#40](https://github.com/isunjn/serene/issues/40))
- Support for footnote and backlink
- Active TOC indicator
- Generay `prose` section/page
- Config option `sections`, now you can rename `blog` to somthing else, e.g. `posts`
- Support for header nav fold/unfold
- Option for homepage layout, can be `about` or `list`
- A separate `_custom_css.html` for css customization
### Fix:
- Codeblock distance calculation
- Codeblock highlight style
- Add description tag only when it's available
- Post 3 column layout issue
- Inline code style in list item
- Link text-decoration style on mobile
## [1.2.0] - 2023-08-19
### UI:
- Use noborder theme of giscus by default
- Post list item and callout styles changed
- Code block styles improved
- Default colors changed
### Add:
- Outline styles [@mrtnvgr](https://github.com/mrtnvgr) ([#26](https://github.com/isunjn/serene/pull/26))
- Support self-host font ([#29](https://github.com/isunjn/serene/pull/29))
- Copy button for code blocks ([#30](https://github.com/isunjn/serene/pull/30))
- Support light/dark switch for code blocks ([#33](https://github.com/isunjn/serene/pull/33))
- Support tags for project page
- Back-to-top button
- A shortcode for code block with file name: `codeblock` ([#39](https://github.com/isunjn/serene/pull/39))
### Fix:
- Update theme toggle icon on page load [@mrtnvgr](https://github.com/mrtnvgr) ([#25](https://github.com/isunjn/serene/pull/25))
- Layout shift problem on post page ([#27](https://github.com/isunjn/serene/pull/27))
## [1.1.1] - 2023-08-09
- Allow no tags in front matter [@mrtnvgr](https://github.com/mrtnvgr)
- Fix figcaption width issue
## [1.1.0] - 2023-05-27
- Fix theme auto-toggle logic
- A few ui tweaks
## [1.0.0] - 2023-05-24
> **Warning**
> The 1.0.0 version contains many breaking changes.
> If you came from a previous version and want to upgrade, I suggest you start all over again.
### Breaking
- `config.toml` restructured, config items are renamed
- All analytics configs removed, use `_head_extend.html` instead
- All comment-support configs removed, replace with [giscus](https://giscus.app)
- Icons now using svg files
- Callout renamed: `info -> note`, `caution -> warning`, `warning -> alert`
- Callout removed: `good`, `bad`, `happy`, `unhappy`, `check`, `wrong`, `flag`, `star`
- `cc_license` removed
- Reading-progress-bar removed
- Back-to-top button removed
- Many other tweaks
## [0.2.0] - 2022-02-16
### Add:
- KaTeX support
- Mermaid support
### Fix:
- Style issue of table-of-contents
- A few non-critical bugs
## [0.1.0] - 2022-01-14
First release 🎉
[6.0.0]: https://github.com/isunjn/serene/compare/v5.7.0...v6.0.0
[5.7.0]: https://github.com/isunjn/serene/compare/v5.6.3...v5.7.0
[5.6.3]: https://github.com/isunjn/serene/compare/v5.6.2...v5.6.3
[5.6.2]: https://github.com/isunjn/serene/compare/v5.6.1...v5.6.2
[5.6.1]: https://github.com/isunjn/serene/compare/v5.6.0...v5.6.1
[5.6.0]: https://github.com/isunjn/serene/compare/v5.5.0...v5.6.0
[5.5.0]: https://github.com/isunjn/serene/compare/v5.4.3...v5.5.0
[5.4.3]: https://github.com/isunjn/serene/compare/v5.4.2...v5.4.3
[5.4.2]: https://github.com/isunjn/serene/compare/v5.4.1...v5.4.2
[5.4.1]: https://github.com/isunjn/serene/compare/v5.4.0...v5.4.1
[5.4.0]: https://github.com/isunjn/serene/compare/v5.3.1...v5.4.0
[5.3.1]: https://github.com/isunjn/serene/compare/v5.3.0...v5.3.1
[5.3.0]: https://github.com/isunjn/serene/compare/v5.2.1...v5.3.0
[5.2.1]: https://github.com/isunjn/serene/compare/v5.2.0...v5.2.1
[5.2.0]: https://github.com/isunjn/serene/compare/v5.1.0...v5.2.0
[5.1.0]: https://github.com/isunjn/serene/compare/v5.0.1...v5.1.0
[5.0.1]: https://github.com/isunjn/serene/compare/v5.0.0...v5.0.1
[5.0.0]: https://github.com/isunjn/serene/compare/v4.5.0...v5.0.0
[4.5.0]: https://github.com/isunjn/serene/compare/v4.4.0...v4.5.0
[4.4.0]: https://github.com/isunjn/serene/compare/v4.3.0...v4.4.0
[4.3.0]: https://github.com/isunjn/serene/compare/v4.2.0...v4.3.0
[4.2.0]: https://github.com/isunjn/serene/compare/v4.1.0...v4.2.0
[4.1.0]: https://github.com/isunjn/serene/compare/v4.0.0...v4.1.0
[4.0.0]: https://github.com/isunjn/serene/compare/v3.4.0...v4.0.0
[3.4.0]: https://github.com/isunjn/serene/compare/v3.3.1...v3.4.0
[3.3.1]: https://github.com/isunjn/serene/compare/v3.3.0...v3.3.1
[3.3.0]: https://github.com/isunjn/serene/compare/v3.2.0...v3.3.0
[3.2.0]: https://github.com/isunjn/serene/compare/v3.1.0...v3.2.0
[3.1.0]: https://github.com/isunjn/serene/compare/v3.0.0...v3.1.0
[3.0.0]: https://github.com/isunjn/serene/compare/v2.3.0...v3.0.0
[2.3.0]: https://github.com/isunjn/serene/compare/v2.2.1...v2.3.0
[2.2.1]: https://github.com/isunjn/serene/compare/v2.2.0...v2.2.1
[2.2.0]: https://github.com/isunjn/serene/compare/v2.1.2...v2.2.0
[2.1.2]: https://github.com/isunjn/serene/compare/v2.1.1...v2.1.2
[2.1.1]: https://github.com/isunjn/serene/compare/v2.0.1...v2.1.1
[2.0.1]: https://github.com/isunjn/serene/compare/v2.0.0...v2.0.1
[2.0.0]: https://github.com/isunjn/serene/compare/v1.2.0...v2.0.0
[1.2.0]: https://github.com/isunjn/serene/compare/v1.1.1...v1.2.0
[1.1.1]: https://github.com/isunjn/serene/compare/v1.1.0...v1.1.1
[1.1.0]: https://github.com/isunjn/serene/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/isunjn/serene/compare/v0.2.0...v1.0.0
[0.2.0]: https://github.com/isunjn/serene/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/isunjn/serene/releases/tag/v0.1.0