Author profiles turn a date and title into a publication with recognizable people behind it. DevLab places authors in a single byline row — avatar, linked name, publication date and reading time stay on one line in the Blog list and the article header. Every author key also receives a dedicated page listing their posts, so credit leads somewhere instead of ending at a name.

Development preview

Blog author profiles are available since v0.8.0.

Add your first author

  1. Enable the authors taxonomy and create the shared profile.

    In zola.toml, register the taxonomy next to tags:

    taxonomies = [
      { name = "tags", paginate_by = 5 },
      { name = "authors", feed = true },
    ]

    Then create data/authors.toml with one table per writer:

    [alex]
    name = "Alex Morgan"
    role = "Project maintainer"
    avatar = "/images/people/alex.webp"
    links = [
      { name = "Codeberg", path = "https://codeberg.org/alex", icon = "codeberg" },
    ]

    alex is the stable author key. The same string names the taxonomy term and profile table. Zola determines the URL using the site's taxonomy slug rules: alex becomes /authors/alex/, while Alex Morgan becomes /authors/alex-morgan/. Quote a TOML profile table name if it contains spaces.

  2. Credit that key in a Blog post.

    +++
    title = "Acme 1.0"
    description = "What changed in our first stable release."
    date = 2026-09-08
    
    [taxonomies]
    tags = ["release"]
    authors = ["alex"]
    +++

    If the post already has a [taxonomies] table for tags, add authors inside that table. TOML does not allow the same table twice.

  3. Check all three presentations.

    zola build

    Open the Blog list and the article to confirm the byline row, then /authors/alex/ for the profile header and the post archive. When feed = true is set, Zola publishes the configured feed_filenames with only that writer's posts. The profile links to the first configured feed (atom.xml by default; rss.xml is also supported).

Where the byline and the author page lead

The Blog list and the article header share one byline design: a circular avatar (initials when no image is set), the author's name as a link, then the publication date and reading time. Nothing is boxed or carded; the row reads as metadata, not decoration.

The name links to the author page by default. The page combines the profile header — avatar, role and icon links — with a complete post archive for that writer. A profile path overrides the destination when a writer's identity lives elsewhere, such as a community page or an external profile.

DevLab also emits an author metadata entry and an author link in the document head for each credited person.

Credit more than one person

List several keys in editorial order:

[taxonomies]
authors = ["alex", "mira"]

The first key appears first in the byline. There is no fixed author limit; on narrow screens the row wraps instead of being cut off. Removing authors or setting it to an empty array hides the byline for that post.

An unknown key degrades to a plain linked name instead of stopping the build, so a typo never takes the site down — but it also never publishes a full profile, so check the rendered byline before releasing. zola check does not render every template path, so do not use it as the only release check.

Shape an author profile

Only name is required inside a profile.

FieldDefaultPurpose
nameRequiredVisible author name and document metadata.
roleEmptyShort responsibility shown on the author page.
avatarEmptyLocal static image path or absolute HTTP(S) image URL.
pathAuthor pageDestination linked from the author's name in bylines and metadata.
linksEmpty arrayIcon links shown on the author page.

These fields are escaped plain text; they do not render Markdown or HTML. Keep the role concise.

Each links item needs a non-empty name and path, with an optional icon. DevLab supports the same profile icons as Community cards: github, gitlab, codeberg, matrix, zulip, telegram, discord, rss, email, link and external-link. An unknown icon uses the generic link mark.

Use an avatar or initials

Put a square image in the site's static directory:

avatar = "/images/people/alex.webp"

Local avatar paths include the site's deployment prefix but are not language-prefixed. DevLab reserves the image dimensions and crops the image to a circle. The image is decorative because the visible name carries the identity. If the file is missing, the browser shows a broken image rather than switching to initials, so verify local assets before publishing.

When avatar is absent, DevLab derives the fallback from the first character of name, including Unicode names.

Control reading time

Zola calculates page.reading_time from each post. DevLab shows it beside the publication date by default, which gives readers useful context without another front-matter field.

Disable it for the complete Blog in zola.toml:

[extra.devlab.blog]
show_reading_time = false

Or override one post inside its existing [extra] table:

[extra]
show_reading_time = false

The estimate remains available to template overrides even when DevLab does not render it.

Connect profiles and destinations

path can lead to a personal site, a repository profile or a local Community page. Local paths and social destinations use the active-language route resolver, while HTTP(S), mailto:, tel:, fragments and query-only links are preserved. Omit path to keep the author page as the destination.

The author profile uses the same basic field names as devlab.people, so a maintainer can be represented consistently in both places. The records are deliberately separate: Blog authors live in data/authors.toml keyed for taxonomy front matter, while Community groups remain arrays that can be arranged under any page heading.

Global profiles are shared by every language. Use language-neutral names and destinations where possible. If roles must be translated, a site can provide language-specific template overrides; the planned language-switcher iteration does not translate authored profile data automatically.

Translate the interface labels

Override the visible reading-time suffix in zola.toml:

[extra.labels]
reading_time = "мин чтения"
author_feed = "Публикации: {author}"

author_feed names the profile feed link for assistive technology and its tooltip; {author} is replaced with the display name. reading_time appears after Zola's numeric estimate. The profile's own name, role and link labels remain authored data.

For the exact configuration contract, see Optional Blog.