Loading...
Loading...
Build static sites with the Zola generator (Rust-based SSG). Handles project initialization, config.toml configuration, Tera templates, Markdown content (sections via _index.md, pages via *.md), taxonomies, image processing, and deployment. Use for Zola project setup, Tera templating, _index.md structure, RSS/Atom feeds, syntax highlighting, or deployment to Netlify/Cloudflare/GitHub Pages/Vercel/Firebase. Also covers Zola+Astro hybrid architectures.
npx skill4agent add spillwavesolutions/creating-zola-static-sites-plugin creating-zola-static-sitesNew Project:
- [ ] zola init my-site && cd my-site
- [ ] Edit config.toml: set base_url
- [ ] IF using theme: skip next step (theme provides templates)
- [ ] IF no theme: copy templates from skill assets/
- [ ] zola serve → http://127.0.0.1:1111 loads
- [ ] zola check → exit code 0| Command | Purpose | Verify Success |
|---|---|---|
| Create project | |
| Dev server :1111 | Browser loads site |
| Output to public/ | |
| Validate links | Exit 0, no errors printed |
_| Filename | Type | Template | Example URL |
|---|---|---|---|
| section | section.html | |
| page | page.html | |
| page | page.html | |
content/
├── _index.md # section: /
├── about.md # page: /about/
└── blog/
├── _index.md # section: /blog/
└── post.md # page: /blog/post/_index.md+++
title = "Blog"
sort_by = "date" # date|title|weight|none
paginate_by = 10
+++*.md+++
title = "My Post"
date = 2024-01-15 # NO QUOTES or sorting breaks
[taxonomies]
tags = ["rust"]
+++@/[About](@/about.md)
[Blog](@/blog/_index.md)Blog Setup:
- [ ] Create content/blog/_index.md with sort_by="date"
- [ ] Create post: content/blog/2024-01-15-hello.md
- [ ] IF multilingual: add blog/_index.fr.md per language
- [ ] zola serve → /blog/ shows listing (empty if no posts yet)
- [ ] zola serve → /blog/hello/ shows post
- [ ] IF pagination: add more posts than paginate_by to test
- [ ] zola check → passesTaxonomy Setup:
- [ ] config.toml: taxonomies = [{name = "tags", feed = true}]
- [ ] Page frontmatter: [taxonomies] tags = ["value"]
- [ ] IF need categories: add {name = "categories"} to array
- [ ] IF term has spaces: use slugified URL (/tags/my-tag/)
- [ ] zola serve → /tags/ lists tags
- [ ] zola serve → /tags/rust/ shows postsProduction Deploy:
- [ ] zola check → passes (use --skip-external-links if slow)
- [ ] zola build → no errors
- [ ] ls public/index.html → exists
- [ ] IF feeds enabled: ls public/atom.xml → exists| Task | Reference | Load When User Asks About |
|---|---|---|
| Config | config-reference.md | Feeds, taxonomies, highlighting, search, link checker |
| Templates | tera-templates.md | Filters, loops, variables, macros, shortcodes |
| Content | content-organization.md | _index.md vs index.md, frontmatter, multilingual |
| Deploy | deployment-guides.md | Netlify, Cloudflare, GitHub Actions, Vercel, Firebase |
| Hybrid | astro-integration.md | Zola+Astro, Firebase export, shared navigation |
assets/| Asset | Use For |
|---|---|
| Base layout |
| Listings with pagination |
| Articles with TOC |
| Error page |
| youtube.html, figure.html |
| Blog preset |
| Docs preset |
| Wrong | Right | Why |
|---|---|---|
| | Quoted dates are strings, break sorting |
| | Missing @/ means no build validation |
| | Without |
| | Zola looks for section.html by default |
| Error | Fix | Verify |
|---|---|---|
| Template not found | Check spelling; ensure templates/ exists | |
| Dates not sorting | Use | Posts appear in date order |
| Broken @/ links | Path from content/, include .md extension | |
| Slow check | Skip external: | Completes in <10s |
{{ __tera_context }}RUST_LOG=zola=info zola build