Zest Starter
A minimal blog scaffold generated by zest init . It doubles as the reference template for how a Zest site is organised.
Layout
.
├── _config.toml # site metadata, build options, defaults
├── _init.zest.fsx # runs before every build; injects global data
├── _data/nav.toml # site navigation (exposed as site.nav)
├── _themes/oxygen/ # self-contained theme
│ ├── _theme.toml # theme manifest
│ ├── _layouts/ # default.html, post.html (Nunjucks + HTML)
│ ├── _includes/ # header.html, footer.html
│ ├── _locales/ # en.toml, zh.toml (i18n strings)
│ └── assets/css/ # main.zcss → compiled to /assets/css/main.css
├── content/ # pages
│ ├── index.zest.fsx # home page (F# DSL)
│ ├── about.zest.fsx # static page
│ ├── features.zest.fsx # component showcase
│ ├── 404.zest.fsx # custom 404 page
│ ├── rss.zest.fsx # RSS feed (raw XML)
│ ├── sitemap.zest.fsx # sitemap (raw XML)
│ └── posts/
│ ├── index.zest.fsx # post listing
│ └── *.md # blog posts (Markdown)
└── _site/ # build output (generated)
How the pieces fit
-
Pages
are
.zest.fsxfiles: real F# using the type-safe HTML DSL.
Frontmatter comes from // @key value comments (e.g. // @title Home , // @layout default ).
-
Posts
are plain Markdown files with
+++frontmatter in
content/posts/
. The [[defaults]] entry in _config.toml routes them to the post layout.
- Layouts are HTML templates processed by the Nunjucks engine —
{{ content | safe }}
, {{ include header.html }} , {% if %} / {% for %} and filters like | t , | date , | readingTime .
-
Styles
are written in ZCSS (
assets/css/main.zcss), a SCSS-like
preprocessor with variables, nesting and color functions, compiled to plain CSS with no build tooling.
-
Global data
is injected in
_init.zest.fsxviaaddGlobaland read
in templates as {{ site.<key> }} .
Workflow
zest init my-blog # scaffold this starter
cd my-blog
zest serve # dev server with live reload
zest build # static output into _site/
The oxygen theme
The bundled theme is deliberately quiet: warm paper background, ink text, one jade accent, serif headings, hairline rules. No animation, no shadows, no hover lifts — typography and whitespace carry the page. It ships with light, dark ( prefers-color-scheme ) and print styles, and is fully responsive.
Commands
| Command | Description |
|---|---|
zest init
|
Scaffold a new site from this starter |
zest build
|
Build the site into _site/
|
zest serve
|
Run the dev server with live reload |
zest clean
|
Remove build output |