Coming from Zola
dodeca's content model is intentionally Zola-compatible. If you've used Zola, most concepts transfer directly.
What's the same
- Content structure —
content/directory with_index.mdfor sections, other.mdfiles for pages - TOML frontmatter —
+++delimiters, same fields liketitle,weight,extra - Template inheritance —
{% extends "base.html" %},{% block %},{% include %} - Section/page distinction —
_index.mdcreates a section, everything else is a page - Familiar syntax — Jinja-like templates with
{{ }}and{% %}
What's different
Configuration
Zola uses config.toml. dodeca uses .config/dodeca.styx with Styx syntax:
content content
output public
syntax_highlight {
light_theme github-light
dark_theme tokyo-night
} Styx uses key value pairs — no colons, no equals signs. See Configuration.
Templates
dodeca uses gingembre instead of Tera. The syntax is nearly identical (Jinja-like), but there are differences in available filters, functions, and tests. See the Template Reference.
config.title and config.description
In dodeca, these come from the root _index.md frontmatter, not from the config file:
+++
title = "My Site"
description = "A site about things"
+++Assets are processed automatically
In Zola, you opt into image resizing with resize_image(). In dodeca:
- Images are automatically converted to JXL + WebP at multiple widths with
<picture>elements - Fonts are automatically subsetted to only the characters used on your site
- All assets get content-hash filenames for cache busting
- SASS is compiled and CSS is processed automatically
Dev = Production
Zola's dev server skips some production processing. dodeca doesn't — what you see in ddc serve is exactly what ddc build produces. This means no surprises at deploy time.