Skip to content

Configuration

pH7x Systems edited this page Jul 21, 2026 · 11 revisions

Configuration — sardine.toml

One file per project, read by every cms command. Secrets never live here (the admin is configured by environment variables only — see Admin Panel).

[site]

Key Required Default Meaning
name yes Site name (header brand, OG site name, JSON-LD)
base_url yes Canonical absolute base URL
source_language no en The language of every entry's source content (any registered pack tag); lives at the URL root and never doubles as a target
languages no ["pt-pt","es","fr","de"] Target languages for content parity; any activated language pack's tag is accepted
blog_path no "blog" URL segment for the blog
theme no "default" Theme name (entry-point discovery, e.g. ph7x-reference)
page_size no 10 Articles per listing page
footer_text no site name Footer line, e.g. "© 2026 Sardine Aerospace"
admin_url no unset Safe site-relative or explicit HTTP(S) admin link; active/scheme-relative URLs are rejected
organization no unset JSON-LD Organization payload (verbatim table)
[site]
name = "Sardine Aerospace"
base_url = "https://sardine.ph7x.com"
languages = ["pt-pt", "es", "fr", "de"]
theme = "ph7x-reference"
footer_text = "© 2026 Sardine Aerospace"
admin_url = "/admin/"

[site.categories.<slug>]

Localized labels for article categories. Categories used by articles must be declared (the known-categories validation rule enforces it).

[site.categories.missions]
en = "Missions"
pt-pt = "Missões"
es = "Misiones"
fr = "Missions"
de = "Missionen"

[site.labels.<key>]

Overrides for the localized UI-label system (cms_build.ui). Any label the themes consume can be overridden per language; unset languages fall back to EN, then to the built-in default. Useful keys: blog, search, back, min-read, blog-title, blog-eyebrow, blog-sub, admin, view-cards, view-list.

[site.labels.search]
en = "Search articles"
pt-pt = "Pesquisar artigos"

[storage]

Key Default Meaning
url sqlite:///content.sqlite3 Storage URL for create_storage (relative SQLite paths resolve against the project directory)

PostgreSQL: url = "postgresql://user:pass@host:5432/dbname" (install sardine-cms-core[postgres]). See Storage Backends.

[build]

Key Default Meaning
output _site Output directory for cms build / cms export
content_api false Also emit the versioned headless JSON under api/v1/ (Content API)

[build] image_widths = [480, 960] — opt-in responsive image derivatives (requires sardine-cms-build[images]); empty keeps the pipeline byte-identical to before.

[comments]

Optional (ADR-0031). Selects a comments provider registered by an activated extension and the HTTPS base URL of the discussions:

[comments]
provider = "provider-name"
url = "https://discuss.example"

With the table set, every article carries a localized no-JS link to its thread plus a same-origin <site-comments> island that contacts nothing before an explicit reader action. A provider no activated extension offers fails the build loudly; without the table, builds are byte-identical to a comments-less configuration.

[redirects] — a map of safe absolute source path to an internal or HTTP(S) destination ("/old/" = "/new/"). Traversal and server-directive metacharacters are rejected; SWA/nginx emit real 301s and every artifact carries a generic fallback page.

Clone this wiki locally