A section is a folder of content whose entries share a set of frontmatter fields: posts, pages, projects, docs. The sections block of site.yaml is where you tell Emet which folders those are and what the form for each one should look like. The sidebar lists the sections, the entry list shows what’s in the one you pick, and the frontmatter panel is built from its fields.
A section#
sections:
blog:
label: Blog posts
label_singular: Blog post
folder: content/blog
slug: "{{year}}/{{slug}}"
permalink: /blog/:year/:slug/
fields:
- name: title
type: string
required: true
- name: date
type: datetime
- name: tags
type: list
body:
shortcodes: trueThe key (blog here) identifies the section. It’s also the default folder and label, so blog: {} is a valid section: Emet will look in content/blog, call it “blog” and show no configured fields. You’d still be able to edit entries, because frontmatter keys that aren’t in the config are shown anyway (see Entries), but you’d lose the type-appropriate widgets.
| Key | What it does | Default |
|---|---|---|
label |
Name in the sidebar and above the entry list. | the key |
label_singular |
Used in the create dialog’s title. | label |
folder |
Path to the content, relative to the Hugo root. Prefixed with base_path if you have one. |
content/<key> |
create |
Whether entries can be created. false removes the + button and the Duplicate action. |
true |
delete |
Whether entries can be deleted. false hides the delete action for this section’s entries. |
true |
sort |
Entry list order, as field (date or title) and direction (asc or desc). _index.md is always pinned to the top, and any other field falls back to the default order. |
date, descending |
slug |
Filename pattern for new entries. See below. | {{slug}} |
permalink |
Hugo permalink pattern, used to work out page URLs. See below. | Hugo’s default: the file’s path under content/ |
identifier_field |
Which frontmatter field to show as an entry’s title in the list. | title |
list.subtitle |
What to show under the title on each entry card: date, path (the file’s path within the section), slug, or the name of a frontmatter field. A field value is shown before the date. |
date |
fields |
The frontmatter form. See Fields. | [] |
field_groups |
Collapsible groups for the form. See below. | none |
body.shortcodes |
Show the shortcode insert menu in the editor for this section. Shortcodes already in a file are shown and preserved either way. | false |
Filenames#
When someone creates an entry, Emet slugifies the title and runs it through the slug pattern to get a filename. Four variables are available: {{slug}} for the slugified title, and {{year}}, {{month}} and {{day}} for today’s date. .md is added if the pattern doesn’t end in it, and slashes make subfolders:
slug: "{{year}}/{{month}}/{{slug}}" # 2026/10/my-post.md
slug: "{{year}}-{{month}}-{{day}}-{{slug}}" # 2026-10-10-my-post.mdThe create dialog shows the resulting filename before you commit to it, and lets you edit the slug part.
Permalinks#
Emet needs to know a page’s URL for the View on site buttons, SEO analysis and social previews. By default it places the page where Hugo does without a [permalinks] entry: the file’s path under content/ (or the language’s content directory), lowercased with spaces as hyphens. content/docs/guides/setup.md is /docs/guides/setup/, a leaf bundle content/blog/post/index.md is /blog/post/, and a slug in the frontmatter replaces the last part. If your Hugo config has a [permalinks] entry for the section, copy the pattern here:
permalink: /:year/:month/:slug/The supported tokens are the ones Hugo supports: :slug, :contentbasename, :slugorcontentbasename, :title, :section, :year, :month, :monthname, :day, :weekday, :weekdayname and :yearday. :section is Hugo’s top-level section, so for content/docs/guides/setup.md it is docs. Entries in a non-default language get a /<code> prefix. As in Hugo, the pattern only applies to regular pages: an _index.md keeps its default path, so content/blog/_index.md is /blog/ whatever the pattern.
When you’re running the dev server against a local site, Emet reads [permalinks] from your Hugo config and fills these in itself. On GitHub-hosted sites you have to copy them by hand. The preview’s ref and relref resolution reads your real Hugo config either way, so if you forget, the two can disagree about where a page lives.
Field groups#
A long form is easier to use in sections. field_groups splits it into collapsible panels:
field_groups:
- name: main
label: Content
fields: [title, date, tags]
- name: seo
label: SEO
fields: [description, image]
collapsed: trueEach group lists field names from fields, and collapsed: true starts it closed. The groups appear in the order given, with the built-in slug, aliases and filename fields and any unconfigured frontmatter keys after them.
Note that once you have groups, a configured field that isn’t in any group doesn’t appear at all, so put every field somewhere.
Nested sections#
If one section’s folder is inside another’s (content/docs and content/docs/reference, say), the sidebar shows the child indented under its parent, and drilling into that subfolder from the parent’s entry list switches to the child section. You don’t have to declare subfolders to browse them; declaring one is how you give it its own fields.
Fields#
The field types and their options have their own page: Fields. Two things worth knowing at the section level: if you’re migrating from Decap or Netlify CMS, widget: is accepted as an alias for type:, and if two fields share a name Emet warns in the browser console and uses the last one.
Options that don’t do anything#
Some keys are accepted without complaint and then ignored. Older versions of these docs listed them as working, so if you have them in your config, this is why nothing happened.
preview_path, summary, nested, filter.exclude_folders and the whole body.formatting block are never read, and you can delete them.