{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Cecil - Configuration",
  "home_page_url": "https://cecil.app/documentation/configuration/",
  "feed_url": "https://cecil.app/documentation/configuration/feed.json",
  "description": "Configure your website with the cecil.yml file.",
  "icon": "https://cecil.app/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "favicon": "https://cecil.app/thumbnails/64x/favicon.7ff4b89eec6dad139a7d2d6561543285.png",
  "language": "en",
  "items": [
    {
      "id": "https://cecil.app/documentation/configuration/site/",
      "url": "https://cecil.app/documentation/configuration/site/",
      "title": "Site options",
      "summary": "title, baseurl, menus, taxonomies, theme, date, metatags, debug, etc.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Site options\ntitle\nMain title of the site.\ntitle: \"&lt;site title&gt;\"\nbaseline\nShort description (~ 20 characters).\nbaseline: \"&lt;baseline&gt;\"\nbaseurl\nThe base URL.\nbaseurl: &lt;url&gt;\nExample:\nbaseurl: http:\/\/localhost:8000\/\nbaseurl should end with a trailing slash (\/).\ncanonicalurl\nIf set to true the url() function will return the absolute URL (false by default).\ncanonicalurl: &lt;true|false&gt; # false by default\ndescription\nSite description (~ 250 characters).\ndescription: \"&lt;description&gt;\"\nmenus\nMenus are used to create navigation links in templates.\nA menu is made up of a unique ID and entry properties (name, URL, weight).\nmenus:\n  &lt;name&gt;:\n    - id: &lt;unique-id&gt;   # unique identifier (required)\n      name: \"&lt;name&gt;\"    # name displayed in templates\n      url: &lt;url&gt;        # relative or absolute URL\n      weight: &lt;integer&gt; # integer value used to sort entries (lighter first)\nExample:\nmenus:\n  main:\n    - id: about\n      name: \"About\"\n      url: \/about\/\n      weight: 1\n  footer:\n    - id: author\n      name: The author\n      url: https:\/\/arnaudligny.fr\n      weight: 99\nA main menu is automatically created with the home page entry and all sections entries (See content management)\nA page can be added to a menu by setting the menu variable in its front matter.\nOverride an entry\nA page menu entry can be overridden: use the page ID as id.\nExample:\nmenus:\n  main:\n    - id: index\n      name: \"My amazing homepage!\"\n      weight: 1\nDisable an entry\nA menu entry can be disabled with enabled: false.\nExample:\nmenus:\n  main:\n    - id: about\n      enabled: false\ntaxonomies\nList of vocabularies, paired by plural and singular value.\ntaxonomies:\n  &lt;plural&gt;: &lt;singular&gt;\nExample:\ntaxonomies:\n  categories: category\n  tags: tag\nThen you can use those vocabularies in your content’s front matter.\nSince version 8.37.0, default vocabularies category and tag have been removed. You must define them in the configuration file if you want to use them.\nA vocabulary can be disabled with the special value disabled. Example: tags: disabled.\ntheme\nThe theme to use, or a list of themes.\ntheme: &lt;theme&gt; # theme name\n# or\ntheme:\n  - &lt;theme1&gt; # theme name\n  - &lt;theme2&gt;\nThe first theme overrides the others, and so on.\nExamples:\ntheme: hyde\ntheme:\n  - serviceworker\n  - hyde\nSee themes on GitHub or on website themes section.\ndate\nDate format and timezone.\ndate:\n  format: &lt;format&gt;     # date format (optional, `F j, Y` by default)\n  timezone: &lt;timezone&gt; # date timezone (optional, local time zone by default)\n\nformat: PHP date format specifier\ntimezone: see timezones\n\nExample:\ndate:\n  format: 'j F, Y'\n  timezone: 'Europe\/Paris'\nmetatags\nmetatags are SEO and social helpers that can be automatically injected in the &lt;head&gt;, with the template partials\/metatags.html.twig.\nThis template adds the following meta tags:\n\nPage title + Site title, or Site title + Site baseline\nPage\/Site description\nPage\/Site keywords\nPage\/Site author\nSearch engine crawler directives (robots)\nFavicon links\nNavigation links (first, previous, next, last)\nCanonical URL\nAlternate links (i.e.: RSS feed, others languages)\nrel=me links\nOpen Graph\nFacebook profile ID\nTwitter\/X Card\nFediverse tag\nDublin Core\nStructured data (JSON-LD)\n\nmetatags options\nCecil uses page front matter to feed meta tags, and falls back to site options when needed.\ntitle: \"Page\/Site title\"              # used by title meta\ndescription: \"Page\/Site description\"  # used by description meta\ntags: [tag1, tag2]                    # used by keywords meta\nkeywords: [keyword1, keyword2]        # obsolete\nauthor:                               # used by author meta\n  name: &lt;name&gt;                          # author name\n  url: &lt;url&gt;                            # author URL\n  email: &lt;email&gt;                        # author email\nimage: image.jpg                      # used by Open Graph and social networks cards\ncanonical:                            # used to override the generated canonical URL\n  url: &lt;URL&gt;                            # absolute URL\n  title: \"&lt;URL title&gt;\"                  # optional canonical title\nsocial:                               # used by social networks meta\n  twitter:                              # used by Twitter\/X Card\n    url: &lt;URL&gt;                            # used for `rel=me` link\n    site: username                        # site username\n    creator: username                     # page author username\n  mastodon:                             # used by Mastodon meta\n    url: &lt;URL&gt;                            # used for `rel=me` link\n    creator: handle                       # page author account\n  facebook:                             # used by Facebook meta\n    url: &lt;URL&gt;                            # used for `rel=me` link\n    id: 123456789                         # Facebook profile ID\n    username: username                    # page author username\nIf needed, title and image can be overridden:\n{{ include('partials\/metatags.html.twig', {title: 'Custom title', image: og_image}) }}\nmetatags configuration\nmetatags:\n  title:                   # title options\n    divider: \" &amp;middot; \"    # string between page title and site title\n    only: false              # displays page title only (`false` by default)\n    pagination:              # pagination options\n      shownumber: true         # displays page number in title (`true` by default)\n      label: \"Page %s\"         # how to display page number (`Page %s` by default)\n  robots: \"index,follow\"   # web crawlers directives (`index,follow` by default)\n  favicon:                 # favicon options\n    enabled: true            # includes favicon (`true` by default)\n    image: favicon.png       # path to favicon image\n    sizes:                   # sizes by device\n      - \"icon\": [32, 57, 76, 96, 128, 192, 228]  # web browsers\n      - \"shortcut icon\": [196]                   # Android\n      - \"apple-touch-icon\": [120, 152, 180]      # iOS\n  navigation: true         # includes previous and next links (`true` by default)\n  image: true              # includes image (`true` by default)\n  og: true                 # includes Open Graph meta tags (`true` by default)\n  articles: \"blog\"         # articles' section (`blog` by default)\n  twitter: true            # includes Twitter\/X Card meta tags (`true` by default)\n  mastodon: true           # includes Mastodon meta tags (`true` by default)\n  dc: false                # includes Dublin Core meta tags (`false` by default)\n  data: false              # includes JSON-LD structured data (`false` by default)\ndebug\nEnables the debug mode, used to display debug information like very verbose logs, Twig dump, Twig profiler, SCSS sourcemap, etc.\ndebug: true\nThere are two other ways to enable debug mode:\n\nRun a command with the -vvv option\nSet the CECIL_DEBUG environment variable to true\n\n",
      "content_html": "<h1>Site options</h1>\n<h2 id=\"title\">title</h2>\n<p>Main title of the site.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"&lt;site title&gt;\"</span></code></pre>\n<h2 id=\"baseline\">baseline</h2>\n<p>Short description (~ 20 characters).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">baseline:</span> <span class=\"hljs-string\">\"&lt;baseline&gt;\"</span></code></pre>\n<h2 id=\"baseurl\">baseurl</h2>\n<p>The base URL.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">baseurl:</span> <span class=\"hljs-string\">&lt;url&gt;</span></code></pre>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">baseurl:</span> <span class=\"hljs-string\">http://localhost:8000/</span></code></pre>\n<aside class=\"note note-important\"><p><code translate=\"no\">baseurl</code> should end with a trailing slash (<code translate=\"no\">/</code>).</p></aside>\n<h2 id=\"canonicalurl\">canonicalurl</h2>\n<p>If set to <code translate=\"no\">true</code> the <a href=\"../templates/reference/12-functions.md#url\"><code translate=\"no\">url()</code></a> function will return the absolute URL (<code translate=\"no\">false</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">canonicalurl:</span> <span class=\"hljs-string\">&lt;true|false&gt;</span> <span class=\"hljs-comment\"># false by default</span></code></pre>\n<h2 id=\"description\">description</h2>\n<p>Site description (~ 250 characters).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">description:</span> <span class=\"hljs-string\">\"&lt;description&gt;\"</span></code></pre>\n<h2 id=\"menus\">menus</h2>\n<p>Menus are used to create <a href=\"../templates/11-variables.md#site-menus\">navigation links in templates</a>.</p>\n<p>A menu is made up of a unique ID and entry properties (name, URL, weight).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-string\">&lt;name&gt;:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">&lt;unique-id&gt;</span>   <span class=\"hljs-comment\"># unique identifier (required)</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">\"&lt;name&gt;\"</span>    <span class=\"hljs-comment\"># name displayed in templates</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;url&gt;</span>        <span class=\"hljs-comment\"># relative or absolute URL</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-string\">&lt;integer&gt;</span> <span class=\"hljs-comment\"># integer value used to sort entries (lighter first)</span></code></pre>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">about</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">\"About\"</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">/about/</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">1</span>\n  <span class=\"hljs-attr\">footer:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">author</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">The</span> <span class=\"hljs-string\">author</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">https://arnaudligny.fr</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">99</span></code></pre>\n<aside class=\"note note-info\"><p>A <code translate=\"no\">main</code> menu is automatically created with the home page entry and all sections entries (<a href=\"../content/index.md\">See content management</a>)</p></aside>\n<aside class=\"note note-tip\"><p>A page can be added to a menu by setting the <a href=\"../content/6-front-matter.md#menu\"><code translate=\"no\">menu</code> variable</a> in its front matter.</p></aside>\n<h3 id=\"override-an-entry\">Override an entry</h3>\n<p>A page menu entry can be overridden: use the page ID as <code translate=\"no\">id</code>.</p>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">index</span>\n      <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">\"My amazing homepage!\"</span>\n      <span class=\"hljs-attr\">weight:</span> <span class=\"hljs-number\">1</span></code></pre>\n<h3 id=\"disable-an-entry\">Disable an entry</h3>\n<p>A menu entry can be disabled with <code translate=\"no\">enabled: false</code>.</p>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">menus:</span>\n  <span class=\"hljs-attr\">main:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">id:</span> <span class=\"hljs-string\">about</span>\n      <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<h2 id=\"taxonomies\">taxonomies</h2>\n<p>List of vocabularies, paired by plural and singular value.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">taxonomies:</span>\n  <span class=\"hljs-string\">&lt;plural&gt;:</span> <span class=\"hljs-string\">&lt;singular&gt;</span></code></pre>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">taxonomies:</span>\n  <span class=\"hljs-attr\">categories:</span> <span class=\"hljs-string\">category</span>\n  <span class=\"hljs-attr\">tags:</span> <span class=\"hljs-string\">tag</span></code></pre>\n<p>Then you can use those vocabularies in your content’s <a href=\"../content/6-front-matter.md#taxonomy\">front matter</a>.</p>\n<aside class=\"note note-warning\"><p>Since <ins>version 8.37.0</ins>, default vocabularies <code translate=\"no\">category</code> and <code translate=\"no\">tag</code> have been removed. You must define them in the configuration file if you want to use them.</p></aside>\n<aside class=\"note note-tip\"><p>A vocabulary can be disabled with the special value <code translate=\"no\">disabled</code>. Example: <code translate=\"no\">tags: disabled</code>.</p></aside>\n<h2 id=\"theme\">theme</h2>\n<p>The theme to use, or a list of themes.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">theme:</span> <span class=\"hljs-string\">&lt;theme&gt;</span> <span class=\"hljs-comment\"># theme name</span>\n<span class=\"hljs-comment\"># or</span>\n<span class=\"hljs-attr\">theme:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&lt;theme1&gt;</span> <span class=\"hljs-comment\"># theme name</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&lt;theme2&gt;</span></code></pre>\n<aside class=\"note note-info\"><p>The first theme overrides the others, and so on.</p></aside>\n<p><em>Examples:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">theme:</span> <span class=\"hljs-string\">hyde</span></code></pre>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">theme:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">serviceworker</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">hyde</span></code></pre>\n<aside class=\"note note-info\"><p>See <a href=\"https://github.com/Cecilapp?q=theme#org-repositories\" target=\"_blank\" rel=\"noopener noreferrer\">themes on GitHub</a> or on website <a href=\"https://cecil.app/themes/\">themes section</a>.</p></aside>\n<h2 id=\"date\">date</h2>\n<p>Date format and timezone.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">date:</span>\n  <span class=\"hljs-attr\">format:</span> <span class=\"hljs-string\">&lt;format&gt;</span>     <span class=\"hljs-comment\"># date format (optional, `F j, Y` by default)</span>\n  <span class=\"hljs-attr\">timezone:</span> <span class=\"hljs-string\">&lt;timezone&gt;</span> <span class=\"hljs-comment\"># date timezone (optional, local time zone by default)</span></code></pre>\n<ul>\n<li><code translate=\"no\">format</code>: <a href=\"https://php.net/date\" target=\"_blank\" rel=\"noopener noreferrer\">PHP date</a> format specifier</li>\n<li><code translate=\"no\">timezone</code>: see <a href=\"https://php.net/timezones\" target=\"_blank\" rel=\"noopener noreferrer\">timezones</a></li>\n</ul>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">date:</span>\n  <span class=\"hljs-attr\">format:</span> <span class=\"hljs-string\">'j F, Y'</span>\n  <span class=\"hljs-attr\">timezone:</span> <span class=\"hljs-string\">'Europe/Paris'</span></code></pre>\n<h2 id=\"metatags\">metatags</h2>\n<p><em>metatags</em> are SEO and social helpers that can be automatically injected in the <code translate=\"no\">&lt;head&gt;</code>, with the template <a href=\"https://github.com/Cecilapp/Cecil/blob/main/resources/layouts/partials/metatags.html.twig\" target=\"_blank\" rel=\"noopener noreferrer\"><code translate=\"no\">partials/metatags.html.twig</code></a>.</p>\n<p>This template adds the following meta tags:</p>\n<ul>\n<li>Page title + Site title, or Site title + Site baseline</li>\n<li>Page/Site description</li>\n<li>Page/Site keywords</li>\n<li>Page/Site author</li>\n<li>Search engine crawler directives (<em>robots</em>)</li>\n<li>Favicon links</li>\n<li>Navigation links (first, previous, next, last)</li>\n<li>Canonical URL</li>\n<li>Alternate links (i.e.: RSS feed, others languages)</li>\n<li><a href=\"https://developer.mozilla.org/docs/Web/HTML/Reference/Attributes/rel/me\" target=\"_blank\" rel=\"noopener noreferrer\"><code translate=\"no\">rel=me</code></a> links</li>\n<li><a href=\"https://ogp.me\" target=\"_blank\" rel=\"noopener noreferrer\">Open Graph</a></li>\n<li>Facebook profile ID</li>\n<li><a href=\"https://developer.x.com/docs/x-for-websites/cards/guides/getting-started\" target=\"_blank\" rel=\"noopener noreferrer\">Twitter/X Card</a></li>\n<li><a href=\"https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/\" target=\"_blank\" rel=\"noopener noreferrer\">Fediverse tag</a></li>\n<li><a href=\"https://www.dublincore.org/specifications/dublin-core/dcmi-terms/\" target=\"_blank\" rel=\"noopener noreferrer\">Dublin Core</a></li>\n<li><a href=\"https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data\" target=\"_blank\" rel=\"noopener noreferrer\">Structured data</a> (JSON-LD)</li>\n</ul>\n<h3 id=\"metatags-options\">metatags options</h3>\n<p>Cecil uses page front matter to feed meta tags, and falls back to site options when needed.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"Page/Site title\"</span>              <span class=\"hljs-comment\"># used by title meta</span>\n<span class=\"hljs-attr\">description:</span> <span class=\"hljs-string\">\"Page/Site description\"</span>  <span class=\"hljs-comment\"># used by description meta</span>\n<span class=\"hljs-attr\">tags:</span> <span class=\"hljs-string\">[tag1,</span> <span class=\"hljs-string\">tag2]</span>                    <span class=\"hljs-comment\"># used by keywords meta</span>\n<span class=\"hljs-attr\">keywords:</span> <span class=\"hljs-string\">[keyword1,</span> <span class=\"hljs-string\">keyword2]</span>        <span class=\"hljs-comment\"># obsolete</span>\n<span class=\"hljs-attr\">author:</span>                               <span class=\"hljs-comment\"># used by author meta</span>\n  <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">&lt;name&gt;</span>                          <span class=\"hljs-comment\"># author name</span>\n  <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;url&gt;</span>                            <span class=\"hljs-comment\"># author URL</span>\n  <span class=\"hljs-attr\">email:</span> <span class=\"hljs-string\">&lt;email&gt;</span>                        <span class=\"hljs-comment\"># author email</span>\n<span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">image.jpg</span>                      <span class=\"hljs-comment\"># used by Open Graph and social networks cards</span>\n<span class=\"hljs-attr\">canonical:</span>                            <span class=\"hljs-comment\"># used to override the generated canonical URL</span>\n  <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># absolute URL</span>\n  <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"&lt;URL title&gt;\"</span>                  <span class=\"hljs-comment\"># optional canonical title</span>\n<span class=\"hljs-attr\">social:</span>                               <span class=\"hljs-comment\"># used by social networks meta</span>\n  <span class=\"hljs-attr\">twitter:</span>                              <span class=\"hljs-comment\"># used by Twitter/X Card</span>\n    <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># used for `rel=me` link</span>\n    <span class=\"hljs-attr\">site:</span> <span class=\"hljs-string\">username</span>                        <span class=\"hljs-comment\"># site username</span>\n    <span class=\"hljs-attr\">creator:</span> <span class=\"hljs-string\">username</span>                     <span class=\"hljs-comment\"># page author username</span>\n  <span class=\"hljs-attr\">mastodon:</span>                             <span class=\"hljs-comment\"># used by Mastodon meta</span>\n    <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># used for `rel=me` link</span>\n    <span class=\"hljs-attr\">creator:</span> <span class=\"hljs-string\">handle</span>                       <span class=\"hljs-comment\"># page author account</span>\n  <span class=\"hljs-attr\">facebook:</span>                             <span class=\"hljs-comment\"># used by Facebook meta</span>\n    <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">&lt;URL&gt;</span>                            <span class=\"hljs-comment\"># used for `rel=me` link</span>\n    <span class=\"hljs-attr\">id:</span> <span class=\"hljs-number\">123456789</span>                         <span class=\"hljs-comment\"># Facebook profile ID</span>\n    <span class=\"hljs-attr\">username:</span> <span class=\"hljs-string\">username</span>                    <span class=\"hljs-comment\"># page author username</span></code></pre>\n<aside class=\"note note-tip\"><p>If needed, <code translate=\"no\">title</code> and <code translate=\"no\">image</code> can be overridden:</p>\n<pre><code class=\"language-twig hljs twig\" translate=\"no\"><span class=\"hljs-template-variable\">{{ <span class=\"hljs-name\">include</span><span class=\"hljs-params\">('partials/metatags.html.twig', {title: 'Custom title', image: og_image})</span> }}</span></code></pre></aside>\n<h3 id=\"metatags-configuration\">metatags configuration</h3>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">metatags:</span>\n  <span class=\"hljs-attr\">title:</span>                   <span class=\"hljs-comment\"># title options</span>\n    <span class=\"hljs-attr\">divider:</span> <span class=\"hljs-string\">\" &amp;middot; \"</span>    <span class=\"hljs-comment\"># string between page title and site title</span>\n    <span class=\"hljs-attr\">only:</span> <span class=\"hljs-literal\">false</span>              <span class=\"hljs-comment\"># displays page title only (`false` by default)</span>\n    <span class=\"hljs-attr\">pagination:</span>              <span class=\"hljs-comment\"># pagination options</span>\n      <span class=\"hljs-attr\">shownumber:</span> <span class=\"hljs-literal\">true</span>         <span class=\"hljs-comment\"># displays page number in title (`true` by default)</span>\n      <span class=\"hljs-attr\">label:</span> <span class=\"hljs-string\">\"Page %s\"</span>         <span class=\"hljs-comment\"># how to display page number (`Page %s` by default)</span>\n  <span class=\"hljs-attr\">robots:</span> <span class=\"hljs-string\">\"index,follow\"</span>   <span class=\"hljs-comment\"># web crawlers directives (`index,follow` by default)</span>\n  <span class=\"hljs-attr\">favicon:</span>                 <span class=\"hljs-comment\"># favicon options</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>            <span class=\"hljs-comment\"># includes favicon (`true` by default)</span>\n    <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">favicon.png</span>       <span class=\"hljs-comment\"># path to favicon image</span>\n    <span class=\"hljs-attr\">sizes:</span>                   <span class=\"hljs-comment\"># sizes by device</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">\"icon\":</span> <span class=\"hljs-string\">[32,</span> <span class=\"hljs-number\">57</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">76</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">96</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">128</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">192</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">228</span><span class=\"hljs-string\">]</span>  <span class=\"hljs-comment\"># web browsers</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">\"shortcut icon\":</span> <span class=\"hljs-string\">[196]</span>                   <span class=\"hljs-comment\"># Android</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">\"apple-touch-icon\":</span> <span class=\"hljs-string\">[120,</span> <span class=\"hljs-number\">152</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">180</span><span class=\"hljs-string\">]</span>      <span class=\"hljs-comment\"># iOS</span>\n  <span class=\"hljs-attr\">navigation:</span> <span class=\"hljs-literal\">true</span>         <span class=\"hljs-comment\"># includes previous and next links (`true` by default)</span>\n  <span class=\"hljs-attr\">image:</span> <span class=\"hljs-literal\">true</span>              <span class=\"hljs-comment\"># includes image (`true` by default)</span>\n  <span class=\"hljs-attr\">og:</span> <span class=\"hljs-literal\">true</span>                 <span class=\"hljs-comment\"># includes Open Graph meta tags (`true` by default)</span>\n  <span class=\"hljs-attr\">articles:</span> <span class=\"hljs-string\">\"blog\"</span>         <span class=\"hljs-comment\"># articles' section (`blog` by default)</span>\n  <span class=\"hljs-attr\">twitter:</span> <span class=\"hljs-literal\">true</span>            <span class=\"hljs-comment\"># includes Twitter/X Card meta tags (`true` by default)</span>\n  <span class=\"hljs-attr\">mastodon:</span> <span class=\"hljs-literal\">true</span>           <span class=\"hljs-comment\"># includes Mastodon meta tags (`true` by default)</span>\n  <span class=\"hljs-attr\">dc:</span> <span class=\"hljs-literal\">false</span>                <span class=\"hljs-comment\"># includes Dublin Core meta tags (`false` by default)</span>\n  <span class=\"hljs-attr\">data:</span> <span class=\"hljs-literal\">false</span>              <span class=\"hljs-comment\"># includes JSON-LD structured data (`false` by default)</span></code></pre>\n<h2 id=\"debug\">debug</h2>\n<p>Enables the <em>debug mode</em>, used to display debug information like very verbose logs, Twig dump, Twig profiler, SCSS sourcemap, etc.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">debug:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<p>There are two other ways to enable <em>debug mode</em>:</p>\n<ol>\n<li>Run a command with the <code translate=\"no\">-vvv</code> option</li>\n<li>Set the <code translate=\"no\">CECIL_DEBUG</code> environment variable to <code translate=\"no\">true</code></li>\n</ol>\n<hr>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/languages/",
      "url": "https://cecil.app/documentation/configuration/languages/",
      "title": "Languages",
      "summary": "Main language and additional languages of a multilingual website.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Languages\nlanguage\nThe main language, defined by its code.\nlanguage: &lt;code&gt; # unique code (`en` by default)\nBy default only others languages pages path are prefixed with its language code, but you can prefix the path of the main language pages with the following option:\n#language: &lt;code&gt;\nlanguage:\n  code: &lt;code&gt;\n  prefix: true\nWhen prefix is set to true, an alias is automatically created for the home page that redirect from\/ to \/&lt;code&gt;\/.\nlanguages\nOptions of available languages, used for pages and templates localization.\nlanguages:\n  - code: &lt;code&gt;          # unique code (e.g.: `en`, `fr`, 'en-US', `fr-CA`)\n    name: &lt;name&gt;          # human readable name (e.g.: `Français`)\n    locale: &lt;locale&gt;      # locale code (`language_COUNTRY`, e.g.: `en_US`, `fr_FR`, `fr_CA`)\n    enabled: &lt;true|false&gt; # enabled or not (`true` by default)\nExample:\nlanguage: en\nlanguages:\n  - code: en\n    name: English\n    locale: en_US\n  - code: fr\n    name: Français\n    locale: fr_FR\nA locale code list is available if needed.\nLocalize\nTo localize configuration options you must store them under the config key of the language.\nExample:\ntitle: \"Cecil in english\"\nlanguages:\n  - code: en\n    name: English\n    locale: en_US\n  - code: fr\n    name: Français\n    locale: fr_FR\n    config:\n      title: \"Cecil en français\"\nIn templates you can access to an option with {{ site.&lt;option&gt; }}, for example {{ site.title }}.\nIf an option is not available in the current language (e.g.: fr) it fallback to the global one (e.g.: en).",
      "content_html": "<h1>Languages</h1>\n<h2 id=\"language\">language</h2>\n<p>The main language, defined by its code.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">&lt;code&gt;</span> <span class=\"hljs-comment\"># unique code (`en` by default)</span></code></pre>\n<p>By default only others <a href=\"#languages\">languages</a> pages path are prefixed with its language code, but you can prefix the path of the main language pages with the following option:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-comment\">#language: &lt;code&gt;</span>\n<span class=\"hljs-attr\">language:</span>\n  <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">&lt;code&gt;</span>\n  <span class=\"hljs-attr\">prefix:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<aside class=\"note note-info\"><p>When <code translate=\"no\">prefix</code> is set to <code translate=\"no\">true</code>, an alias is automatically created for the home page that redirect from<code translate=\"no\">/</code> to <code translate=\"no\">/&lt;code&gt;/</code>.</p></aside>\n<h2 id=\"languages\">languages</h2>\n<p>Options of available languages, used for <a href=\"../content/8-multilingual.md\">pages</a> and <a href=\"../templates/16-localization.md\">templates</a> localization.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">&lt;code&gt;</span>          <span class=\"hljs-comment\"># unique code (e.g.: `en`, `fr`, 'en-US', `fr-CA`)</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">&lt;name&gt;</span>          <span class=\"hljs-comment\"># human readable name (e.g.: `Français`)</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">&lt;locale&gt;</span>      <span class=\"hljs-comment\"># locale code (`language_COUNTRY`, e.g.: `en_US`, `fr_FR`, `fr_CA`)</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-string\">&lt;true|false&gt;</span> <span class=\"hljs-comment\"># enabled or not (`true` by default)</span></code></pre>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">en</span>\n<span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">en</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">English</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">en_US</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">fr</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">Français</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">fr_FR</span></code></pre>\n<aside class=\"note note-info\"><p>A <a href=\"24-locale-codes.md\">locale code list</a> is available if needed.</p></aside>\n<h3 id=\"localize\">Localize</h3>\n<p>To localize configuration options you must store them under the <code translate=\"no\">config</code> key of the language.</p>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"Cecil in english\"</span>\n<span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">en</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">English</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">en_US</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">fr</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">Français</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">fr_FR</span>\n    <span class=\"hljs-attr\">config:</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">\"Cecil en français\"</span></code></pre>\n<aside class=\"note note-info\"><p>In <a href=\"../templates/index.md\">templates</a> you can access to an option with <code translate=\"no\">{{ site.&lt;option&gt; }}</code>, for example <code translate=\"no\">{{ site.title }}</code>.<br>\nIf an option is not available in the current language (e.g.: <code translate=\"no\">fr</code>) it fallback to the global one (e.g.: <code translate=\"no\">en</code>).</p></aside>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/pages/",
      "url": "https://cecil.app/documentation/configuration/pages/",
      "title": "Pages",
      "summary": "Pages directory, sorting, pagination, paths, body, virtual pages, generators, etc.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Pages\npages.dir\nDirectory source of pages (pages by default).\npages:\n  dir: pages\npages.ext\nExtensions of pages files.\npages:\n  ext: [md, markdown, mdown, mkdn, mkd, text, txt]\npages.exclude\nDirectories, paths and files name to exclude (accepts globs, strings and regexes).\npages:\n  exclude: ['vendor', 'node_modules', '*.scss', '\/\\.bck$\/']\npages.prefix.separator\nList of characters used as separator between a filename prefix (date or weight) and the slug.\npages:\n  prefix:\n    separator: ['-', '_']\npages.sortby\nDefault collections sort method.\npages:\n  sortby: date # `date`, `updated`, `title` or `weight`\n  # or\n  sortby:\n    variable: date    # `date`, `updated`, `title` or `weight`\n    desc_title: false # sort by title in descending order\n    reverse: false    # reverse the sort order\npages.pagination\nPagination is available for list pages (type is homepage, section or term).\npages:\n  pagination:\n    max: 5     # maximum number of entries per page\n    path: page # path to the paginated page\nDisable pagination\nPagination can be disabled:\npages:\n  pagination: false\npages.paths\nApply a custom path for all pages of a Section.\npages:\n  paths:\n    - section: &lt;section’s ID&gt;\n      path: &lt;path of pages&gt;\nPath placeholders\n\n:year\n:month\n:day\n:section\n:slug\n\nExample:\npages:\n  paths:\n    - section: Blog\n      path: :section\/:year\/:month\/:day\/:slug # e.g.: \/blog\/2020\/12\/01\/my-post\/\n# localized\nlanguages:\n  - code: fr\n    name: Français\n    locale: fr_FR\n    config:\n      pages:\n        paths:\n          - section: Blog\n            path: blogue\/:year\/:month\/:day\/:slug # e.g.: \/blogue\/2020\/12\/01\/mon-billet\/\npages.frontmatter\nPage front matter format (yaml by default, also accepts ini, toml and json).\npages:\n  frontmatter: yaml\npages.body\nPage body options.\nTo know how those options impacts your content see Content &gt; Markdown documentation.\npages.body.toc\nHeaders used to build the table of contents ([h2, h3] by default).\npages:\n  body:\n    toc: [h2, h3]\npages.body.highlight\nEnables code syntax highlighting (true by default).\npages:\n  body:\n    highlight: false # set to false to disable syntax highlighting\npages.body.images\nImages handling options.\npages:\n  body:\n    images:\n      formats: []       # adds alternative image formats as `source` (e.g. `[avif, webp]`, empty array by default)\n      resize: 0         # resizes all images to &lt;width&gt; (in pixels, `0` to disable)\n      responsive: false # adds responsive image variants to the `srcset` attribute (`false` by default)\n      lazy: true        # adds `loading=\"lazy\"` attribute (`true` by default)\n      decoding: true    # adds `decoding=\"async\"` attribute (`true` by default)\n      caption: false    # puts the image in a &lt;figure&gt; element and adds a &lt;figcaption&gt; containing the title (`false` by default)\n      placeholder: ''   # fills the &lt;img&gt; background before loading ('color' or 'lqip', empty by default)\n      class: ''         # sets a default class on each image (empty by default)\n      dark_suffix: ''   # suffix of the dark variant image (e.g. `.dark`), disabled by default\n      mobile_suffix: '' # suffix of the mobile variant image (e.g. `.mobile`), disabled by default\n      mobile_media_query: '(max-width: 767px)' # media query of the mobile variant `&lt;source&gt;`\n      remote:           # remote image handling (set to `false` to disable)\n        fallback:         # path to the fallback image, stored in assets dir (empty by default)\nSince version 8.41.0, the pages.body.images.resize option is used to resize images to a specific width, no more to enable the resize feature (enabled systematically).\nGlobal options, like responsives images widths and sizes, are configurable in the assets.images section.\nRemote images are downloaded and converted into Assets to be manipulated. You can disable this behavior by setting the option pages.body.images.remote.enabled to false.\nWhen dark_suffix is set (e.g. dark_suffix: .dark), Cecil automatically looks for a dark variant of each image (e.g. photo.dark.jpg alongside photo.jpg). If found, the image is wrapped in a &lt;picture&gt; element with a &lt;source media=\"(prefers-color-scheme: dark)\"&gt; for automatic light\/dark theme switching. Works in combination with formats and responsive.\nIn the same way, when mobile_suffix is set (e.g. mobile_suffix: .mobile), Cecil looks for a mobile variant of each image (e.g. photo.mobile.jpg alongside photo.jpg) and adds a &lt;source&gt; element with the mobile_media_query media query ((max-width: 767px) by default). If dark_suffix is also set, the dark variant of the mobile image (e.g. photo.mobile.dark.jpg) is used on mobile with dark color scheme. Mobile sources are placed before dark sources, so that a mobile variant takes precedence.\npages.body.links\nLinks handling options.\npages:\n  body:\n    links:\n      embed:\n        enabled: false     # turns links in embedded content if possible (`false` by default)\n        video: [mp4, webm] # video files extensions\n        audio: [mp3]       # audio files extensions\n      external:\n        blank: false     # if true open external link in new tab\n        noopener: true   # if true add \"noopener\" to `rel` attribute\n        noreferrer: true # if true add \"noreferrer\" to `rel` attribute\n        nofollow: false  # if true add \"nofollow\" to `rel` attribute\npages.body.excerpt\nExcerpt handling options.\npages:\n  body:\n    excerpt:\n      separator: excerpt|break # string to use as separator (`excerpt|break` by default)\n      capture: before          # part to capture, `before` or `after` the separator (`before` by default)\npages.virtual\nVirtual pages is the best way to create pages without content (front matter only).\nIt consists of a list of pages with a path and some front matter variables.\nExample:\npages:\n  virtual:\n    - path: code\n      redirect: https:\/\/github.com\/ArnaudLigny\npages.default\nDefault pages are pages created automatically by Cecil (from built-in templates):\npages:\n  default:\n    index:\n      path: ''\n      title: Home\n      published: true\n    404:\n      path: 404\n      title: Page not found\n      layout: 404\n      uglyurl: true\n      published: true\n      excluded: true\n    robots:\n      path: robots\n      title: Robots.txt\n      layout: robots\n      output: txt\n      published: true\n      excluded: true\n      multilingual: false\n    sitemap:\n      path: sitemap\n      title: XML sitemap\n      layout: sitemap\n      output: xml\n      changefreq: monthly\n      priority: 0.5\n      published: true\n      excluded: true\n      multilingual: false\n    xsl\/atom:\n      path: xsl\/atom\n      layout: feed\n      output: xsl\n      uglyurl: true\n      published: true\n      excluded: true\n    xsl\/rss:\n      path: xsl\/rss\n      layout: feed\n      output: xsl\n      uglyurl: true\n      published: false\n      excluded: true\nThe structure is almost identical of pages.virtual, except the named key.\nEach one can be:\n\ndisabled: published: false\nexcluded from list pages: excluded: true\nexcluded from localization: multilingual: false\n\nSince version 8.68.0 you can override the default robots.txt page by creating a page with the same path:\npages\/robots.md\n---\nlayout: robots\noutput: txt\n---\nUser-agent: AI-bot\nDisallow: \/\npages.generators\nGenerators are used by Cecil to create additional pages (e.g.: sitemap, feed, pagination, etc.) from existing pages, or from other sources like the configuration file or external sources.\nBelow the list of Generators provided by Cecil, in a defined order:\npages:\n  generators:\n    10: 'Cecil\\Generator\\DefaultPages'\n    20: 'Cecil\\Generator\\VirtualPages'\n    30: 'Cecil\\Generator\\ExternalBody'\n    40: 'Cecil\\Generator\\Section'\n    50: 'Cecil\\Generator\\Taxonomy'\n    60: 'Cecil\\Generator\\Homepage'\n    70: 'Cecil\\Generator\\Pagination'\n    80: 'Cecil\\Generator\\Alias'\n    90: 'Cecil\\Generator\\Redirect'\nYou can extend Cecil with Pages generator.\npages.subsets\nSubsets are used to render a part of the pages collection, based on a specific path, language or output format, with the command:\ncecil build --render-subset=&lt;name&gt;\npages:\n  subsets:\n    &lt;name&gt;:\n      path: &lt;path&gt; # glob or string path (e.g.: `blog\/*`, `blog`)\n      language: &lt;language&gt; # language code (e.g.: `en`, `fr`)\n      output: &lt;output&gt; # output format (e.g.: `html`, `atom`)\nExample:\npages:\n  subsets:\n    blog_en:\n      path: blog\n      language: en\n      output: html\n    search_index:\n      path: '*'\n      output: json\n",
      "content_html": "<h1>Pages</h1>\n<h2 id=\"pages-dir\">pages.dir</h2>\n<p>Directory source of pages (<code translate=\"no\">pages</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">pages</span></code></pre>\n<h2 id=\"pages-ext\">pages.ext</h2>\n<p>Extensions of pages files.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[md,</span> <span class=\"hljs-string\">markdown,</span> <span class=\"hljs-string\">mdown,</span> <span class=\"hljs-string\">mkdn,</span> <span class=\"hljs-string\">mkd,</span> <span class=\"hljs-string\">text,</span> <span class=\"hljs-string\">txt]</span></code></pre>\n<h2 id=\"pages-exclude\">pages.exclude</h2>\n<p>Directories, paths and files name to exclude (accepts globs, strings and regexes).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['vendor',</span> <span class=\"hljs-string\">'node_modules'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'/\\.bck$/'</span><span class=\"hljs-string\">]</span></code></pre>\n<h2 id=\"pages-prefix-separator\">pages.prefix.separator</h2>\n<p>List of characters used as separator between a filename prefix (<code translate=\"no\">date</code> or <code translate=\"no\">weight</code>) and the slug.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">prefix:</span>\n    <span class=\"hljs-attr\">separator:</span> <span class=\"hljs-string\">['-',</span> <span class=\"hljs-string\">'_'</span><span class=\"hljs-string\">]</span></code></pre>\n<h2 id=\"pages-sortby\">pages.sortby</h2>\n<p>Default collections sort method.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">sortby:</span> <span class=\"hljs-string\">date</span> <span class=\"hljs-comment\"># `date`, `updated`, `title` or `weight`</span>\n  <span class=\"hljs-comment\"># or</span>\n  <span class=\"hljs-attr\">sortby:</span>\n    <span class=\"hljs-attr\">variable:</span> <span class=\"hljs-string\">date</span>    <span class=\"hljs-comment\"># `date`, `updated`, `title` or `weight`</span>\n    <span class=\"hljs-attr\">desc_title:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># sort by title in descending order</span>\n    <span class=\"hljs-attr\">reverse:</span> <span class=\"hljs-literal\">false</span>    <span class=\"hljs-comment\"># reverse the sort order</span></code></pre>\n<h2 id=\"pages-pagination\">pages.pagination</h2>\n<p>Pagination is available for list pages (<em>type</em> is <code translate=\"no\">homepage</code>, <code translate=\"no\">section</code> or <code translate=\"no\">term</code>).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">pagination:</span>\n    <span class=\"hljs-attr\">max:</span> <span class=\"hljs-number\">5</span>     <span class=\"hljs-comment\"># maximum number of entries per page</span>\n    <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">page</span> <span class=\"hljs-comment\"># path to the paginated page</span></code></pre>\n<h3 id=\"disable-pagination\">Disable pagination</h3>\n<p>Pagination can be disabled:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">pagination:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<h2 id=\"pages-paths\">pages.paths</h2>\n<p>Apply a custom <a href=\"../content/6-front-matter.md#predefined-variables\"><code translate=\"no\">path</code></a> for all pages of a <strong><em>Section</em></strong>.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">paths:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">&lt;section’s</span> <span class=\"hljs-string\">ID&gt;</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">&lt;path</span> <span class=\"hljs-string\">of</span> <span class=\"hljs-string\">pages&gt;</span></code></pre>\n<h3 id=\"path-placeholders\">Path placeholders</h3>\n<ul>\n<li><code translate=\"no\">:year</code></li>\n<li><code translate=\"no\">:month</code></li>\n<li><code translate=\"no\">:day</code></li>\n<li><code translate=\"no\">:section</code></li>\n<li><code translate=\"no\">:slug</code></li>\n</ul>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">paths:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">Blog</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">:section/:year/:month/:day/:slug</span> <span class=\"hljs-comment\"># e.g.: /blog/2020/12/01/my-post/</span>\n<span class=\"hljs-comment\"># localized</span>\n<span class=\"hljs-attr\">languages:</span>\n  <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">code:</span> <span class=\"hljs-string\">fr</span>\n    <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">Français</span>\n    <span class=\"hljs-attr\">locale:</span> <span class=\"hljs-string\">fr_FR</span>\n    <span class=\"hljs-attr\">config:</span>\n      <span class=\"hljs-attr\">pages:</span>\n        <span class=\"hljs-attr\">paths:</span>\n          <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">Blog</span>\n            <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">blogue/:year/:month/:day/:slug</span> <span class=\"hljs-comment\"># e.g.: /blogue/2020/12/01/mon-billet/</span></code></pre>\n<h2 id=\"pages-frontmatter\">pages.frontmatter</h2>\n<p>Page front matter format (<code translate=\"no\">yaml</code> by default, also accepts <code translate=\"no\">ini</code>, <code translate=\"no\">toml</code> and <code translate=\"no\">json</code>).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">frontmatter:</span> <span class=\"hljs-string\">yaml</span></code></pre>\n<h2 id=\"pages-body\">pages.body</h2>\n<p>Page body options.</p>\n<aside class=\"note note-info\"><p>To know how those options impacts your content see <em><a href=\"../content/7-markdown.md\">Content &gt; Markdown</a></em> documentation.</p></aside>\n<h3 id=\"pages-body-toc\">pages.body.toc</h3>\n<p>Headers used to build the table of contents (<code translate=\"no\">[h2, h3]</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">toc:</span> <span class=\"hljs-string\">[h2,</span> <span class=\"hljs-string\">h3]</span></code></pre>\n<h3 id=\"pages-body-highlight\">pages.body.highlight</h3>\n<p>Enables code syntax highlighting (<code translate=\"no\">true</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">highlight:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># set to false to disable syntax highlighting</span></code></pre>\n<h3 id=\"pages-body-images\">pages.body.images</h3>\n<p>Images handling options.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">images:</span>\n      <span class=\"hljs-attr\">formats:</span> <span class=\"hljs-string\">[]</span>       <span class=\"hljs-comment\"># adds alternative image formats as `source` (e.g. `[avif, webp]`, empty array by default)</span>\n      <span class=\"hljs-attr\">resize:</span> <span class=\"hljs-number\">0</span>         <span class=\"hljs-comment\"># resizes all images to &lt;width&gt; (in pixels, `0` to disable)</span>\n      <span class=\"hljs-attr\">responsive:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># adds responsive image variants to the `srcset` attribute (`false` by default)</span>\n      <span class=\"hljs-attr\">lazy:</span> <span class=\"hljs-literal\">true</span>        <span class=\"hljs-comment\"># adds `loading=\"lazy\"` attribute (`true` by default)</span>\n      <span class=\"hljs-attr\">decoding:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># adds `decoding=\"async\"` attribute (`true` by default)</span>\n      <span class=\"hljs-attr\">caption:</span> <span class=\"hljs-literal\">false</span>    <span class=\"hljs-comment\"># puts the image in a &lt;figure&gt; element and adds a &lt;figcaption&gt; containing the title (`false` by default)</span>\n      <span class=\"hljs-attr\">placeholder:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># fills the &lt;img&gt; background before loading ('color' or 'lqip', empty by default)</span>\n      <span class=\"hljs-attr\">class:</span> <span class=\"hljs-string\">''</span>         <span class=\"hljs-comment\"># sets a default class on each image (empty by default)</span>\n      <span class=\"hljs-attr\">dark_suffix:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># suffix of the dark variant image (e.g. `.dark`), disabled by default</span>\n      <span class=\"hljs-attr\">mobile_suffix:</span> <span class=\"hljs-string\">''</span> <span class=\"hljs-comment\"># suffix of the mobile variant image (e.g. `.mobile`), disabled by default</span>\n      <span class=\"hljs-attr\">mobile_media_query:</span> <span class=\"hljs-string\">'(max-width: 767px)'</span> <span class=\"hljs-comment\"># media query of the mobile variant `&lt;source&gt;`</span>\n      <span class=\"hljs-attr\">remote:</span>           <span class=\"hljs-comment\"># remote image handling (set to `false` to disable)</span>\n        <span class=\"hljs-attr\">fallback:</span>         <span class=\"hljs-comment\"># path to the fallback image, stored in assets dir (empty by default)</span></code></pre>\n<aside class=\"note note-warning\"><p>Since version <ins>8.41.0</ins>, the <code translate=\"no\">pages.body.images.resize</code> option is used to resize images to a specific width, no more to enable the resize feature (enabled systematically).</p></aside>\n<aside class=\"note note-important\"><p>Global options, like responsives images widths and sizes, are configurable in the <a href=\"27-assets.md#assets-images\"><code translate=\"no\">assets.images</code></a> section.</p></aside>\n<aside class=\"note note-info\"><p>Remote images are downloaded and converted into <em>Assets</em> to be manipulated. You can disable this behavior by setting the option <code translate=\"no\">pages.body.images.remote.enabled</code> to <code translate=\"no\">false</code>.</p></aside>\n<aside class=\"note note-tip\"><p>When <code translate=\"no\">dark_suffix</code> is set (e.g. <code translate=\"no\">dark_suffix: .dark</code>), Cecil automatically looks for a dark variant of each image (e.g. <code translate=\"no\">photo.dark.jpg</code> alongside <code translate=\"no\">photo.jpg</code>). If found, the image is wrapped in a <code translate=\"no\">&lt;picture&gt;</code> element with a <code translate=\"no\">&lt;source media=\"(prefers-color-scheme: dark)\"&gt;</code> for automatic light/dark theme switching. Works in combination with <code translate=\"no\">formats</code> and <code translate=\"no\">responsive</code>.\nIn the same way, when <code translate=\"no\">mobile_suffix</code> is set (e.g. <code translate=\"no\">mobile_suffix: .mobile</code>), Cecil looks for a mobile variant of each image (e.g. <code translate=\"no\">photo.mobile.jpg</code> alongside <code translate=\"no\">photo.jpg</code>) and adds a <code translate=\"no\">&lt;source&gt;</code> element with the <code translate=\"no\">mobile_media_query</code> media query (<code translate=\"no\">(max-width: 767px)</code> by default). If <code translate=\"no\">dark_suffix</code> is also set, the dark variant of the mobile image (e.g. <code translate=\"no\">photo.mobile.dark.jpg</code>) is used on mobile with dark color scheme. Mobile sources are placed before dark sources, so that a mobile variant takes precedence.</p></aside>\n<h3 id=\"pages-body-links\">pages.body.links</h3>\n<p>Links handling options.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">links:</span>\n      <span class=\"hljs-attr\">embed:</span>\n        <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># turns links in embedded content if possible (`false` by default)</span>\n        <span class=\"hljs-attr\">video:</span> <span class=\"hljs-string\">[mp4,</span> <span class=\"hljs-string\">webm]</span> <span class=\"hljs-comment\"># video files extensions</span>\n        <span class=\"hljs-attr\">audio:</span> <span class=\"hljs-string\">[mp3]</span>       <span class=\"hljs-comment\"># audio files extensions</span>\n      <span class=\"hljs-attr\">external:</span>\n        <span class=\"hljs-attr\">blank:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># if true open external link in new tab</span>\n        <span class=\"hljs-attr\">noopener:</span> <span class=\"hljs-literal\">true</span>   <span class=\"hljs-comment\"># if true add \"noopener\" to `rel` attribute</span>\n        <span class=\"hljs-attr\">noreferrer:</span> <span class=\"hljs-literal\">true</span> <span class=\"hljs-comment\"># if true add \"noreferrer\" to `rel` attribute</span>\n        <span class=\"hljs-attr\">nofollow:</span> <span class=\"hljs-literal\">false</span>  <span class=\"hljs-comment\"># if true add \"nofollow\" to `rel` attribute</span></code></pre>\n<h3 id=\"pages-body-excerpt\">pages.body.excerpt</h3>\n<p>Excerpt handling options.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">body:</span>\n    <span class=\"hljs-attr\">excerpt:</span>\n      <span class=\"hljs-attr\">separator:</span> <span class=\"hljs-string\">excerpt|break</span> <span class=\"hljs-comment\"># string to use as separator (`excerpt|break` by default)</span>\n      <span class=\"hljs-attr\">capture:</span> <span class=\"hljs-string\">before</span>          <span class=\"hljs-comment\"># part to capture, `before` or `after` the separator (`before` by default)</span></code></pre>\n<h2 id=\"pages-virtual\">pages.virtual</h2>\n<p>Virtual pages is the best way to create pages without content (<strong>front matter only</strong>).</p>\n<p>It consists of a list of pages with a <code translate=\"no\">path</code> and some front matter variables.</p>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">virtual:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">code</span>\n      <span class=\"hljs-attr\">redirect:</span> <span class=\"hljs-string\">https://github.com/ArnaudLigny</span></code></pre>\n<h2 id=\"pages-default\">pages.default</h2>\n<p>Default pages are pages created automatically by Cecil (from built-in templates):</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">default:</span>\n    <span class=\"hljs-attr\">index:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">''</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">Home</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n    <span class=\"hljs-attr\">404:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-number\">404</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">Page</span> <span class=\"hljs-string\">not</span> <span class=\"hljs-string\">found</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-number\">404</span>\n      <span class=\"hljs-attr\">uglyurl:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n    <span class=\"hljs-attr\">robots:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">robots</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">Robots.txt</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">robots</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">txt</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">multilingual:</span> <span class=\"hljs-literal\">false</span>\n    <span class=\"hljs-attr\">sitemap:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">sitemap</span>\n      <span class=\"hljs-attr\">title:</span> <span class=\"hljs-string\">XML</span> <span class=\"hljs-string\">sitemap</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">sitemap</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">xml</span>\n      <span class=\"hljs-attr\">changefreq:</span> <span class=\"hljs-string\">monthly</span>\n      <span class=\"hljs-attr\">priority:</span> <span class=\"hljs-number\">0.5</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">multilingual:</span> <span class=\"hljs-literal\">false</span>\n    <span class=\"hljs-attr\">xsl/atom:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">xsl/atom</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">feed</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">xsl</span>\n      <span class=\"hljs-attr\">uglyurl:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span>\n    <span class=\"hljs-attr\">xsl/rss:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">xsl/rss</span>\n      <span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">feed</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">xsl</span>\n      <span class=\"hljs-attr\">uglyurl:</span> <span class=\"hljs-literal\">true</span>\n      <span class=\"hljs-attr\">published:</span> <span class=\"hljs-literal\">false</span>\n      <span class=\"hljs-attr\">excluded:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<aside class=\"note note-info\"><p>The structure is almost identical of <a href=\"#pages-virtual\"><code translate=\"no\">pages.virtual</code></a>, except the named key.</p></aside>\n<p>Each one can be:</p>\n<ol>\n<li>disabled: <code translate=\"no\">published: false</code></li>\n<li>excluded from list pages: <code translate=\"no\">excluded: true</code></li>\n<li>excluded from localization: <code translate=\"no\">multilingual: false</code></li>\n</ol>\n<aside class=\"note note-tip\"><p>Since version 8.68.0 you can override the default <code translate=\"no\">robots.txt</code> page by creating a page with the same <code translate=\"no\">path</code>:\n<em>pages/robots.md</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">layout:</span> <span class=\"hljs-string\">robots</span>\n<span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">txt</span>\n<span class=\"hljs-meta\">---</span>\n<span class=\"hljs-attr\">User-agent:</span> <span class=\"hljs-string\">AI-bot</span>\n<span class=\"hljs-attr\">Disallow:</span> <span class=\"hljs-string\">/</span></code></pre></aside>\n<h2 id=\"pages-generators\">pages.generators</h2>\n<p>Generators are used by Cecil to create additional pages (e.g.: sitemap, feed, pagination, etc.) from existing pages, or from other sources like the configuration file or external sources.</p>\n<p>Below the list of Generators provided by Cecil, in a defined order:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">generators:</span>\n    <span class=\"hljs-attr\">10:</span> <span class=\"hljs-string\">'Cecil\\Generator\\DefaultPages'</span>\n    <span class=\"hljs-attr\">20:</span> <span class=\"hljs-string\">'Cecil\\Generator\\VirtualPages'</span>\n    <span class=\"hljs-attr\">30:</span> <span class=\"hljs-string\">'Cecil\\Generator\\ExternalBody'</span>\n    <span class=\"hljs-attr\">40:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Section'</span>\n    <span class=\"hljs-attr\">50:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Taxonomy'</span>\n    <span class=\"hljs-attr\">60:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Homepage'</span>\n    <span class=\"hljs-attr\">70:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Pagination'</span>\n    <span class=\"hljs-attr\">80:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Alias'</span>\n    <span class=\"hljs-attr\">90:</span> <span class=\"hljs-string\">'Cecil\\Generator\\Redirect'</span></code></pre>\n<aside class=\"note note-tip\"><p>You can extend Cecil with <a href=\"../developers/41-extend.md#pages-generator\">Pages generator</a>.</p></aside>\n<h2 id=\"pages-subsets\">pages.subsets</h2>\n<p>Subsets are used to render a part of the pages collection, based on a specific path, language or output format, with the command:</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\">cecil build --render-subset=&lt;name&gt;</code></pre>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">subsets:</span>\n    <span class=\"hljs-string\">&lt;name&gt;:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">&lt;path&gt;</span> <span class=\"hljs-comment\"># glob or string path (e.g.: `blog/*`, `blog`)</span>\n      <span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">&lt;language&gt;</span> <span class=\"hljs-comment\"># language code (e.g.: `en`, `fr`)</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">&lt;output&gt;</span> <span class=\"hljs-comment\"># output format (e.g.: `html`, `atom`)</span></code></pre>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">pages:</span>\n  <span class=\"hljs-attr\">subsets:</span>\n    <span class=\"hljs-attr\">blog_en:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">blog</span>\n      <span class=\"hljs-attr\">language:</span> <span class=\"hljs-string\">en</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">html</span>\n    <span class=\"hljs-attr\">search_index:</span>\n      <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">'*'</span>\n      <span class=\"hljs-attr\">output:</span> <span class=\"hljs-string\">json</span></code></pre>\n<hr>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/data-static/",
      "url": "https://cecil.app/documentation/configuration/data-static/",
      "title": "Data and static files",
      "summary": "Data files and static files options.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Data and static files\nData\nWhere data files are stored and what extensions are handled.\nSupported formats: YAML, JSON, XML and CSV.\ndata.dir\nData source directory (data by default).\ndata:\n  dir: data\ndata.ext\nArray of files extensions.\ndata:\n  ext: [yaml, yml, json, xml, csv]\ndata.load\nEnables site.data collection (true by default).\ndata:\n  load: true\n\nStatic\nManagement of static files are copied (PDF, fonts, etc.).\nYou should put your assets files, used by asset(), in the assets directory to avoid unnecessary files copy.\nstatic.dir\nStatic files source directory (static by default).\nstatic:\n  dir: static\nstatic.target\nDirectory where static files are copied (root by default).\nstatic:\n  target: ''\nstatic.exclude\nList of excluded files. Accepts globs, strings and regexes.\nstatic:\n  exclude: ['sass', 'scss', '*.scss', 'package*.json', 'node_modules']\nIf you use Bootstrap Icons you can exclude the node_modules except node_modules\/bootstrap-icons with a regular expression:\nexclude: ['sass', 'scss', '*.scss', 'package*.json', '#node_modules\/(?!bootstrap-icons)#']\nstatic.load\nEnables site.static collection (false by default).\nstatic:\n  load: false\nstatic.mounts\nAllows to copy specific files or directories to a specific destination.\nstatic:\n  mounts: []\nstatic example\nstatic:\n  dir: docs\n  target: docs\n  exclude: ['sass', '*.scss', '\/\\.bck$\/']\n  load: true\n  mounts:\n    - source\/path\/file.ext: dest\/path\/file.ext\n    - node_modules\/bootstrap-icons\/font\/fonts: fonts",
      "content_html": "<h1>Data and static files</h1>\n<h2 id=\"data\">Data</h2>\n<p>Where data files are stored and what extensions are handled.</p>\n<p>Supported formats: YAML, JSON, XML and CSV.</p>\n<h3 id=\"data-dir\">data.dir</h3>\n<p>Data source directory (<code translate=\"no\">data</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">data:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">data</span></code></pre>\n<h3 id=\"data-ext\">data.ext</h3>\n<p>Array of files extensions.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">data:</span>\n  <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[yaml,</span> <span class=\"hljs-string\">yml,</span> <span class=\"hljs-string\">json,</span> <span class=\"hljs-string\">xml,</span> <span class=\"hljs-string\">csv]</span></code></pre>\n<h3 id=\"data-load\">data.load</h3>\n<p>Enables <code translate=\"no\">site.data</code> collection (<code translate=\"no\">true</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">data:</span>\n  <span class=\"hljs-attr\">load:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<hr>\n<h2 id=\"static\">Static</h2>\n<p>Management of static files are copied (PDF, fonts, etc.).</p>\n<aside class=\"note note-important\"><p>You should put your assets files, used by <a href=\"../assets/index.md#asset\"><code translate=\"no\">asset()</code></a>, in the <a href=\"27-assets.md#assets-dir\"><code translate=\"no\">assets</code> directory</a> to avoid unnecessary files copy.</p></aside>\n<h3 id=\"static-dir\">static.dir</h3>\n<p>Static files source directory (<code translate=\"no\">static</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">static</span></code></pre>\n<h3 id=\"static-target\">static.target</h3>\n<p>Directory where static files are copied (root by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">target:</span> <span class=\"hljs-string\">''</span></code></pre>\n<h3 id=\"static-exclude\">static.exclude</h3>\n<p>List of excluded files. Accepts globs, strings and regexes.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['sass',</span> <span class=\"hljs-string\">'scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'package*.json'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'node_modules'</span><span class=\"hljs-string\">]</span></code></pre>\n<aside class=\"note note-tip\"><p>If you use <a href=\"https://icons.getbootstrap.com\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap Icons</a> you can exclude the <code translate=\"no\">node_modules</code> except <code translate=\"no\">node_modules/bootstrap-icons</code> with a regular expression:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['sass',</span> <span class=\"hljs-string\">'scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'package*.json'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'#node_modules/(?!bootstrap-icons)#'</span><span class=\"hljs-string\">]</span></code></pre></aside>\n<h3 id=\"static-load\">static.load</h3>\n<p>Enables <code translate=\"no\">site.static</code> collection (<code translate=\"no\">false</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">load:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<h3 id=\"static-mounts\">static.mounts</h3>\n<p>Allows to copy specific files or directories to a specific destination.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">mounts:</span> <span class=\"hljs-string\">[]</span></code></pre>\n<h3 id=\"static-example\">static example</h3>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">static:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">docs</span>\n  <span class=\"hljs-attr\">target:</span> <span class=\"hljs-string\">docs</span>\n  <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">['sass',</span> <span class=\"hljs-string\">'*.scss'</span><span class=\"hljs-string\">,</span> <span class=\"hljs-string\">'/\\.bck$/'</span><span class=\"hljs-string\">]</span>\n  <span class=\"hljs-attr\">load:</span> <span class=\"hljs-literal\">true</span>\n  <span class=\"hljs-attr\">mounts:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">source/path/file.ext:</span> <span class=\"hljs-string\">dest/path/file.ext</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">node_modules/bootstrap-icons/font/fonts:</span> <span class=\"hljs-string\">fonts</span></code></pre>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/assets/",
      "url": "https://cecil.app/documentation/configuration/assets/",
      "title": "Assets",
      "summary": "Assets directory, compilation, minification, images and CDN.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Assets\nAssets management (images, CSS and JS files).\nassets.dir\nAssets source directory (assets by default).\nassets:\n  dir: assets\nassets.target\nDirectory where remote and resized assets files are saved (root by default).\nassets:\n  target: ''\nassets.fingerprint\nEnables fingerprinting (cache busting) for assets files (true by default).\nassets:\n  fingerprint: true\nassets.compile\nEnables Sass files compilation (true by default). See the documentation of scssphp for options details.\nassets:\n  compile:\n    style: expanded      # compilation style (`expanded` or `compressed`. `expanded` by default)\n    import: [sass, scss] # list of imported paths (`[sass, scss, node_modules]` by default)\n    sourcemap: false     # enables sourcemap in debug mode (`false` by default)\n    variables: []        # list of preset variables (empty by default)\nsourcemap is used to debug SCSS compilation (debug mode must be enabled).\nassets.minify\nEnables CSS and JS minification (true by default).\nassets:\n  minify: true\nassets.images\nImages management.\nassets:\n  images:\n    optimize: false # enables images optimization with JpegOptim, Optipng, Pngquant 2, SVGO 1, Gifsicle, cwebp, avifenc (`false` by default)\n    quality: 75     # image quality of `optimize` and `resize` (`75` by default)\n    responsive:\n      widths: [480, 640, 768, 1024, 1366, 1600, 1920] # `srcset` attribute images widths\n      sizes:\n        default: '100vw' # default `sizes` attribute (`100vw` by default)\nassets.images.cdn\nURL of image assets can be easily replaced by a provided CDN url.\nassets:\n  images:\n    cdn:\n      enabled: false  # enables Image CDN (`false` by default)\n      canonical: true # `image_url` is canonical (instead of a relative path) (`true` by default)\n      remote: true    # handles not local images too (`true` by default)\n      account: 'xxxx' # provider account\n      url: 'https:\/\/provider.tld\/%account%\/%image_url%?w=%width%&amp;q=%quality%&amp;format=%format%'\nurl is a pattern that contains variables:\n\n%account% replaced by the assets.images.cdn.account option\n%image_url% replaced by the image canonical URL or path\n%width% replaced by the image width\n%quality% replaced by the assets.images.quality option\n%format% replaced by the image format\n\nSee CDN providers.\nassets.remote.useragent\nUser agent used to download remote assets.\nassets:\n  remote:\n    useragent:\n      default: &lt;string&gt; # default user agent\n      useragent1: &lt;string&gt;\n      useragent2: &lt;string&gt;",
      "content_html": "<h1>Assets</h1>\n<p>Assets management (images, CSS and JS files).</p>\n<h2 id=\"assets-dir\">assets.dir</h2>\n<p>Assets source directory (<code translate=\"no\">assets</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">assets</span></code></pre>\n<h2 id=\"assets-target\">assets.target</h2>\n<p>Directory where remote and resized assets files are saved (root by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">target:</span> <span class=\"hljs-string\">''</span></code></pre>\n<h2 id=\"assets-fingerprint\">assets.fingerprint</h2>\n<p>Enables fingerprinting (cache busting) for assets files (<code translate=\"no\">true</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">fingerprint:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<h2 id=\"assets-compile\">assets.compile</h2>\n<p>Enables <a href=\"https://sass-lang.com\" target=\"_blank\" rel=\"noopener noreferrer\">Sass</a> files compilation (<code translate=\"no\">true</code> by default). See the <a href=\"https://scssphp.github.io/scssphp/docs/#output-formatting\" target=\"_blank\" rel=\"noopener noreferrer\">documentation of scssphp</a> for options details.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">compile:</span>\n    <span class=\"hljs-attr\">style:</span> <span class=\"hljs-string\">expanded</span>      <span class=\"hljs-comment\"># compilation style (`expanded` or `compressed`. `expanded` by default)</span>\n    <span class=\"hljs-attr\">import:</span> <span class=\"hljs-string\">[sass,</span> <span class=\"hljs-string\">scss]</span> <span class=\"hljs-comment\"># list of imported paths (`[sass, scss, node_modules]` by default)</span>\n    <span class=\"hljs-attr\">sourcemap:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># enables sourcemap in debug mode (`false` by default)</span>\n    <span class=\"hljs-attr\">variables:</span> <span class=\"hljs-string\">[]</span>        <span class=\"hljs-comment\"># list of preset variables (empty by default)</span></code></pre>\n<aside class=\"note note-info\"><p><code translate=\"no\">sourcemap</code> is used to debug SCSS compilation (<a href=\"22-site.md#debug\">debug mode</a> must be enabled).</p></aside>\n<h2 id=\"assets-minify\">assets.minify</h2>\n<p>Enables CSS and JS minification (<code translate=\"no\">true</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">minify:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<h2 id=\"assets-images\">assets.images</h2>\n<p>Images management.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">optimize:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># enables images optimization with JpegOptim, Optipng, Pngquant 2, SVGO 1, Gifsicle, cwebp, avifenc (`false` by default)</span>\n    <span class=\"hljs-attr\">quality:</span> <span class=\"hljs-number\">75</span>     <span class=\"hljs-comment\"># image quality of `optimize` and `resize` (`75` by default)</span>\n    <span class=\"hljs-attr\">responsive:</span>\n      <span class=\"hljs-attr\">widths:</span> <span class=\"hljs-string\">[480,</span> <span class=\"hljs-number\">640</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">768</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1024</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1366</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1600</span><span class=\"hljs-string\">,</span> <span class=\"hljs-number\">1920</span><span class=\"hljs-string\">]</span> <span class=\"hljs-comment\"># `srcset` attribute images widths</span>\n      <span class=\"hljs-attr\">sizes:</span>\n        <span class=\"hljs-attr\">default:</span> <span class=\"hljs-string\">'100vw'</span> <span class=\"hljs-comment\"># default `sizes` attribute (`100vw` by default)</span></code></pre>\n<h2 id=\"assets-images-cdn\">assets.images.cdn</h2>\n<p>URL of image assets can be easily replaced by a provided CDN <code translate=\"no\">url</code>.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">cdn:</span>\n      <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span>  <span class=\"hljs-comment\"># enables Image CDN (`false` by default)</span>\n      <span class=\"hljs-attr\">canonical:</span> <span class=\"hljs-literal\">true</span> <span class=\"hljs-comment\"># `image_url` is canonical (instead of a relative path) (`true` by default)</span>\n      <span class=\"hljs-attr\">remote:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># handles not local images too (`true` by default)</span>\n      <span class=\"hljs-attr\">account:</span> <span class=\"hljs-string\">'xxxx'</span> <span class=\"hljs-comment\"># provider account</span>\n      <span class=\"hljs-attr\">url:</span> <span class=\"hljs-string\">'https://provider.tld/%account%/%image_url%?w=%width%&amp;q=%quality%&amp;format=%format%'</span></code></pre>\n<p><code translate=\"no\">url</code> is a pattern that contains variables:</p>\n<ul>\n<li><code translate=\"no\">%account%</code> replaced by the <code translate=\"no\">assets.images.cdn.account</code> option</li>\n<li><code translate=\"no\">%image_url%</code> replaced by the image canonical URL or <code translate=\"no\">path</code></li>\n<li><code translate=\"no\">%width%</code> replaced by the image width</li>\n<li><code translate=\"no\">%quality%</code> replaced by the <code translate=\"no\">assets.images.quality</code> option</li>\n<li><code translate=\"no\">%format%</code> replaced by the image format</li>\n</ul>\n<p>See <a href=\"../assets/21-cdn-providers.md\"><strong>CDN providers</strong></a>.</p>\n<h2 id=\"assets-remote-useragent\">assets.remote.useragent</h2>\n<p>User agent used to download remote assets.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">assets:</span>\n  <span class=\"hljs-attr\">remote:</span>\n    <span class=\"hljs-attr\">useragent:</span>\n      <span class=\"hljs-attr\">default:</span> <span class=\"hljs-string\">&lt;string&gt;</span> <span class=\"hljs-comment\"># default user agent</span>\n      <span class=\"hljs-attr\">useragent1:</span> <span class=\"hljs-string\">&lt;string&gt;</span>\n      <span class=\"hljs-attr\">useragent2:</span> <span class=\"hljs-string\">&lt;string&gt;</span></code></pre>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/layouts/",
      "url": "https://cecil.app/documentation/configuration/layouts/",
      "title": "Layouts",
      "summary": "Templates directory, auto-escaping, images, translations and components.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Layouts\nTemplates options.\nlayouts.dir\nTemplates directory source (layouts by default).\nlayouts:\n  dir: layouts\nlayouts.autoescape\nOverrides Twig autoescape option (false by default).\nIf set to null, Cecil uses an extension-based strategy:\n\n*.js.twig -&gt; js\n*.css.twig -&gt; css\n*.html.twig and *.twig -&gt; html\nany other extension -&gt; false\n\nlayouts:\n  autoescape: false  # disables automatic escaping (default) \n  #autoescape: null  # use Cecil automatic strategy by template filename extension \n  #autoescape: html\n  #autoescape: js\nlayouts.images\nImages handling options.\nlayouts:\n  images:\n    formats: []       # used by `html` function: adds alternatives image formats as `source` (e.g. `[avif, webp]`, empty array by default)\n    responsive: false # used by `html` function: adds responsive images ('width' or 'density', `false` by default)\n    placeholder: ''   # used by `html` function: fills image background before loading (`color` or `lqip`, disabled by default)\n    dark_suffix: ''   # suffix of the dark variant image (e.g. `.dark`), disabled by default\n    mobile_suffix: '' # suffix of the mobile variant image (e.g. `.mobile`), disabled by default\n    mobile_media_query: '(max-width: 767px)' # media query of the mobile variant `&lt;source&gt;`\nlayouts.translations\nTranslations handling options.\nlayouts:\n  translations:\n    dir: translations # translations source directory (`translations` by default)\n    formats:          # translations supported formats\n      yaml:\n        loader: Symfony\\Component\\Translation\\Loader\\YamlFileLoader\n        ext: [yml, yaml]\n      mo:\n        loader: Symfony\\Component\\Translation\\Loader\\MoFileLoader\n        ext: [mo]\nEach translation format defines:\n\nloader: Symfony translation loader class\next: one or more file extensions associated with this format\n\nlayouts.components\nTemplates Components options.\nlayouts:\n  components:\n    dir: components # components source directory (`components` by default)\n    ext: twig       # components files extension (`twig` by default)\nlayouts.sections\nMaps a section to the layouts of another section: the mapped name is used in place of &lt;section&gt; by the lookup rules of the section and of its pages.\nlayouts:\n  sections:\n    news: blog # the \"news\" section is rendered with `blog\/list.html.twig` and its pages with `blog\/page.html.twig`\nA sub-section already falls back to the layouts of its parent sections: no mapping is needed for that.\n",
      "content_html": "<h1>Layouts</h1>\n<p>Templates options.</p>\n<h2 id=\"layouts-dir\">layouts.dir</h2>\n<p>Templates directory source (<code translate=\"no\">layouts</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">layouts</span></code></pre>\n<h2 id=\"layouts-autoescape\">layouts.autoescape</h2>\n<p>Overrides Twig <code translate=\"no\">autoescape</code> option (<code translate=\"no\">false</code> by default).</p>\n<p>If set to <code translate=\"no\">null</code>, Cecil uses an extension-based strategy:</p>\n<ul>\n<li><code translate=\"no\">*.js.twig</code> -&gt; <code translate=\"no\">js</code></li>\n<li><code translate=\"no\">*.css.twig</code> -&gt; <code translate=\"no\">css</code></li>\n<li><code translate=\"no\">*.html.twig</code> and <code translate=\"no\">*.twig</code> -&gt; <code translate=\"no\">html</code></li>\n<li>any other extension -&gt; <code translate=\"no\">false</code></li>\n</ul>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">autoescape:</span> <span class=\"hljs-literal\">false</span>  <span class=\"hljs-comment\"># disables automatic escaping (default) </span>\n  <span class=\"hljs-comment\">#autoescape: null  # use Cecil automatic strategy by template filename extension </span>\n  <span class=\"hljs-comment\">#autoescape: html</span>\n  <span class=\"hljs-comment\">#autoescape: js</span></code></pre>\n<h2 id=\"layouts-images\">layouts.images</h2>\n<p>Images handling options.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">formats:</span> <span class=\"hljs-string\">[]</span>       <span class=\"hljs-comment\"># used by `html` function: adds alternatives image formats as `source` (e.g. `[avif, webp]`, empty array by default)</span>\n    <span class=\"hljs-attr\">responsive:</span> <span class=\"hljs-literal\">false</span> <span class=\"hljs-comment\"># used by `html` function: adds responsive images ('width' or 'density', `false` by default)</span>\n    <span class=\"hljs-attr\">placeholder:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># used by `html` function: fills image background before loading (`color` or `lqip`, disabled by default)</span>\n    <span class=\"hljs-attr\">dark_suffix:</span> <span class=\"hljs-string\">''</span>   <span class=\"hljs-comment\"># suffix of the dark variant image (e.g. `.dark`), disabled by default</span>\n    <span class=\"hljs-attr\">mobile_suffix:</span> <span class=\"hljs-string\">''</span> <span class=\"hljs-comment\"># suffix of the mobile variant image (e.g. `.mobile`), disabled by default</span>\n    <span class=\"hljs-attr\">mobile_media_query:</span> <span class=\"hljs-string\">'(max-width: 767px)'</span> <span class=\"hljs-comment\"># media query of the mobile variant `&lt;source&gt;`</span></code></pre>\n<h2 id=\"layouts-translations\">layouts.translations</h2>\n<p>Translations handling options.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">translations:</span>\n    <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">translations</span> <span class=\"hljs-comment\"># translations source directory (`translations` by default)</span>\n    <span class=\"hljs-attr\">formats:</span>          <span class=\"hljs-comment\"># translations supported formats</span>\n      <span class=\"hljs-attr\">yaml:</span>\n        <span class=\"hljs-attr\">loader:</span> <span class=\"hljs-string\">Symfony\\Component\\Translation\\Loader\\YamlFileLoader</span>\n        <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[yml,</span> <span class=\"hljs-string\">yaml]</span>\n      <span class=\"hljs-attr\">mo:</span>\n        <span class=\"hljs-attr\">loader:</span> <span class=\"hljs-string\">Symfony\\Component\\Translation\\Loader\\MoFileLoader</span>\n        <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[mo]</span></code></pre>\n<p>Each translation format defines:</p>\n<ul>\n<li><code translate=\"no\">loader</code>: Symfony translation loader class</li>\n<li><code translate=\"no\">ext</code>: one or more file extensions associated with this format</li>\n</ul>\n<h2 id=\"layouts-components\">layouts.components</h2>\n<p><a href=\"../templates/15-components.md\">Templates Components</a> options.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">components:</span>\n    <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">components</span> <span class=\"hljs-comment\"># components source directory (`components` by default)</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">twig</span>       <span class=\"hljs-comment\"># components files extension (`twig` by default)</span></code></pre>\n<h2 id=\"layouts-sections\">layouts.sections</h2>\n<p>Maps a section to the layouts of another section: the mapped name is used in place of <code translate=\"no\">&lt;section&gt;</code> by the <a href=\"../templates/10-lookup-rules.md#lookup-rules\">lookup rules</a> of the section and of its pages.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">layouts:</span>\n  <span class=\"hljs-attr\">sections:</span>\n    <span class=\"hljs-attr\">news:</span> <span class=\"hljs-string\">blog</span> <span class=\"hljs-comment\"># the \"news\" section is rendered with `blog/list.html.twig` and its pages with `blog/page.html.twig`</span></code></pre>\n<aside class=\"note note-tip\"><p>A <a href=\"../content/5-pages.md#sub-section\">sub-section</a> already falls back to the layouts of its parent sections: no mapping is needed for that.</p></aside>\n<hr>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/output/",
      "url": "https://cecil.app/documentation/configuration/output/",
      "title": "Output",
      "summary": "Output directory, formats and post-processing.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Output\nDefines where and in what format pages are rendered.\noutput.dir\nDirectory where rendered pages’ files are saved (_site by default).\noutput:\n  dir: _site\noutput.formats\nList of output formats definition, which are used to render pages (e.g. HTML, Atom, RSS, JSON, XML, etc.).\noutput:\n  formats:\n    - name: &lt;name&gt;            # name of the format, e.g.: `html` (required)\n      mediatype: &lt;media type&gt; # media type (MIME type), ie: 'text\/html' (optional)\n      subpath: &lt;sub path&gt;     # sub path, e.g.: `amp` in `path\/amp\/index.html` (optional)\n      filename: &lt;file name&gt;   # file name, e.g.: `index` in `path\/index.html` (optional)\n      extension: &lt;extension&gt;  # file extension, e.g.: `html` in `path\/index.html` (required)\n      exclude: [&lt;variable&gt;]   # don’t apply this format to pages identified by listed variables, e.g.: `[redirect, paginated]` (optional)\nThose formats are used in the output.pagetypeformats configuration and in the output page variable.\nDefault formats\nCecil provides some default formats, which can be overridden in the configuration file: html (default), atom, rss, json, xml, txt, amp, js, webmanifest, xsl, jsonfeed, iframe, oembed.\noutput.pagetypeformats\nIt’s not required to set output variable for each page, as Cecil automatically applies the formats defined for each page type (homepage, page, section, vocabulary and term).\noutput:\n  pagetypeformats:\n    page: [&lt;format&gt;]\n    homepage: [&lt;format&gt;]\n    section: [&lt;format&gt;]\n    vocabulary: [&lt;format&gt;]\n    term: [&lt;format&gt;]\nSeveral formats can be defined for the one type of page. For example the section page type can be automatically rendered in HTML and Atom:\noutput:\n  pagetypeformats:\n    section: [html, atom]\nTo render a page, Cecil lookup for a template named &lt;layout&gt;.&lt;format&gt;.twig (e.g. page.html.twig)\noutput example\noutput:\n  dir: _site\n  formats:\n    - name: html\n      mediatype: text\/html\n      filename: index\n      extension: html\n    - name: atom\n      mediatype: application\/xml\n      filename: atom\n      extension: xml\n      exclude: [redirect, paginated]\n  pagetypeformats:\n    page: [html]\n    homepage: [html, atom]\n    section: [html, atom]\n    vocabulary: [html]\n    term: [html, atom]\nPost process\nYou can extend Cecil capabilities with an Output post processor to modify the output files after they have been generated.\n",
      "content_html": "<h1>Output</h1>\n<p>Defines where and in what format pages are rendered.</p>\n<h2 id=\"output-dir\">output.dir</h2>\n<p>Directory where rendered pages’ files are saved (<code translate=\"no\">_site</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">_site</span></code></pre>\n<h2 id=\"output-formats\">output.formats</h2>\n<p>List of output formats definition, which are used to render pages (e.g. HTML, Atom, RSS, JSON, XML, etc.).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">formats:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">&lt;name&gt;</span>            <span class=\"hljs-comment\"># name of the format, e.g.: `html` (required)</span>\n      <span class=\"hljs-attr\">mediatype:</span> <span class=\"hljs-string\">&lt;media</span> <span class=\"hljs-string\">type&gt;</span> <span class=\"hljs-comment\"># media type (MIME type), ie: 'text/html' (optional)</span>\n      <span class=\"hljs-attr\">subpath:</span> <span class=\"hljs-string\">&lt;sub</span> <span class=\"hljs-string\">path&gt;</span>     <span class=\"hljs-comment\"># sub path, e.g.: `amp` in `path/amp/index.html` (optional)</span>\n      <span class=\"hljs-attr\">filename:</span> <span class=\"hljs-string\">&lt;file</span> <span class=\"hljs-string\">name&gt;</span>   <span class=\"hljs-comment\"># file name, e.g.: `index` in `path/index.html` (optional)</span>\n      <span class=\"hljs-attr\">extension:</span> <span class=\"hljs-string\">&lt;extension&gt;</span>  <span class=\"hljs-comment\"># file extension, e.g.: `html` in `path/index.html` (required)</span>\n      <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">[&lt;variable&gt;]</span>   <span class=\"hljs-comment\"># don’t apply this format to pages identified by listed variables, e.g.: `[redirect, paginated]` (optional)</span></code></pre>\n<p>Those formats are used in the <a href=\"#output-pagetypeformats\"><code translate=\"no\">output.pagetypeformats</code></a> configuration and in the <a href=\"../content/6-front-matter.md#output\"><code translate=\"no\">output</code> page variable</a>.</p>\n<h3 id=\"default-formats\">Default formats</h3>\n<p>Cecil provides some <a href=\"https://github.com/Cecilapp/Cecil/blob/main/config/base.php#L81-L162\" target=\"_blank\" rel=\"noopener noreferrer\">default formats</a>, which can be overridden in the configuration file: <code translate=\"no\">html</code> (default), <code translate=\"no\">atom</code>, <code translate=\"no\">rss</code>, <code translate=\"no\">json</code>, <code translate=\"no\">xml</code>, <code translate=\"no\">txt</code>, <code translate=\"no\">amp</code>, <code translate=\"no\">js</code>, <code translate=\"no\">webmanifest</code>, <code translate=\"no\">xsl</code>, <code translate=\"no\">jsonfeed</code>, <code translate=\"no\">iframe</code>, <code translate=\"no\">oembed</code>.</p>\n<h2 id=\"output-pagetypeformats\">output.pagetypeformats</h2>\n<p>It’s not required to set <code translate=\"no\">output</code> variable for each page, as Cecil automatically applies the formats defined for each page type (<code translate=\"no\">homepage</code>, <code translate=\"no\">page</code>, <code translate=\"no\">section</code>, <code translate=\"no\">vocabulary</code> and <code translate=\"no\">term</code>).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">pagetypeformats:</span>\n    <span class=\"hljs-attr\">page:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">homepage:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">vocabulary:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span>\n    <span class=\"hljs-attr\">term:</span> <span class=\"hljs-string\">[&lt;format&gt;]</span></code></pre>\n<p>Several formats can be defined for the one type of page. For example the <code translate=\"no\">section</code> page type can be automatically rendered in HTML and Atom:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">pagetypeformats:</span>\n    <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span></code></pre>\n<aside class=\"note note-info\"><p>To render a page, <a href=\"../templates/10-lookup-rules.md#lookup-rules\">Cecil lookup for a template</a> named <code translate=\"no\">&lt;layout&gt;.&lt;format&gt;.twig</code> (e.g. <code translate=\"no\">page.html.twig</code>)</p></aside>\n<h2 id=\"output-example\">output example</h2>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">output:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">_site</span>\n  <span class=\"hljs-attr\">formats:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">html</span>\n      <span class=\"hljs-attr\">mediatype:</span> <span class=\"hljs-string\">text/html</span>\n      <span class=\"hljs-attr\">filename:</span> <span class=\"hljs-string\">index</span>\n      <span class=\"hljs-attr\">extension:</span> <span class=\"hljs-string\">html</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">atom</span>\n      <span class=\"hljs-attr\">mediatype:</span> <span class=\"hljs-string\">application/xml</span>\n      <span class=\"hljs-attr\">filename:</span> <span class=\"hljs-string\">atom</span>\n      <span class=\"hljs-attr\">extension:</span> <span class=\"hljs-string\">xml</span>\n      <span class=\"hljs-attr\">exclude:</span> <span class=\"hljs-string\">[redirect,</span> <span class=\"hljs-string\">paginated]</span>\n  <span class=\"hljs-attr\">pagetypeformats:</span>\n    <span class=\"hljs-attr\">page:</span> <span class=\"hljs-string\">[html]</span>\n    <span class=\"hljs-attr\">homepage:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span>\n    <span class=\"hljs-attr\">section:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span>\n    <span class=\"hljs-attr\">vocabulary:</span> <span class=\"hljs-string\">[html]</span>\n    <span class=\"hljs-attr\">term:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">atom]</span></code></pre>\n<h2 id=\"post-process\">Post process</h2>\n<p>You can extend Cecil capabilities with an <a href=\"../developers/41-extend.md#output-post-processor\">Output post processor</a> to modify the output files after they have been generated.</p>\n<hr>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/cache/",
      "url": "https://cecil.app/documentation/configuration/cache/",
      "title": "Cache",
      "summary": "Assets, templates and translations cache.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Cache\nCache options.\ncache.enabled\nCache is enabled by default (true), but you can disable it with:\ncache:\n  enabled: false\nIt’s not recommended to disable the cache for performance reasons.\ncache.dir\nDirectory where cache files are stored (.cache by default).\ncache:\n  dir: '.cache'\nThe cache directory is relative to the site directory, but you can use an absolute path: it can be useful to store the cache in a shared directory.\ncache.assets\nAssets cache options.\ncache.assets.ttl\nTime to live of assets cache in seconds (null by default = no expiration).\ncache:\n  assets:\n    ttl: ~\ncache.assets.remote.ttl\nTime to live of remote assets cache in seconds (7 days by default).\ncache:\n  assets:\n    remotes:\n      ttl: 604800 # 7 days\ncache.templates\nDisables templates cache with false (true by default).\ncache:\n  templates: true\nSee templates cache documentation for more details.\ncache.translations\nDisables translations cache  with false (true by default).\ncache:\n  translations: true\n",
      "content_html": "<h1>Cache</h1>\n<p>Cache options.</p>\n<h2 id=\"cache-enabled\">cache.enabled</h2>\n<p>Cache is enabled by default (<code translate=\"no\">true</code>), but you can disable it with:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span></code></pre>\n<aside class=\"note note-warning\"><p>It’s not recommended to disable the cache for performance reasons.</p></aside>\n<h2 id=\"cache-dir\">cache.dir</h2>\n<p>Directory where cache files are stored (<code translate=\"no\">.cache</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">dir:</span> <span class=\"hljs-string\">'.cache'</span></code></pre>\n<aside class=\"note note-info\"><p>The cache directory is relative to the site directory, but you can use an absolute path: it can be useful to store the cache in a shared directory.</p></aside>\n<h2 id=\"cache-assets\">cache.assets</h2>\n<p>Assets cache options.</p>\n<h3 id=\"cache-assets-ttl\">cache.assets.ttl</h3>\n<p>Time to live of assets cache in seconds (<code translate=\"no\">null</code> by default = no expiration).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">assets:</span>\n    <span class=\"hljs-attr\">ttl:</span> <span class=\"hljs-string\">~</span></code></pre>\n<h3 id=\"cache-assets-remote-ttl\">cache.assets.remote.ttl</h3>\n<p>Time to live of remote assets cache in seconds (7 days by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">assets:</span>\n    <span class=\"hljs-attr\">remotes:</span>\n      <span class=\"hljs-attr\">ttl:</span> <span class=\"hljs-number\">604800</span> <span class=\"hljs-comment\"># 7 days</span></code></pre>\n<h2 id=\"cache-templates\">cache.templates</h2>\n<p>Disables templates cache with <code translate=\"no\">false</code> (<code translate=\"no\">true</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">templates:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<aside class=\"note note-info\"><p>See <a href=\"../templates/17-cache.md\">templates cache documentation</a> for more details.</p></aside>\n<h2 id=\"cache-translations\">cache.translations</h2>\n<p>Disables translations cache  with <code translate=\"no\">false</code> (<code translate=\"no\">true</code> by default).</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">cache:</span>\n  <span class=\"hljs-attr\">translations:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<hr>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/server/",
      "url": "https://cecil.app/documentation/configuration/server/",
      "title": "Server and optimization",
      "summary": "Local server headers and output optimization.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Server and optimization\nServer\nserver.headers\nYou can define custom HTTP headers, used by the local preview server.\nSince version 8.38.0, the headers option has been moved to the server.headers section.\nserver:\n  headers:\n    - path: &lt;path&gt; # Relative path, prefixed with a slash. Support \"*\" wildcard.\n      headers:\n        - key: &lt;key&gt;\n          value: \"&lt;value&gt;\"\nIt's useful to test custom Content Security Policy or Cache-Control.\nExample:\nserver:\n  headers:\n    - path: \/*\n      headers:\n        - key: X-Frame-Options\n          value: \"SAMEORIGIN\"\n        - key: X-XSS-Protection\n          value: \"1; mode=block\"\n        - key: X-Content-Type-Options\n          value: \"nosniff\"\n        - key: Content-Security-Policy\n          value: \"default-src 'self'; object-src 'self'; img-src 'self'\"\n        - key: Strict-Transport-Security\n          value: \"max-age=31536000; includeSubDomains; preload\"\n    - path: \/assets\/*\n      headers:\n        - key: Cache-Control\n          value: \"public, max-age=31536000\"\n    - path: \/foo.html\n      headers:\n        - key: Foo\n          value: \"bar\"\n\nOptimize\nThe optimization options allow to enable compression of output files: HTML, CSS, JavaScript and image.\noptimize:\n  enabled: false     # enables files optimization (`false` by default)\n  html:\n    enabled: true    # enables HTML files optimization\n    ext: [html, htm]   # supported files extensions\n  css:\n    enabled: true    # enables CSS files optimization\n    ext: [css]         # supported files extensions\n  js:\n    enabled: true    # enables JavaScript files optimization\n    ext: [js]          # supported files extensions\n  images:\n    enabled: true    # enables images files optimization\n    ext: [jpeg, jpg, png, gif, webp, svg, avif] # supported files extensions\nThis option is disabled by default and can be enabled via:\noptimize: true\nOnce the global option is enabled, the 4 file types will be processed.\nIt is possible to disable each of them via enabled: false and modify processed files extension via ext.\nIt is also possible to enable this option through CLI when using the \"build\" and \"serve\" commands via the --optimize option.\nImages compressor will use these binaries if they are present in the system: JpegOptim, Optipng, Pngquant 2, SVGO, Gifsicle, cwebp and avifenc.\n",
      "content_html": "<h1>Server and optimization</h1>\n<h2 id=\"server\">Server</h2>\n<h3 id=\"server-headers\">server.headers</h3>\n<p>You can define custom <a href=\"https://developer.mozilla.org/docs/Glossary/Response_header\" target=\"_blank\" rel=\"noopener noreferrer\">HTTP headers</a>, used by the local preview server.</p>\n<aside class=\"note note-warning\"><p>Since version <ins>8.38.0</ins>, the <code translate=\"no\">headers</code> option has been moved to the <code translate=\"no\">server.headers</code> section.</p></aside>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">server:</span>\n  <span class=\"hljs-attr\">headers:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">&lt;path&gt;</span> <span class=\"hljs-comment\"># Relative path, prefixed with a slash. Support \"*\" wildcard.</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">&lt;key&gt;</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"&lt;value&gt;\"</span></code></pre>\n<aside class=\"note note-tip\"><p>It's useful to test custom <a href=\"https://developer.mozilla.org/docs/Web/HTTP/CSP\" target=\"_blank\" rel=\"noopener noreferrer\">Content Security Policy</a> or <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control\" target=\"_blank\" rel=\"noopener noreferrer\">Cache-Control</a>.</p></aside>\n<p><em>Example:</em></p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">server:</span>\n  <span class=\"hljs-attr\">headers:</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">/*</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">X-Frame-Options</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"SAMEORIGIN\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">X-XSS-Protection</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"1; mode=block\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">X-Content-Type-Options</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"nosniff\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Content-Security-Policy</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"default-src 'self'; object-src 'self'; img-src 'self'\"</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Strict-Transport-Security</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"max-age=31536000; includeSubDomains; preload\"</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">/assets/*</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Cache-Control</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"public, max-age=31536000\"</span>\n    <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">path:</span> <span class=\"hljs-string\">/foo.html</span>\n      <span class=\"hljs-attr\">headers:</span>\n        <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">key:</span> <span class=\"hljs-string\">Foo</span>\n          <span class=\"hljs-attr\">value:</span> <span class=\"hljs-string\">\"bar\"</span></code></pre>\n<hr>\n<h2 id=\"optimize\">Optimize</h2>\n<p>The optimization options allow to enable compression of output files: HTML, CSS, JavaScript and image.</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">optimize:</span>\n  <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">false</span>     <span class=\"hljs-comment\"># enables files optimization (`false` by default)</span>\n  <span class=\"hljs-attr\">html:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># enables HTML files optimization</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[html,</span> <span class=\"hljs-string\">htm]</span>   <span class=\"hljs-comment\"># supported files extensions</span>\n  <span class=\"hljs-attr\">css:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># enables CSS files optimization</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[css]</span>         <span class=\"hljs-comment\"># supported files extensions</span>\n  <span class=\"hljs-attr\">js:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># enables JavaScript files optimization</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[js]</span>          <span class=\"hljs-comment\"># supported files extensions</span>\n  <span class=\"hljs-attr\">images:</span>\n    <span class=\"hljs-attr\">enabled:</span> <span class=\"hljs-literal\">true</span>    <span class=\"hljs-comment\"># enables images files optimization</span>\n    <span class=\"hljs-attr\">ext:</span> <span class=\"hljs-string\">[jpeg,</span> <span class=\"hljs-string\">jpg,</span> <span class=\"hljs-string\">png,</span> <span class=\"hljs-string\">gif,</span> <span class=\"hljs-string\">webp,</span> <span class=\"hljs-string\">svg,</span> <span class=\"hljs-string\">avif]</span> <span class=\"hljs-comment\"># supported files extensions</span></code></pre>\n<p>This option is disabled by default and can be enabled via:</p>\n<pre><code class=\"language-yaml hljs yaml\" translate=\"no\"><span class=\"hljs-attr\">optimize:</span> <span class=\"hljs-literal\">true</span></code></pre>\n<p>Once the global option is enabled, the 4 file types will be processed.<br>\nIt is possible to disable each of them via <code translate=\"no\">enabled: false</code> and modify processed files extension via <code translate=\"no\">ext</code>.</p>\n<aside class=\"note note-tip\"><p>It is also possible to enable this option through CLI when using the \"build\" and \"serve\" commands via the <code translate=\"no\">--optimize</code> option.</p></aside>\n<aside class=\"note note-important\"><p><strong>Images</strong> compressor will use these binaries if they are present in the system: <a href=\"https://github.com/tjko/jpegoptim\" target=\"_blank\" rel=\"noopener noreferrer\">JpegOptim</a>, <a href=\"http://optipng.sourceforge.net/\" target=\"_blank\" rel=\"noopener noreferrer\">Optipng</a>, <a href=\"https://pngquant.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Pngquant 2</a>, <a href=\"https://github.com/svg/svgo\" target=\"_blank\" rel=\"noopener noreferrer\">SVGO</a>, <a href=\"http://www.lcdf.org/gifsicle/\" target=\"_blank\" rel=\"noopener noreferrer\">Gifsicle</a>, <a href=\"https://developers.google.com/speed/webp/docs/cwebp\" target=\"_blank\" rel=\"noopener noreferrer\">cwebp</a> and <a href=\"https://github.com/AOMediaCodec/libavif\" target=\"_blank\" rel=\"noopener noreferrer\">avifenc</a>.</p></aside>\n<hr>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/override/",
      "url": "https://cecil.app/documentation/configuration/override/",
      "title": "Override configuration",
      "summary": "Override the configuration with environment variables or a CLI option.",
      "date_published": "2021-05-07T00:00:00+00:00",
      "date_modified": "2026-10-05T00:00:00+00:00","content_text": "Override configuration\nEnvironment variables\nThe configuration can be overridden through environment variables.\nAt startup, Cecil also attempts to load a .env file from the current site path (the current working directory, or the &lt;path&gt; argument if provided).\n\nIf the .env file does not exist, Cecil continues normally.\nVariables already defined by the shell\/system are preserved.\n\nEach environment variable name must be prefixed with CECIL_ and the configuration key must be set in uppercase.\nFor example, the following command set the website’s baseurl:\nexport CECIL_BASEURL=\"https:\/\/example.com\/\"\nYou can store the same value in a .env file at your project root:\nCECIL_BASEURL=\"https:\/\/example.com\/\"\nCECIL_TITLE=\"My Cecil site\"\nCLI option\nYou can combine multiple configuration files, with the --config option (left-to-right precedence):\nphp cecil.phar --config config-1.yml,config-2.yml",
      "content_html": "<h1>Override configuration</h1>\n<h2 id=\"environment-variables\">Environment variables</h2>\n<p>The configuration can be overridden through <a href=\"https://en.wikipedia.org/wiki/Environment_variable\" target=\"_blank\" rel=\"noopener noreferrer\">environment variables</a>.</p>\n<p>At startup, Cecil also attempts to load a <code translate=\"no\">.env</code> file from the current site path (the current working directory, or the <code translate=\"no\">&lt;path&gt;</code> argument if provided).</p>\n<ul>\n<li>If the <code translate=\"no\">.env</code> file does not exist, Cecil continues normally.</li>\n<li>Variables already defined by the shell/system are preserved.</li>\n</ul>\n<p>Each environment variable name must be prefixed with <code translate=\"no\">CECIL_</code> and the configuration key must be set in uppercase.</p>\n<p>For example, the following command set the website’s <code translate=\"no\">baseurl</code>:</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\"><span class=\"hljs-built_in\">export</span> CECIL_BASEURL=<span class=\"hljs-string\">\"https://example.com/\"</span></code></pre>\n<p>You can store the same value in a <code translate=\"no\">.env</code> file at your project root:</p>\n<pre><code class=\"language-dotenv\" translate=\"no\">CECIL_BASEURL=\"https://example.com/\"\nCECIL_TITLE=\"My Cecil site\"</code></pre>\n<h2 id=\"cli-option\">CLI option</h2>\n<p>You can combine multiple configuration files, with the <code translate=\"no\">--config</code> option (left-to-right precedence):</p>\n<pre><code class=\"language-bash hljs bash\" translate=\"no\">php cecil.phar --config config-1.yml,config-2.yml</code></pre>",
      "language": "en"
    },
    {
      "id": "https://cecil.app/documentation/configuration/locale-codes/",
      "url": "https://cecil.app/documentation/configuration/locale-codes/",
      "title": "Locale codes",
      "summary": "List of available locale codes to use with the languages option.",
      "date_published": "2020-12-19T00:00:00+00:00",
      "date_modified": "2026-10-02T00:00:00+00:00","content_text": "Locale codes\nAvailable locale codes (language_COUNTRY) used by the languages option.\n\n\n\nLocale\nCode\n\n\n\n\nAlbanian (Albania)\nsq_AL\n\n\nAlbanian\nsq\n\n\nArabic (Algeria)\nar_DZ\n\n\nArabic (Bahrain)\nar_BH\n\n\nArabic (Egypt)\nar_EG\n\n\nArabic (Iraq)\nar_IQ\n\n\nArabic (Jordan)\nar_JO\n\n\nArabic (Kuwait)\nar_KW\n\n\nArabic (Lebanon)\nar_LB\n\n\nArabic (Libya)\nar_LY\n\n\nArabic (Morocco)\nar_MA\n\n\nArabic (Oman)\nar_OM\n\n\nArabic (Qatar)\nar_QA\n\n\nArabic (Saudi Arabia)\nar_SA\n\n\nArabic (Sudan)\nar_SD\n\n\nArabic (Syria)\nar_SY\n\n\nArabic (Tunisia)\nar_TN\n\n\nArabic (United Arab Emirates)\nar_AE\n\n\nArabic (Yemen)\nar_YE\n\n\nArabic\nar\n\n\nBelarusian (Belarus)\nbe_BY\n\n\nBelarusian\nbe\n\n\nBulgarian (Bulgaria)\nbg_BG\n\n\nBulgarian\nbg\n\n\nCatalan (Spain)\nca_ES\n\n\nCatalan\nca\n\n\nChinese (China)\nzh_CN\n\n\nChinese (Hong Kong)\nzh_HK\n\n\nChinese (Singapore)\nzh_SG\n\n\nChinese (Taiwan)\nzh_TW\n\n\nChinese\nzh\n\n\nCroatian (Croatia)\nhr_HR\n\n\nCroatian\nhr\n\n\nCzech (Czech Republic)\ncs_CZ\n\n\nCzech\ncs\n\n\nDanish (Denmark)\nda_DK\n\n\nDanish\nda\n\n\nDutch (Belgium)\nnl_BE\n\n\nDutch (Netherlands)\nnl_NL\n\n\nDutch\nnl\n\n\nEnglish (Australia)\nen_AU\n\n\nEnglish (Canada)\nen_CA\n\n\nEnglish (India)\nen_IN\n\n\nEnglish (Ireland)\nen_IE\n\n\nEnglish (Malta)\nen_MT\n\n\nEnglish (New Zealand)\nen_NZ\n\n\nEnglish (Philippines)\nen_PH\n\n\nEnglish (Singapore)\nen_SG\n\n\nEnglish (South Africa)\nen_ZA\n\n\nEnglish (United Kingdom)\nen_GB\n\n\nEnglish (United States)\nen_US\n\n\nEnglish\nen\n\n\nEstonian (Estonia)\net_EE\n\n\nEstonian\net\n\n\nFinnish (Finland)\nfi_FI\n\n\nFinnish\nfi\n\n\nFrench (Belgium)\nfr_BE\n\n\nFrench (Canada)\nfr_CA\n\n\nFrench (France)\nfr_FR\n\n\nFrench (Luxembourg)\nfr_LU\n\n\nFrench (Switzerland)\nfr_CH\n\n\nFrench\nfr\n\n\nGerman (Austria)\nde_AT\n\n\nGerman (Germany)\nde_DE\n\n\nGerman (Luxembourg)\nde_LU\n\n\nGerman (Switzerland)\nde_CH\n\n\nGerman\nde\n\n\nGreek (Cyprus)\nel_CY\n\n\nGreek (Greece)\nel_GR\n\n\nGreek\nel\n\n\nHebrew (Israel)\niw_IL\n\n\nHebrew\niw\n\n\nHindi (India)\nhi_IN\n\n\nHungarian (Hungary)\nhu_HU\n\n\nHungarian\nhu\n\n\nIcelandic (Iceland)\nis_IS\n\n\nIcelandic\nis\n\n\nIndonesian (Indonesia)\nin_ID\n\n\nIndonesian\nin\n\n\nIrish (Ireland)\nga_IE\n\n\nIrish\nga\n\n\nItalian (Italy)\nit_IT\n\n\nItalian (Switzerland)\nit_CH\n\n\nItalian\nit\n\n\nJapanese (Japan)\nja_JP\n\n\nJapanese (Japan,JP)\nja_JP_JP\n\n\nJapanese\nja\n\n\nKorean (South Korea)\nko_KR\n\n\nKorean\nko\n\n\nLatvian (Latvia)\nlv_LV\n\n\nLatvian\nlv\n\n\nLithuanian (Lithuania)\nlt_LT\n\n\nLithuanian\nlt\n\n\nMacedonian (Macedonia)\nmk_MK\n\n\nMacedonian\nmk\n\n\nMalay (Malaysia)\nms_MY\n\n\nMalay\nms\n\n\nMaltese (Malta)\nmt_MT\n\n\nMaltese\nmt\n\n\nNorwegian (Norway)\nno_NO\n\n\nNorwegian (Norway,Nynorsk)\nno_NO_NY\n\n\nNorwegian\nno\n\n\nPolish (Poland)\npl_PL\n\n\nPolish\npl\n\n\nPortuguese (Brazil)\npt_BR\n\n\nPortuguese (Portugal)\npt_PT\n\n\nPortuguese\npt\n\n\nRomanian (Romania)\nro_RO\n\n\nRomanian\nro\n\n\nRussian (Russia)\nru_RU\n\n\nRussian\nru\n\n\nSerbian (Bosnia and Herzegovina)\nsr_BA\n\n\nSerbian (Montenegro)\nsr_ME\n\n\nSerbian (Serbia and Montenegro)\nsr_CS\n\n\nSerbian (Serbia)\nsr_RS\n\n\nSerbian\nsr\n\n\nSlovak (Slovakia)\nsk_SK\n\n\nSlovak\nsk\n\n\nSlovenian (Slovenia)\nsl_SI\n\n\nSlovenian\nsl\n\n\nSpanish (Argentina)\nes_AR\n\n\nSpanish (Bolivia)\nes_BO\n\n\nSpanish (Chile)\nes_CL\n\n\nSpanish (Colombia)\nes_CO\n\n\nSpanish (Costa Rica)\nes_CR\n\n\nSpanish (Dominican Republic)\nes_DO\n\n\nSpanish (Ecuador)\nes_EC\n\n\nSpanish (El Salvador)\nes_SV\n\n\nSpanish (Guatemala)\nes_GT\n\n\nSpanish (Honduras)\nes_HN\n\n\nSpanish (Mexico)\nes_MX\n\n\nSpanish (Nicaragua)\nes_NI\n\n\nSpanish (Panama)\nes_PA\n\n\nSpanish (Paraguay)\nes_PY\n\n\nSpanish (Peru)\nes_PE\n\n\nSpanish (Puerto Rico)\nes_PR\n\n\nSpanish (Spain)\nes_ES\n\n\nSpanish (United States)\nes_US\n\n\nSpanish (Uruguay)\nes_UY\n\n\nSpanish (Venezuela)\nes_VE\n\n\nSpanish\nes\n\n\nSwedish (Sweden)\nsv_SE\n\n\nSwedish\nsv\n\n\nThai (Thailand)\nth_TH\n\n\nThai (Thailand,TH)\nth_TH_TH\n\n\nThai\nth\n\n\nTurkish (Turkey)\ntr_TR\n\n\nTurkish\ntr\n\n\nUkrainian (Ukraine)\nuk_UA\n\n\nUkrainian\nuk\n\n\nVietnamese (Vietnam)\nvi_VN\n\n\nVietnamese\nvi\n\n\n",
      "content_html": "<h1>Locale codes</h1>\n<p>Available locale codes (<code translate=\"no\">language_COUNTRY</code>) used by the <a href=\"23-languages.md#languages\"><code translate=\"no\">languages</code></a> option.</p>\n<table>\n<thead>\n<tr>\n<th>Locale</th>\n<th>Code</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Albanian (Albania)</td>\n<td>sq_AL</td>\n</tr>\n<tr>\n<td>Albanian</td>\n<td>sq</td>\n</tr>\n<tr>\n<td>Arabic (Algeria)</td>\n<td>ar_DZ</td>\n</tr>\n<tr>\n<td>Arabic (Bahrain)</td>\n<td>ar_BH</td>\n</tr>\n<tr>\n<td>Arabic (Egypt)</td>\n<td>ar_EG</td>\n</tr>\n<tr>\n<td>Arabic (Iraq)</td>\n<td>ar_IQ</td>\n</tr>\n<tr>\n<td>Arabic (Jordan)</td>\n<td>ar_JO</td>\n</tr>\n<tr>\n<td>Arabic (Kuwait)</td>\n<td>ar_KW</td>\n</tr>\n<tr>\n<td>Arabic (Lebanon)</td>\n<td>ar_LB</td>\n</tr>\n<tr>\n<td>Arabic (Libya)</td>\n<td>ar_LY</td>\n</tr>\n<tr>\n<td>Arabic (Morocco)</td>\n<td>ar_MA</td>\n</tr>\n<tr>\n<td>Arabic (Oman)</td>\n<td>ar_OM</td>\n</tr>\n<tr>\n<td>Arabic (Qatar)</td>\n<td>ar_QA</td>\n</tr>\n<tr>\n<td>Arabic (Saudi Arabia)</td>\n<td>ar_SA</td>\n</tr>\n<tr>\n<td>Arabic (Sudan)</td>\n<td>ar_SD</td>\n</tr>\n<tr>\n<td>Arabic (Syria)</td>\n<td>ar_SY</td>\n</tr>\n<tr>\n<td>Arabic (Tunisia)</td>\n<td>ar_TN</td>\n</tr>\n<tr>\n<td>Arabic (United Arab Emirates)</td>\n<td>ar_AE</td>\n</tr>\n<tr>\n<td>Arabic (Yemen)</td>\n<td>ar_YE</td>\n</tr>\n<tr>\n<td>Arabic</td>\n<td>ar</td>\n</tr>\n<tr>\n<td>Belarusian (Belarus)</td>\n<td>be_BY</td>\n</tr>\n<tr>\n<td>Belarusian</td>\n<td>be</td>\n</tr>\n<tr>\n<td>Bulgarian (Bulgaria)</td>\n<td>bg_BG</td>\n</tr>\n<tr>\n<td>Bulgarian</td>\n<td>bg</td>\n</tr>\n<tr>\n<td>Catalan (Spain)</td>\n<td>ca_ES</td>\n</tr>\n<tr>\n<td>Catalan</td>\n<td>ca</td>\n</tr>\n<tr>\n<td>Chinese (China)</td>\n<td>zh_CN</td>\n</tr>\n<tr>\n<td>Chinese (Hong Kong)</td>\n<td>zh_HK</td>\n</tr>\n<tr>\n<td>Chinese (Singapore)</td>\n<td>zh_SG</td>\n</tr>\n<tr>\n<td>Chinese (Taiwan)</td>\n<td>zh_TW</td>\n</tr>\n<tr>\n<td>Chinese</td>\n<td>zh</td>\n</tr>\n<tr>\n<td>Croatian (Croatia)</td>\n<td>hr_HR</td>\n</tr>\n<tr>\n<td>Croatian</td>\n<td>hr</td>\n</tr>\n<tr>\n<td>Czech (Czech Republic)</td>\n<td>cs_CZ</td>\n</tr>\n<tr>\n<td>Czech</td>\n<td>cs</td>\n</tr>\n<tr>\n<td>Danish (Denmark)</td>\n<td>da_DK</td>\n</tr>\n<tr>\n<td>Danish</td>\n<td>da</td>\n</tr>\n<tr>\n<td>Dutch (Belgium)</td>\n<td>nl_BE</td>\n</tr>\n<tr>\n<td>Dutch (Netherlands)</td>\n<td>nl_NL</td>\n</tr>\n<tr>\n<td>Dutch</td>\n<td>nl</td>\n</tr>\n<tr>\n<td>English (Australia)</td>\n<td>en_AU</td>\n</tr>\n<tr>\n<td>English (Canada)</td>\n<td>en_CA</td>\n</tr>\n<tr>\n<td>English (India)</td>\n<td>en_IN</td>\n</tr>\n<tr>\n<td>English (Ireland)</td>\n<td>en_IE</td>\n</tr>\n<tr>\n<td>English (Malta)</td>\n<td>en_MT</td>\n</tr>\n<tr>\n<td>English (New Zealand)</td>\n<td>en_NZ</td>\n</tr>\n<tr>\n<td>English (Philippines)</td>\n<td>en_PH</td>\n</tr>\n<tr>\n<td>English (Singapore)</td>\n<td>en_SG</td>\n</tr>\n<tr>\n<td>English (South Africa)</td>\n<td>en_ZA</td>\n</tr>\n<tr>\n<td>English (United Kingdom)</td>\n<td>en_GB</td>\n</tr>\n<tr>\n<td>English (United States)</td>\n<td>en_US</td>\n</tr>\n<tr>\n<td>English</td>\n<td>en</td>\n</tr>\n<tr>\n<td>Estonian (Estonia)</td>\n<td>et_EE</td>\n</tr>\n<tr>\n<td>Estonian</td>\n<td>et</td>\n</tr>\n<tr>\n<td>Finnish (Finland)</td>\n<td>fi_FI</td>\n</tr>\n<tr>\n<td>Finnish</td>\n<td>fi</td>\n</tr>\n<tr>\n<td>French (Belgium)</td>\n<td>fr_BE</td>\n</tr>\n<tr>\n<td>French (Canada)</td>\n<td>fr_CA</td>\n</tr>\n<tr>\n<td>French (France)</td>\n<td>fr_FR</td>\n</tr>\n<tr>\n<td>French (Luxembourg)</td>\n<td>fr_LU</td>\n</tr>\n<tr>\n<td>French (Switzerland)</td>\n<td>fr_CH</td>\n</tr>\n<tr>\n<td>French</td>\n<td>fr</td>\n</tr>\n<tr>\n<td>German (Austria)</td>\n<td>de_AT</td>\n</tr>\n<tr>\n<td>German (Germany)</td>\n<td>de_DE</td>\n</tr>\n<tr>\n<td>German (Luxembourg)</td>\n<td>de_LU</td>\n</tr>\n<tr>\n<td>German (Switzerland)</td>\n<td>de_CH</td>\n</tr>\n<tr>\n<td>German</td>\n<td>de</td>\n</tr>\n<tr>\n<td>Greek (Cyprus)</td>\n<td>el_CY</td>\n</tr>\n<tr>\n<td>Greek (Greece)</td>\n<td>el_GR</td>\n</tr>\n<tr>\n<td>Greek</td>\n<td>el</td>\n</tr>\n<tr>\n<td>Hebrew (Israel)</td>\n<td>iw_IL</td>\n</tr>\n<tr>\n<td>Hebrew</td>\n<td>iw</td>\n</tr>\n<tr>\n<td>Hindi (India)</td>\n<td>hi_IN</td>\n</tr>\n<tr>\n<td>Hungarian (Hungary)</td>\n<td>hu_HU</td>\n</tr>\n<tr>\n<td>Hungarian</td>\n<td>hu</td>\n</tr>\n<tr>\n<td>Icelandic (Iceland)</td>\n<td>is_IS</td>\n</tr>\n<tr>\n<td>Icelandic</td>\n<td>is</td>\n</tr>\n<tr>\n<td>Indonesian (Indonesia)</td>\n<td>in_ID</td>\n</tr>\n<tr>\n<td>Indonesian</td>\n<td>in</td>\n</tr>\n<tr>\n<td>Irish (Ireland)</td>\n<td>ga_IE</td>\n</tr>\n<tr>\n<td>Irish</td>\n<td>ga</td>\n</tr>\n<tr>\n<td>Italian (Italy)</td>\n<td>it_IT</td>\n</tr>\n<tr>\n<td>Italian (Switzerland)</td>\n<td>it_CH</td>\n</tr>\n<tr>\n<td>Italian</td>\n<td>it</td>\n</tr>\n<tr>\n<td>Japanese (Japan)</td>\n<td>ja_JP</td>\n</tr>\n<tr>\n<td>Japanese (Japan,JP)</td>\n<td>ja_JP_JP</td>\n</tr>\n<tr>\n<td>Japanese</td>\n<td>ja</td>\n</tr>\n<tr>\n<td>Korean (South Korea)</td>\n<td>ko_KR</td>\n</tr>\n<tr>\n<td>Korean</td>\n<td>ko</td>\n</tr>\n<tr>\n<td>Latvian (Latvia)</td>\n<td>lv_LV</td>\n</tr>\n<tr>\n<td>Latvian</td>\n<td>lv</td>\n</tr>\n<tr>\n<td>Lithuanian (Lithuania)</td>\n<td>lt_LT</td>\n</tr>\n<tr>\n<td>Lithuanian</td>\n<td>lt</td>\n</tr>\n<tr>\n<td>Macedonian (Macedonia)</td>\n<td>mk_MK</td>\n</tr>\n<tr>\n<td>Macedonian</td>\n<td>mk</td>\n</tr>\n<tr>\n<td>Malay (Malaysia)</td>\n<td>ms_MY</td>\n</tr>\n<tr>\n<td>Malay</td>\n<td>ms</td>\n</tr>\n<tr>\n<td>Maltese (Malta)</td>\n<td>mt_MT</td>\n</tr>\n<tr>\n<td>Maltese</td>\n<td>mt</td>\n</tr>\n<tr>\n<td>Norwegian (Norway)</td>\n<td>no_NO</td>\n</tr>\n<tr>\n<td>Norwegian (Norway,Nynorsk)</td>\n<td>no_NO_NY</td>\n</tr>\n<tr>\n<td>Norwegian</td>\n<td>no</td>\n</tr>\n<tr>\n<td>Polish (Poland)</td>\n<td>pl_PL</td>\n</tr>\n<tr>\n<td>Polish</td>\n<td>pl</td>\n</tr>\n<tr>\n<td>Portuguese (Brazil)</td>\n<td>pt_BR</td>\n</tr>\n<tr>\n<td>Portuguese (Portugal)</td>\n<td>pt_PT</td>\n</tr>\n<tr>\n<td>Portuguese</td>\n<td>pt</td>\n</tr>\n<tr>\n<td>Romanian (Romania)</td>\n<td>ro_RO</td>\n</tr>\n<tr>\n<td>Romanian</td>\n<td>ro</td>\n</tr>\n<tr>\n<td>Russian (Russia)</td>\n<td>ru_RU</td>\n</tr>\n<tr>\n<td>Russian</td>\n<td>ru</td>\n</tr>\n<tr>\n<td>Serbian (Bosnia and Herzegovina)</td>\n<td>sr_BA</td>\n</tr>\n<tr>\n<td>Serbian (Montenegro)</td>\n<td>sr_ME</td>\n</tr>\n<tr>\n<td>Serbian (Serbia and Montenegro)</td>\n<td>sr_CS</td>\n</tr>\n<tr>\n<td>Serbian (Serbia)</td>\n<td>sr_RS</td>\n</tr>\n<tr>\n<td>Serbian</td>\n<td>sr</td>\n</tr>\n<tr>\n<td>Slovak (Slovakia)</td>\n<td>sk_SK</td>\n</tr>\n<tr>\n<td>Slovak</td>\n<td>sk</td>\n</tr>\n<tr>\n<td>Slovenian (Slovenia)</td>\n<td>sl_SI</td>\n</tr>\n<tr>\n<td>Slovenian</td>\n<td>sl</td>\n</tr>\n<tr>\n<td>Spanish (Argentina)</td>\n<td>es_AR</td>\n</tr>\n<tr>\n<td>Spanish (Bolivia)</td>\n<td>es_BO</td>\n</tr>\n<tr>\n<td>Spanish (Chile)</td>\n<td>es_CL</td>\n</tr>\n<tr>\n<td>Spanish (Colombia)</td>\n<td>es_CO</td>\n</tr>\n<tr>\n<td>Spanish (Costa Rica)</td>\n<td>es_CR</td>\n</tr>\n<tr>\n<td>Spanish (Dominican Republic)</td>\n<td>es_DO</td>\n</tr>\n<tr>\n<td>Spanish (Ecuador)</td>\n<td>es_EC</td>\n</tr>\n<tr>\n<td>Spanish (El Salvador)</td>\n<td>es_SV</td>\n</tr>\n<tr>\n<td>Spanish (Guatemala)</td>\n<td>es_GT</td>\n</tr>\n<tr>\n<td>Spanish (Honduras)</td>\n<td>es_HN</td>\n</tr>\n<tr>\n<td>Spanish (Mexico)</td>\n<td>es_MX</td>\n</tr>\n<tr>\n<td>Spanish (Nicaragua)</td>\n<td>es_NI</td>\n</tr>\n<tr>\n<td>Spanish (Panama)</td>\n<td>es_PA</td>\n</tr>\n<tr>\n<td>Spanish (Paraguay)</td>\n<td>es_PY</td>\n</tr>\n<tr>\n<td>Spanish (Peru)</td>\n<td>es_PE</td>\n</tr>\n<tr>\n<td>Spanish (Puerto Rico)</td>\n<td>es_PR</td>\n</tr>\n<tr>\n<td>Spanish (Spain)</td>\n<td>es_ES</td>\n</tr>\n<tr>\n<td>Spanish (United States)</td>\n<td>es_US</td>\n</tr>\n<tr>\n<td>Spanish (Uruguay)</td>\n<td>es_UY</td>\n</tr>\n<tr>\n<td>Spanish (Venezuela)</td>\n<td>es_VE</td>\n</tr>\n<tr>\n<td>Spanish</td>\n<td>es</td>\n</tr>\n<tr>\n<td>Swedish (Sweden)</td>\n<td>sv_SE</td>\n</tr>\n<tr>\n<td>Swedish</td>\n<td>sv</td>\n</tr>\n<tr>\n<td>Thai (Thailand)</td>\n<td>th_TH</td>\n</tr>\n<tr>\n<td>Thai (Thailand,TH)</td>\n<td>th_TH_TH</td>\n</tr>\n<tr>\n<td>Thai</td>\n<td>th</td>\n</tr>\n<tr>\n<td>Turkish (Turkey)</td>\n<td>tr_TR</td>\n</tr>\n<tr>\n<td>Turkish</td>\n<td>tr</td>\n</tr>\n<tr>\n<td>Ukrainian (Ukraine)</td>\n<td>uk_UA</td>\n</tr>\n<tr>\n<td>Ukrainian</td>\n<td>uk</td>\n</tr>\n<tr>\n<td>Vietnamese (Vietnam)</td>\n<td>vi_VN</td>\n</tr>\n<tr>\n<td>Vietnamese</td>\n<td>vi</td>\n</tr>\n</tbody>\n</table>",
      "language": "en"
    }
  ]
}
