---
title: "Hextra v0.12"
date: 2026-02-20
authors:
  - name: imfing
    link: https://github.com/imfing
    image: https://github.com/imfing.png
tags:
  - Release
---

Hextra v0.12.0 delivers a rich set of new features including page context menus, image zoom, redesigned tabs, and more, plus comprehensive WCAG 2.2 AA accessibility improvements and numerous bug fixes.

<!--more-->

## Upgrade Guide

No breaking changes are expected for most sites. Update using [Hugo Modules](https://gohugo.io/hugo-modules/use-modules/):

```bash
hugo mod get -u github.com/imfing/hextra
```

## Highlights

- Page context menu for copying/viewing Markdown source
- Redesigned tabs shortcode with per-tab naming and icon support
- Click-to-zoom for Markdown images
- GoatCounter analytics support
- Option to hide the main sidebar on desktop
- Display last modified author via GitInfo
- Option to disable prev/next navigation
- Built-in archives page for chronological blog post listings
- Term glossary shortcode and layout
- Exclude pages/sections from llms.txt
- Mobile sidebar ordering and labels aligned with `menu.main`
- Stable content width with CSS variable override support
- Comprehensive WCAG 2.2 AA accessibility improvements

## New Features

### Page Context Menu

![Context menu](https://github.com/user-attachments/assets/0b55bee9-6f4d-4e1d-9461-60c40208cb6c)

The page context menu provides a dropdown button that lets you copy the page content as Markdown or view the raw Markdown source. As more users feed documentation into generative AI tools, having quick access to clean Markdown is increasingly useful. Custom links with template variables (`{url}`, `{title}`, `{markdown_url}`) let you wire up "Ask AI" shortcuts or other integrations directly in the menu.

To use the "View as Markdown" and `{markdown_url}` features, enable the Markdown output format in your site configuration:

```yaml {filename="hugo.yaml"}
outputs:
  page: [html, markdown]
  section: [html, rss, markdown]
```

Then configure the context menu:

```yaml {filename="hugo.yaml"}
params:
  page:
    contextMenu:
      enable: true
      links:
        - name: "Ask AI"
          url: "https://example.com?content={markdown_url}"
          icon: "sparkles"
```

### Tabs Revamp and Icon Support

The [tabs shortcode]({{% relref "docs/guide/shortcodes/tabs" %}}) has been redesigned. Tab names can now be set directly on each `tab` shortcode, and an optional `icon` parameter displays an icon before the tab label. The previous syntax is still supported.

```md
{{</* tabs */>}}
  {{</* tab name="Photos" icon="photograph" */>}}Manage and organize your photo library.{{</* /tab */>}}
  {{</* tab name="Music" icon="music-note" */>}}Browse and play your favorite tracks.{{</* /tab */>}}
  {{</* tab name="Videos" icon="film" */>}}Watch and stream video content.{{</* /tab */>}}
{{</* /tabs */>}}
```

![Tabs with icons](https://github.com/user-attachments/assets/afa4cb8f-615c-4f01-8ae4-81a64c9ce391)

### Image Zoom

Enable click-to-zoom on Markdown images with a new configuration option, powered by [medium-zoom](https://github.com/francoischalifour/medium-zoom).

```yaml {filename="hugo.yaml"}
params:
  imageZoom:
    enable: true
```

### GoatCounter Analytics

Built-in support for [GoatCounter](https://www.goatcounter.com/) analytics alongside existing Google Analytics, Umami, and Matomo integrations.

### Hide Main Sidebar

A new front matter parameter allows hiding the main sidebar on desktop to give content pages the full width.

```yaml {filename="content/my-page.md"}
---
title: My Page
sidebar:
  hide: true
---
```

### Last Modified Author

Display the last commit author alongside the "last updated" date using Hugo's GitInfo.

```yaml {filename="hugo.yaml"}
params:
  displayUpdatedAuthor: true
```

![Last modified author](https://github.com/user-attachments/assets/275b7177-e089-483c-abb6-6d8f16616b9b)

### Disable Prev/Next Navigation

Disable the previous/next navigation buttons site-wide:

```yaml {filename="hugo.yaml"}
params:
  page:
    displayPagination: false
```

### LLMs.txt Exclusion

Exclude individual pages or entire sections from `llms.txt` output by setting `llms: false` in front matter.

```yaml {filename="content/private-page.md"}
---
title: "Private Page"
llms: false
---
```

### Archives Page

A new built-in `archives` layout displays blog posts in a chronological timeline grouped by year, with tags shown inline after each post title.

```yaml {filename="content/archives/_index.md"}
---
title: Archives
layout: archives
---
```

![Archives page](https://github.com/user-attachments/assets/262cc0fa-e0af-4a50-8c3d-4465059418b8)

### Glossary

A site-wide terminology [glossary]({{% relref "docs/guide/shortcodes/term" %}}) with a dedicated listing page and a `term` shortcode for inline definitions.

## Accessibility

Comprehensive WCAG 2.2 AA accessibility improvements (#924):

- Skip-to-content link and ARIA landmark roles on all pages
- ARIA attributes on all interactive widgets (theme toggle, tabs, sidebar, filetree, dropdowns, search, menus)
- Keyboard navigation for tabs and theme toggle (arrow keys, Enter, Escape)
- `prefers-reduced-motion` support and global `focus-visible` styles
- 15 new i18n accessibility keys with full translations across all 21 locales
- Replaced all hardcoded English `aria-label` strings with i18n lookups

## Quality of Life

- Improved table readability styles
- Markdown attribute support for headers
- Better active link detection for multilingual section landing pages
- Card shortcode supports optional `alt` parameter for images
- Page bundle images supported in OpenGraph metadata
- Content width now stays consistent by default, with CSS variable override support for custom layouts

## Fixes

- Prevent `relref` double base-prefix in render-link
- Fix tabs rendering when nested inside steps
- Align mobile sidebar ordering and labels with `menu.main`
- Respect `search.enable` in the sidebar
- Respect the `toc` page parameter in mobile dropdown
- Enhance FlexSearch match highlighting and safe DOM manipulation
- Fix card subtitle positioning
- Handle leading slashes in OG image paths for subpath deployments
- Fix FlexSearch returning fewer than expected result pages
- Change default Umami analytics file to `script.js`
- Fix RSS author lookup for Hugo v0.156.0+ (`.Site.Params.Author`)

## Documentation & i18n

- Add Italian localization
- Link KaTeX documentation
- Update details shortcode docs to angle bracket syntax

## Contributors

This release was made possible by contributions from 11 new contributors:

- [@ghac101](https://github.com/ghac101) - Umami analytics fix, disable prev/next navigation
- [@pmarrapese](https://github.com/pmarrapese) - Markdown attribute support for headers
- [@Bubbler-4](https://github.com/Bubbler-4) - Details shortcode documentation
- [@bloovis](https://github.com/bloovis) - FlexSearch result count fix
- [@AntoninPvr](https://github.com/AntoninPvr) - Card subtitle positioning fix
- [@illia-v](https://github.com/illia-v) - Mobile TOC and search toggle fixes
- [@gallochri](https://github.com/gallochri) - Italian localization
- [@MatheusFlausino](https://github.com/MatheusFlausino) - LLMs.txt exclusion
- [@daniseijo](https://github.com/daniseijo) - Last modified author feature
- [@confusedkernel](https://github.com/confusedkernel) - Archives page
- [@Fenyutanchan](https://github.com/Fenyutanchan) - Hugo v0.156.0 RSS author compatibility fix

Additional thanks to returning contributors [@KStocky](https://github.com/KStocky), [@ldez](https://github.com/ldez), [@kowyo](https://github.com/kowyo), [@torbjornbp](https://github.com/torbjornbp), [@yuri1969](https://github.com/yuri1969), and [@PrintN](https://github.com/PrintN) for their continued contributions.

---

**Full Changelog**: https://github.com/imfing/hextra/compare/v0.11.1...v0.12.0
