13 unstable releases (5 breaking)

0.6.0 Mar 31, 2024
0.5.0 Nov 7, 2023
0.4.0 Nov 30, 2021
0.1.4 May 16, 2021
0.1.1 Dec 16, 2018

#35 in Template engine

Download history 1/week @ 2024-02-19 4/week @ 2024-02-26 58/week @ 2024-03-11 103/week @ 2024-03-25 161/week @ 2024-04-01

322 downloads per month


897 lines


build crates.io

Site is a fast, simple, and opinioned static site generator, written in Rust. Highlights include:

  • Write your content in Markdown format. Site is using pulldown_cmark as a markdown parser with extensions.
  • Uses Jinja2 as a template language. Site is using tera template engine.
  • Very simple. Blazingly fast. Build articles in parallel.
  • Inspired by Pelican, which is a static site generator written in Python. Site has a similar concept of Articles and Pages.
  • Inflexible and opinioned by design. Site implements only what the author needs to build a simple static site, like https://hayatoito.github.io/. If you want to customize, I'd recommend to fork Site itself. Site is intentionally kept very small so you can understand codebase and customize it easily.


cargo install site


No documentations yet.

Meanwhile, as a living document, use hayatoito/hayatoito.github.io as your starter boilerplate. https://hayatoito.github.io/ is built from that repository.

Folder structure

 - src/
   - (Put your markdown files here)
 - template/
   - (Put your template files here)
  • src/ is a folder where your all markdown files live. They are converted into HTML files, using Jinja2 template, and are copied into the output directory.

    Any other resources in src directory are also copied to the output directory.

  • template/ is a folder where jinja2's template files live.

Markdown format

Site uses markdown.

# Article title

date = "2021-12-01"

# Section

Hello Article!

- hello
- world

Nothing special except for:

  • The first section is considered as a title of the article.
  • Metadata, such as date, follows.


TODO: Explain

Name Description Default value
page false
date (date is mandatory unless page: true)
update_date NA
author NA
slug The page's URL Calculated by a relative PATH to src
toc Whether to generate Table of Contents false
toc_level NA (arbitrary depth)
draft Skip this markdown false
template Template file to use in template folder article or page


If a markdown's metadata contains page: true, Site consider that the markdown represents a page, instead of an article.

# Page title

page = true

# Section

Hello Page!

- hello
- world

The differences between article and page are:

  • A page will not be included in articles template variable. Neither in articles_by_year.
  • A page doesn't have to contain date metadata.

Template variables

TODO: Explain

Name page article Description
entry x x Represents an article or a page (its metadata and content)
site x x Site configuration given by --config parameter
articles x The list of the articles
articles_by_year x The list of { year, articles}
  • articles and articles_by_year are only available in a page. In other words, an article can't know other articles.


In addition to its metadata, entry contains the following fields:

Name Description
entry.title Title
entry.content Generated HTML
entry.toc_html Generated TOC (if toc: true)



site build --root-dir . --config=config.toml --out-dir out

root-dir should contain src and template folders.

See Make.zsh for the example CLI usages for various tasks.

GitHub Action

You can also use GitHub Action to build and deploy automatically if you are using GitHub Pages. See build.yml as an example.


~248K SLoC