DevLab Theme v0.4.0 moves completely to Zola 0.23.1 and Tera 2. It deliberately drops compatibility with earlier Zola versions: the template engine was rewritten, macros disappeared, shortcodes were removed from Zola, and Markdown bodies are now Tera templates before they are rendered as Markdown.

This is a real breaking release rather than a compatibility shim. In return, the theme now has one component system for layouts and authored content, clearer build failures and less theme-specific syntax.

One global component API

All reusable content now lives in templates/components.html and uses a namespaced Tera 2 API:

  • devlab.card
  • devlab.callout
  • devlab.details
  • devlab.steps
  • devlab.icon

Components are registered globally and need no import. Block components accept Markdown bodies:

{% <devlab.callout type="tip" title="Tera 2"> %}
The component body supports **Markdown**.
{% </devlab.callout> %}

Inline components use a self-closing tag:

{{<devlab.icon name="github" label="GitHub" />}}

The complete API and live examples are in Tera components.

Required content migration

Old shortcode calls do not build on Zola 0.23. Replace them before upgrading:

BeforeNow
card(...) / enddevlab.card block component
callout(...) / enddevlab.callout block component
details(...) / enddevlab.details block component
steps() / enddevlab.steps block component
icon(...)self-closing devlab.icon component

Zola 0.23 also evaluates Tera inside fenced code blocks. Wrap literal template examples in matching Tera raw/endraw blocks. Files that must never execute Tera can instead be listed under skip_content_templating, but pages using DevLab components must remain templated.

Required template migration

Site-owned overrides must follow the Tera 2 migration rules:

  • replace macro declarations, template imports, and namespace::call() invocations with components;
  • pass named test arguments, such as value is starting_with(pat="/docs/");
  • replace recursive includes with recursive components;
  • use square brackets for array indexes;
  • review stricter undefined-value access and renamed or removed filters.

DevLab's own recursive Docs navigation, section catalogs, table of contents, pagination helpers, cards, links and icons are all Tera 2 components now. No compatibility macros remain in the theme.

Language-aware internals

Content lookups now pass the active lang to get_page and get_section, using the canonical content paths required by Zola 0.23. Search loads search_index.<lang>.js automatically unless extra.devlab.search.index explicitly overrides the filename.

The active Zola language also supplies the document's lang attribute. Interface strings remain configurable through the existing label fields; this release does not claim complete translation coverage.

Cleaner component assets

SVG fragments now live under templates/components/icons/, and every fragment is explicitly excluded from keyboard focus. The public icon component keeps decorative icons hidden from assistive technology and adds an accessible name only when label is present.

The CI build downloads the official Zola 0.23.1 musl archive and verifies its SHA-256 digest before extraction. Both the theme metadata and documentation now require 0.23.1.

Upgrading from v0.3.1

  1. Install Zola 0.23.1.
  2. Convert every DevLab shortcode call to the matching devlab.* component.
  3. Protect literal Tera examples in Markdown with raw blocks.
  4. Migrate any site-owned template overrides from macros and Tera 1 syntax.
  5. Update the pinned theme tag to v0.4.0 using Install and update.
  6. Run zola check and a production zola build with the site's real base URL.
  7. Review Docs navigation, component output, search, feeds and custom overrides.

The upstream breaking changes are documented in the Zola 0.23 changelog and the Tera 2 migration guide.

Compatibility

DevLab Theme v0.4.0 requires Zola 0.23.1 or newer. It has no Node.js, npm or external frontend runtime dependency.