tilder, Documentation, Reference, Configuration

Documentation

Name

configuration - every key of defaults.toml

tilder reads every setting of a site, and every word a reader sees outside the pages, from TOML. Its own defaults.toml holds each key with a neutral, English default; the theme's theme.toml and the site's content/site.toml are merged over it, and state only what differs. This page lists every key of defaults.toml, table by table, with its default exactly as the file writes it.

How the files merge

Each file is merged over the one before, the last one winning: defaults.toml, then theme/theme.toml, then content/site.toml. On a site with several languages, theme/theme.<lang>.toml comes after theme.toml, and content/site.<lang>.toml after site.toml, for the pass of that language (the project, languages).

  • Tables merge key by key: a file that sets [site] manual keeps every other key of [site].
  • A value that is not a table, a list included, replaces the one before as a whole. So does a list of tables, [[nav]]: a file that sets it repeats every entry.
  • A collection's settings start from its type's own defaults, in the type's module, with [collections.<name>] over them (content types).

The files are read again at every build, and none of them is ever served. A key tilder does not read is ignored, except the few removed tables that stop the build with a message saying where their keys went (the command line).

Site

The [site] table: who the site is, where it lives, its language.

Key Default Meaning
site.name"my site"the wordmark, ~/my site; og:site_name; the WebSite of the structured data; the web manifest's name
site.url"https://example.org"the canonical origin, without a trailing slash: every absolute address the build writes starts with it
site.lang"en"the default language, served at the root: lang of the page, the feeds, the manifest
site.locale"en_GB"og:locale, for Open Graph
site.manual"My Site Manual"the centre of the man-page header rule, on the page and in the text mirror
site.updated2026-01-01a TOML date, not a string: the date in the footer rule, the feeds' lastBuildDate, the sitemap's last resort for <lastmod>
site.title_suffix" - my site"appended to every <title> that does not already contain site.name
site.languages[]every language served, the default (lang) first; empty: one language, no prefix

site.url must be the address the site is served at: the canonical links, og:url, the sitemaps, the feeds and the calendar are built from it. site.title_suffix is added only when the title does not name the site already, in any case: a page titled About my site keeps its title as it is.

[site]
name = "my site"
url = "https://example.org"
lang = "en"
locale = "en_GB"
manual = "My Site Manual"
updated = 2026-05-16
title_suffix = " - my site"
languages = ["en", "fr"]

Labels

The [labels] table: the words of the interface, many of them heard only through a screen reader. Translate them in site.<lang>.toml.

Key Default Meaning
labels.skip"skip to content"the skip link, first in the page (a layout placeholder)
labels.nav"Main navigation"the name of the navigation landmark (a layout placeholder)
labels.info"INFO"the label of an information callout, on the page and in the text mirror's box
labels.warning"WARNING"the label of a warning callout
labels.error"ERROR"the label of an error callout
labels.image"image"the text mirror's line for an image: [ image ] alt text
labels.task_done"done"a done item of a task list, read by screen readers
labels.task_todo"to do"an open item of a task list, read by screen readers
labels.to_top"↑ back to top"the link back to the top of the page (a layout placeholder)
labels.copy"copy"the copy button on code blocks, given to the theme's code.js
labels.copied"copied"the same button once it has copied
labels.external"external site"said by screen readers after an external link marked with the arrow, instead of the arrow
labels.new_tab"opens in a new tab"said by screen readers on a link that opens a new tab
labels.table"table"the name of a table's scrollable region
labels.toc"contents"the title of the [TOC] block; in capitals in the text mirror
labels.website"website"a member's own site, among the profile links
labels.languages"Languages"the name of the language switcher, {{ languages }}
labels.collection_nav"In this section"the name of the {{ collection_nav }} sidebar; a collection may set its own nav_label
labels.prev"previous"the label of {{ prev }}, and of the text mirror's line of a sequential type
labels.next"next"the label of {{ next }}, and of that line

The three callout labels also pick the colour of the callout's box in the coloured mirror: the box whose top rule carries labels.info follows text.accent, labels.warning is yellow, labels.error red (the text mirror). The layout placeholders work only where the theme's layout.html writes them, as the starter's does.

# content/site.fr.toml
[labels]
skip = "aller au contenu"
toc = "sommaire"
prev = "précédent"
next = "suivant"

Languages

The [languages] table is empty by default: it maps a language's code to the name the language switcher shows. A language without a name shows its code.

[languages]
en = "English"
fr = "Français"

The names are read from the default language's configuration only, so they are written once, in site.toml, each in its own language (languages).

SEO

The [seo] table: structured data, the default for robots, and the limits of the build's checks (SEO).

Key Default Meaning
seo.organization"My Site"the publisher: the Organization node of every page's structured data
seo.robots"index, follow, max-image-preview:large"<meta name="robots"> of a page that sets no robots:
seo.title_max60a <title> longer than this, suffix included, is a warning
seo.description_min50a description shorter than this is a warning
seo.description_max160a description longer than this is a warning
[seo]
organization = "Example Group"
title_max = 65

Sharing

The [share] table: the icons, the link preview and the web manifest. The icons are drawn at every build from assets/logo.svg, and share.png from the theme's share.svg, filled with values from here (feeds and images).

Key Default Meaning
share.logo_svg"logo.svg"the source of every icon, a file of assets/
share.image"share.png"the default preview's file, 1200x630, drawn from the theme's share.svg: the og:image of every page that sets no image:, when the theme has one
share.logo"icon-512.png"the logo of the structured data, and the preview of a theme without share.svg; the name of an icon the build draws
share.image_alt"my site"og:image:alt of a page that sets no image_alt:
share.card["a man-page website"]the preview's lines under the name, one or two: {{ card_1 }} and {{ card_2 }} in share.svg
share.theme_color"#0F6E68"the colour of the browser's interface: the manifest's theme_color, the starter's <meta name="theme-color">, and the preview
share.background_color"#FDF6E3"the manifest's background_color, and the preview's background
share.text_color"#073642"the preview's text
share.muted_color"#506C75"the preview's secondary text
share.rule_color"#DED7C3"the preview's rules
share.short_name"site"the manifest's short_name, the name under an icon on a home screen

The five colours are for the theme's share.svg, which reads them as {{ share.text_color }} and the like; a theme usually sets them in its theme.toml, to match its palette. Only theme_color and background_color are also written by the build itself, in the manifest.

[share]
image_alt = "~/my site"
card = ["meetups and talks", "in Exampleville"]
short_name = "mysite"

Collections

[collections.<name>] declares a folder of content/ whose files are items of one type (content types). Its keys are the type's settings, each listed on the type's page, plus these:

Key Default Meaning
type"post"the type: page, post, event, member, or one the theme adds
dirthe collection's namethe folder, under content/

From tilder 1.2, recursive = true makes the subfolders of dir sections of the collection, and their files its items, in the sidebar's tree (navigation). It is false unless the collection or its type's DEFAULTS sets it; a dated type, such as post or event, cannot be recursive, and the build stops if one is.

defaults.toml declares the three collections most sites have. Each one is inactive until its folder exists: no page, no feed, no calendar.

Key Default
collections.blog.type"post"
collections.blog.dir"blog"
collections.blog.feed"blog/feed.xml"
collections.events.type"event"
collections.events.dir"events"
collections.events.nav"events"
collections.events.feed"events.xml"
collections.events.calendar"calendar.ics"
collections.members.type"member"
collections.members.dir"members"

A site sets only what differs from them, or declares its own:

[collections.blog]
man = "MYSITE-BLOG(7)"
feed_title = "my site blog"

[collections.talks]
type = "event"
feed = "talks.xml"
calendar = "talks.ics"

The settings of each built-in type are on its page: post, event, member, page.

Dates

The [dates] table: how a date is written out in words, on a post's or an event's card and as the tagline of a post or an event.

Key Default Meaning
dates.weekdays["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]the days, Monday first
dates.months["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]the months, January first
dates.first"1"how the first day of a month is written
dates.format"{weekday} {day} {month} {year}"the pattern

dates.format takes four names in braces: {weekday}, {day} (the day's number, without a leading zero, or dates.first on the first of the month), {month} and {year}. With the defaults, 2026-11-21 is Saturday 21 November 2026. A French site writes "samedi 1er novembre":

# content/site.fr.toml
[dates]
weekdays = ["lundi", "mardi", "mercredi", "jeudi", "vendredi",
            "samedi", "dimanche"]
months = ["janvier", "février", "mars", "avril", "mai", "juin",
          "juillet", "août", "septembre", "octobre", "novembre",
          "décembre"]
first = "1er"
format = "{weekday} {day} {month} {year}"

Calendar

The [calendar] table: what every iCalendar file of the site shares, for the collections that set calendar (event).

Key Default Meaning
calendar.name"events"the calendar's name in calendar apps, and the end of each event's summary
calendar.description"Events."the calendar's description
calendar.prodid"-//site//events//EN"the product identifier, PRODID
calendar.timezone"UTC"the calendar's time zone
calendar.uid_domain"example.org"the domain of each event's identifier, <slug>@<uid_domain>: set your own
[calendar]
name = "my site events"
prodid = "-//example.org//events//EN"
uid_domain = "example.org"

Text

The [text] table: the coloured text mirror's colours.

Key Default Meaning
text.commands["curl"]the words that start a command line worth highlighting, in a code block of the coloured mirror
text.accent"cyan"the one accent colour of ansi/: links, [ tags ], list markers, inline code, command lines, the INFO box, and (in a highlighted code block) keywords and builtins

A code-block line that starts with one of text.commands, alone or after a prompt, $ or # and a space, is coloured in the accent in ansi/; txt/ has no colour at all (the text mirror).

text.accent is one of the eight colour names black, red, green, yellow, blue, magenta, cyan (the default), white, or a 256-colour index from 16 to 255, such as 208 for orange. Anything else stops the build. A site.<lang>.toml may set its own accent for that language.

[text]
commands = ["curl", "docker", "python3"]
accent = 208

Robots

Two tables, one per robots.txt the build writes (SEO).

Key Default Meaning
robots.disallow["/txt/", "/ansi/"]the site's robots.txt: the paths search engines are asked to leave out, the text mirrors
robots_man.disallow["/"]txt/robots.txt, the robots.txt of the plain-text host: everything

Each path becomes a Disallow: line; an empty list writes Allow: / instead. The site's robots.txt also points to sitemap.xml.

[robots]
disallow = ["/txt/", "/ansi/", "/drafts/"]

Theme checks

The [check] table is the theme's, read by build.py --check (tilder 1.2) and set in theme/theme.toml; content/site.toml may set it too, merged over the theme's as every other table: unstyled, the classes the theme leaves unstyled on purpose (default []); contrast, the pairs of colours to check (default [], nothing checked); contrast_min, the least ratio of every pair (default 4.5). Every key is described in checking a theme.

See also

↑ back to top