-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
One file per project, read by every cms command. Secrets never live here (the admin is configured by environment variables only — see Admin Panel).
| 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/"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"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"| 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.
| 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.
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.
Sardine CMS — multilingual, static-first CMS framework · Repository · Live demo · Apache-2.0