{
"title": "Docs",
"date": "2026-07-22T08:54:00-04:00"
}
[TOC]
## Introduction
This guide assumes you have either read [The Guide](../guide), or have built a [Hugo](https://gohugo.io) site before. It also assumes you have a basic knowledge of HTML and CSS.
## Features
Thor has many features and content processors available. In an effort to provide the best out of the box experience, most of them are enabled by default.
### Opt-In Features
TODO: #### deflist syntax
TODO: #### footnotes
#### Minify
If enabled, `minify` will perform simple whitespace removal on all your output `.html` files, and any `.css` files in your `assets` directories. Minifying JavaScript is not supported at this time.
### Opt-Out Features
- emoji
- sidenotes/marginnotes
- syntax highlighting
- heading ids
## Directories
Like Hugo, a Thor project is a collection of specially named directories, plus a config file.
content
: `content` holds your pages and page bundles.
layouts
: `layouts` holds your templates and partials.
assets
: `assets` contains any static files for your site (favicon.ico, etc.), as well as files you want to send through the asset pipeline (CSS or JS files).
public
: `public` will contain your completed site.
All of these names can be remapped in `thor.json`.
> [!NOTE] While directories can be remapped at the site level, modules must (currently) adhere to the defaults.
### Asset pipeline
Currently, there is only one asset processor, and that is [the minifier](#minify).
### Pages & Page Bundles
Page content can either be defined in a single file (`contact.md`), or in a directory (`contact/index.md`, `contact/our-team.jpg`). Single file pages are preferred to page bundles.[^1]
[^1]: That's not you say you shouldn't use bundles, but if you have no additional resources on your page, there's no benefit to using a bundle.
Thor currently supports 2 formats for page files: MarkDown (`.md`), and HTML (`.html`).
## Templates
### Slots
> [!NOTE] (to self) Template modification is an "advanced" feature, and shoud probably be discussed later in the page. (or possibly in the guide.)
When building your own templates, you are of course free to pick whatever names you choose for your partials and content slots. However, sticking to conventions helps create consistency in the ecosystem, and prevents friction when relying on a built-in template.
`{{$main}}...{{/main}}`
: the `main` section should be used in templates to denote the part of the page that is unique to that page. For the most part, your templates should look like this
```mustache
{{