Sections

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: true

The 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.md

The create dialog shows the resulting filename before you commit to it, and lets you edit the slug part.

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: true

Each 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.