<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Emet CMS</title>
		<link>https://docs.emetcms.com/</link>
		<description>Recent content on Emet CMS</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
			<copyright>Documentation site content for Emet CMS. Theme based on [Hugo Book](https://github.com/alex-shpak/hugo-book) by [Alex Shpak](https://github.com/alex-shpak).
</copyright>
		
		
			<atom:link href="https://docs.emetcms.com/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Block shortcodes</title>
				<link>https://docs.emetcms.com/shortcodes/block-shortcodes/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/shortcodes/block-shortcodes/</guid>
				<description>&lt;p&gt;A block shortcode is one you&amp;rsquo;ve described in &lt;code&gt;site.yaml&lt;/code&gt;: its name, the parameters it takes and, optionally, what it should look like in the preview. In the visual editor it shows up as a card with a form, so whoever is writing doesn&amp;rsquo;t need to remember the parameter names or the quoting rules. In the file it&amp;rsquo;s the same &lt;code&gt;{{&amp;lt; name &amp;gt;}}&lt;/code&gt; text Hugo has always read.&lt;/p&gt;&#xA;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;a class=&#34;anchor&#34; href=&#34;#configuration&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Define them under &lt;code&gt;shortcodes&lt;/code&gt;:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cloudflare Pages</title>
				<link>https://docs.emetcms.com/deployment/cloudflare-pages/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/deployment/cloudflare-pages/</guid>
				<description>&lt;p&gt;Cloudflare Pages is where Emet is designed to be deployed. The repository&amp;rsquo;s &lt;code&gt;functions/&lt;/code&gt; directory is a set of Pages Functions, so the OAuth token exchange that sign-in depends on gets deployed alongside the static files without any extra setup. Hosting is free at the scale a CMS runs at, and you get HTTPS and a &lt;code&gt;*.pages.dev&lt;/code&gt; hostname out of the box.&lt;/p&gt;&#xA;&lt;p&gt;There are two ways to get the build onto Pages: push it yourself with wrangler, or connect the repository and let Cloudflare build it on every push. The first is quicker to try; the second is nicer to live with.&lt;/p&gt;</description>
			</item>
			<item>
				<title>CSS preview</title>
				<link>https://docs.emetcms.com/preview/css-preview/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/preview/css-preview/</guid>
				<description>&lt;p&gt;The CSS preview renders your Markdown in the browser (with the same remark and rehype pipeline the visual editor uses) and puts the result in a sandboxed frame, where it can be styled with your site&amp;rsquo;s actual stylesheets. You don&amp;rsquo;t get Hugo&amp;rsquo;s layouts, but you do get your fonts, colours and spacing, which is most of what matters while you&amp;rsquo;re writing. It updates half a second after you stop typing.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Entries</title>
				<link>https://docs.emetcms.com/content-management/entries/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/entries/</guid>
				<description>&lt;p&gt;An entry is a Hugo content file: frontmatter on top, Markdown underneath. Emet reads the frontmatter into a form, hands the body to the editor, and on save writes the whole thing back as the same kind of file you&amp;rsquo;d have written by hand. If you open the file in a text editor afterwards, it should look like you did.&lt;/p&gt;&#xA;&lt;p&gt;Which folders show up, and which fields each entry has, comes from the &lt;code&gt;sections&lt;/code&gt; block of &lt;code&gt;admin/site.yaml&lt;/code&gt;. See &lt;a href=&#34;https://docs.emetcms.com/configuration/sections/&#34;&gt;Sections&lt;/a&gt; for the config; this page is about what you do with them.&lt;/p&gt;</description>
			</item>
			<item>
				<title>GitHub App</title>
				<link>https://docs.emetcms.com/integrations/github-app/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/integrations/github-app/</guid>
				<description>&lt;p&gt;Emet needs a GitHub token to read and write your repository. The quick way to get one is a personal access token, and Emet still accepts those, but asking every editor to generate a PAT with the right scopes is a faff and they expire at awkward moments. A GitHub App gives you a &lt;strong&gt;Sign in with GitHub&lt;/strong&gt; button instead, with short-lived tokens that Emet refreshes itself.&lt;/p&gt;&#xA;&lt;p&gt;Under the hood this is the OAuth authorization code flow with PKCE. The browser sends people to GitHub, GitHub sends them back with a code, and a Pages Function at &lt;code&gt;/api/github/token&lt;/code&gt; swaps the code for a token, adding the app&amp;rsquo;s client secret on the way. The secret never reaches the browser.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Installation</title>
				<link>https://docs.emetcms.com/desktop-app/installation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/desktop-app/installation/</guid>
				<description>&lt;p&gt;There are no prebuilt downloads of the desktop app at the moment, so installing it means building it from the repository. The build is driven by &lt;a href=&#34;https://electron-vite.org/&#34;&gt;electron-vite&lt;/a&gt;, and packaging into an installer by &lt;a href=&#34;https://www.electron.build/&#34;&gt;electron-builder&lt;/a&gt;; both are already in &lt;code&gt;devDependencies&lt;/code&gt;, so there&amp;rsquo;s nothing to install beyond &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-youll-need&#34;&gt;What you&amp;rsquo;ll need&lt;a class=&#34;anchor&#34; href=&#34;#what-youll-need&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Node.js 22.12 or later, with npm.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gohugo.io/installation/&#34;&gt;Hugo&lt;/a&gt; on your &lt;code&gt;PATH&lt;/code&gt;, if you want the live preview. The app runs without it; you just won&amp;rsquo;t get the &lt;a href=&#34;https://docs.emetcms.com/desktop-app/local-hugo-server/&#34;&gt;Hugo server&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A Hugo site with an &lt;code&gt;admin/site.yaml&lt;/code&gt; in it (&lt;code&gt;admin/cms.yaml&lt;/code&gt; is optional, as everywhere else). If yours doesn&amp;rsquo;t have one yet, running the web dev server against it once (&lt;code&gt;HUGO_ROOT=/path/to/site npm run dev&lt;/code&gt;, see &lt;a href=&#34;https://docs.emetcms.com/getting-started/installation/&#34;&gt;Installation&lt;/a&gt;) writes both files.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;running-from-source&#34;&gt;Running from source&lt;a class=&#34;anchor&#34; href=&#34;#running-from-source&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Clone and install as for the web version, then start Electron in development mode:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction</title>
				<link>https://docs.emetcms.com/getting-started/introduction/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/getting-started/introduction/</guid>
				<description>&lt;p&gt;Emet is a CMS for &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; sites that runs entirely in your browser. There&amp;rsquo;s no application server and no database: you log in with GitHub, pick a repository, and Emet reads and writes your Markdown files through GitHub&amp;rsquo;s API. Your site repository stays the single source of truth for your content, which is where it should be.&lt;/p&gt;&#xA;&lt;p&gt;Think of it as an alternate, Hugo-aware frontend for GitHub.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-this-exists&#34;&gt;Why this exists&lt;a class=&#34;anchor&#34; href=&#34;#why-this-exists&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Static sites are great right up until someone who isn&amp;rsquo;t you needs to edit one. Hugo&amp;rsquo;s answer to &amp;ldquo;add a post&amp;rdquo; is &lt;code&gt;hugo new&lt;/code&gt; and a text editor, which is fine for me and useless for most other people. The usual fix is a headless CMS, which means a hosted service, a database and another thing that can go down. I wanted the editing experience without the extra infrastructure, so Emet treats the Git repository as the database and GitHub as the backend.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Local development</title>
				<link>https://docs.emetcms.com/developer/local-development/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/developer/local-development/</guid>
				<description>&lt;p&gt;Developing Emet means running the Vite dev server against a Hugo site. Most of the time that&amp;rsquo;s a site on your disk, with no GitHub involved at all; when you&amp;rsquo;re working on something GitHub-specific there&amp;rsquo;s a mode for that too. This page covers both, plus the full list of npm scripts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-youll-need&#34;&gt;What you&amp;rsquo;ll need&lt;a class=&#34;anchor&#34; href=&#34;#what-youll-need&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Node.js 22.12 or later, with npm.&lt;/li&gt;&#xA;&lt;li&gt;A Hugo site to point at. Any site will do, though one with a few sections, some shortcodes and a theme will exercise more of the code. If you don&amp;rsquo;t have one, Emet will fall back to some built-in demo content.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;getting-it-running&#34;&gt;Getting it running&lt;a class=&#34;anchor&#34; href=&#34;#getting-it-running&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/dmyates/emetcms.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; emetcms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;HUGO_ROOT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/path/to/your/hugo/site npm run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open &lt;code&gt;http://localhost:5173&lt;/code&gt; and you should see the site&amp;rsquo;s sections in the sidebar. There&amp;rsquo;s no sign-in; the dev server signs you in as a made-up &amp;ldquo;Development User&amp;rdquo; and goes straight to the editor. If the site has no &lt;code&gt;admin/site.yaml&lt;/code&gt;, the dev server scans it and writes one (plus &lt;code&gt;admin/cms.yaml&lt;/code&gt;) first, so the very first load can take a second longer.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Providers</title>
				<link>https://docs.emetcms.com/ai/providers/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/ai/providers/</guid>
				<description>&lt;p&gt;Emet speaks to four kinds of provider: OpenAI, Anthropic, Google Gemini and anything with an OpenAI-compatible API (Ollama, LM Studio, Groq, vLLM and so on). You configure them in &lt;code&gt;admin/cms.yaml&lt;/code&gt;, and each person using the CMS either uses a key you&amp;rsquo;ve put in that file or adds their own in the &lt;strong&gt;AI Settings&lt;/strong&gt; modal.&lt;/p&gt;&#xA;&lt;h2 id=&#34;turning-ai-on&#34;&gt;Turning AI on&lt;a class=&#34;anchor&#34; href=&#34;#turning-ai-on&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;AI is off until &lt;code&gt;cms.yaml&lt;/code&gt; has an &lt;code&gt;ai:&lt;/code&gt; block. The shortest one that works is:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rules</title>
				<link>https://docs.emetcms.com/seo/rules/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/seo/rules/</guid>
				<description>&lt;p&gt;The SEO panel runs 26 rules. This page lists each one with what it checks, where the thresholds sit and how much it&amp;rsquo;s worth. The thresholds are hard-coded; the only things you can change are whether a rule runs and how much it weighs.&lt;/p&gt;&#xA;&lt;p&gt;Rules come in two flavours. Most are pass or fail: you get the full weight or nothing. A few are graduated, awarding a percentage of the weight depending on how close you are, and those are marked below. A rule that can&amp;rsquo;t be evaluated at all (no images for the alt-text rule, no sentences for readability) drops out of the score rather than counting against you.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Site config</title>
				<link>https://docs.emetcms.com/configuration/site-yaml/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/configuration/site-yaml/</guid>
				<description>&lt;p&gt;&lt;code&gt;admin/site.yaml&lt;/code&gt; describes your site to Emet: where the content is, what fields each kind of entry has, which shortcodes exist, where uploaded images go and which branches matter. It&amp;rsquo;s the file the &lt;a href=&#34;https://docs.emetcms.com/getting-started/setup-wizard/&#34;&gt;setup wizard&lt;/a&gt; writes, and the one you&amp;rsquo;ll edit most as the site changes shape.&lt;/p&gt;&#xA;&lt;p&gt;Everything in here is about the site rather than about how you like to work; preferences live in &lt;a href=&#34;https://docs.emetcms.com/configuration/cms-yaml/&#34;&gt;cms.yaml&lt;/a&gt;. Note that Emet only reads particular keys from each file, so &lt;code&gt;editor&lt;/code&gt; settings in &lt;code&gt;site.yaml&lt;/code&gt; do nothing, and neither do &lt;code&gt;preview.styles&lt;/code&gt; in &lt;code&gt;cms.yaml&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>String</title>
				<link>https://docs.emetcms.com/fields/string/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/string/</guid>
				<description>&lt;p&gt;String fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#string&#34;&gt;String section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Supported settings</title>
				<link>https://docs.emetcms.com/hugo-config-editor/supported-settings/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/hugo-config-editor/supported-settings/</guid>
				<description>&lt;p&gt;The visual mode of the Hugo Config tab doesn&amp;rsquo;t know what any particular Hugo setting means. It takes whatever keys are in your config, works out a control for each from the value&amp;rsquo;s type, and files them into sections. This page is about where things end up and what you can and can&amp;rsquo;t do with them there.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sections&#34;&gt;Sections&lt;a class=&#34;anchor&#34; href=&#34;#sections&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Section&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Keys shown&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Open by default&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Site Settings&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;baseURL&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;languageCode&lt;/code&gt;, &lt;code&gt;theme&lt;/code&gt;, &lt;code&gt;copyright&lt;/code&gt;, &lt;code&gt;paginate&lt;/code&gt;, &lt;code&gt;enableRobotsTXT&lt;/code&gt;, &lt;code&gt;enableGitInfo&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Yes&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Build Settings&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;buildDrafts&lt;/code&gt;, &lt;code&gt;buildFuture&lt;/code&gt;, &lt;code&gt;buildExpired&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;No&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Site Parameters&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Everything under &lt;code&gt;params&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Yes&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Permalinks&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;permalinks&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;No&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Menus&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;menu&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;No&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Markup&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;markup&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;No&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Languages&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;languages&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;No&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Other Settings&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Recognised top-level keys that have no section of their own: &lt;code&gt;defaultContentLanguage&lt;/code&gt;, &lt;code&gt;disableKinds&lt;/code&gt;, &lt;code&gt;summaryLength&lt;/code&gt;, &lt;code&gt;uglyURLs&lt;/code&gt;, &lt;code&gt;sitemap&lt;/code&gt;, &lt;code&gt;minify&lt;/code&gt;, &lt;code&gt;imaging&lt;/code&gt;, &lt;code&gt;privacy&lt;/code&gt;, &lt;code&gt;security&lt;/code&gt;, &lt;code&gt;services&lt;/code&gt;, &lt;code&gt;frontmatter&lt;/code&gt;, &lt;code&gt;caches&lt;/code&gt;, &lt;code&gt;related&lt;/code&gt;, &lt;code&gt;mediaTypes&lt;/code&gt;, &lt;code&gt;outputFormats&lt;/code&gt;, &lt;code&gt;deployment&lt;/code&gt; and the rest of Hugo&amp;rsquo;s documented root keys&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;No&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Sections other than the first three only appear when the config has something in them, and only those three have an &lt;strong&gt;Add field&lt;/strong&gt; button. To add a top-level key elsewhere, or a new nested block, use raw mode.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Translation workflow</title>
				<link>https://docs.emetcms.com/i18n/translation-workflow/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/i18n/translation-workflow/</guid>
				<description>&lt;p&gt;A translation in Emet is an ordinary entry that happens to live in another language&amp;rsquo;s directory. There&amp;rsquo;s no special translation state and nothing to approve; the workflow is just a quicker way of getting a correctly placed copy to start from, with the original beside you while you work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creating-a-translation&#34;&gt;Creating a translation&lt;a class=&#34;anchor&#34; href=&#34;#creating-a-translation&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In the entry list, open the card&amp;rsquo;s &lt;strong&gt;More actions&lt;/strong&gt; menu (the three dots) and click &lt;strong&gt;Translate&lt;/strong&gt;. The action only appears on sites with more than one language.&lt;/li&gt;&#xA;&lt;li&gt;In the &lt;strong&gt;Create Translation&lt;/strong&gt; dialog, pick the &lt;strong&gt;Target Language&lt;/strong&gt;. The dropdown lists only languages this entry doesn&amp;rsquo;t have a translation in yet; if it has them all, the dialog says so and there&amp;rsquo;s nothing to do.&lt;/li&gt;&#xA;&lt;li&gt;Choose what to &lt;strong&gt;Start from&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Copy of source&lt;/strong&gt; (the default) duplicates the whole source file, frontmatter and body, so you translate in place with the original text in front of you.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blank from archetype&lt;/strong&gt; gives you a fresh entry from the section&amp;rsquo;s archetype (the same template a new entry gets), keeping only the source&amp;rsquo;s title and its &lt;code&gt;translationKey&lt;/code&gt; if it has one. Pick this when the body is going to be rewritten rather than translated line by line.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Leave &lt;strong&gt;Open side-by-side with source&lt;/strong&gt; ticked if you want the original visible while you translate. It&amp;rsquo;s on by default.&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;strong&gt;Start Translation&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The translation goes to the same relative path under the target language&amp;rsquo;s directory, so &lt;code&gt;content/en/posts/hello.md&lt;/code&gt; becomes &lt;code&gt;content/fr/posts/hello.md&lt;/code&gt;. The whole path below the language directory is kept, subfolders and page bundles included: &lt;code&gt;content/en/posts/2024/hello.md&lt;/code&gt; becomes &lt;code&gt;content/fr/posts/2024/hello.md&lt;/code&gt;, and a bundle&amp;rsquo;s &lt;code&gt;content/en/posts/hello/index.md&lt;/code&gt; becomes &lt;code&gt;content/fr/posts/hello/index.md&lt;/code&gt;. On a site using &lt;a href=&#34;https://docs.emetcms.com/configuration/languages/#translation-by-filename&#34;&gt;translation by filename&lt;/a&gt; the copy stays in the same directory and gets the target language&amp;rsquo;s suffix instead: &lt;code&gt;content/posts/hello.md&lt;/code&gt; becomes &lt;code&gt;content/posts/hello.fr.md&lt;/code&gt;, and &lt;code&gt;content/posts/hello/index.de.md&lt;/code&gt; translated into the default language becomes &lt;code&gt;content/posts/hello/index.md&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Visual mode</title>
				<link>https://docs.emetcms.com/editor/visual-mode/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/editor/visual-mode/</guid>
				<description>&lt;p&gt;The visual editor is a WYSIWYG editor built on &lt;a href=&#34;https://tiptap.dev/&#34;&gt;Tiptap&lt;/a&gt;, which is a wrapper around ProseMirror. You write, you click buttons, you see formatted text. Under the hood, Emet converts what you see to Markdown on save and back again on load, so the file in your repository is plain Markdown that you could equally well edit in Vim.&lt;/p&gt;&#xA;&lt;p&gt;That round trip is the interesting part. Most WYSIWYG editors that claim to produce Markdown either produce HTML with a Markdown veneer, or lose things. Emet&amp;rsquo;s converter knows about GFM tables, task lists, footnotes, definition lists and Hugo shortcodes, and preserves them as the Markdown constructs they are. There are a few things Markdown has no syntax for, covered at the end of this page.&lt;/p&gt;</description>
			</item>
			<item>
				<title>AI chat</title>
				<link>https://docs.emetcms.com/ai/chat/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/ai/chat/</guid>
				<description>&lt;p&gt;The chat panel lives in the &lt;strong&gt;AI&lt;/strong&gt; tab of the editor&amp;rsquo;s right column, alongside SEO and Comments. It appears whenever &lt;code&gt;ai.enabled&lt;/code&gt; is true in &lt;code&gt;cms.yaml&lt;/code&gt;. It&amp;rsquo;s a conversation with the model about the entry you have open, and, unlike a chat window in another tab, it can act on what it says: change the frontmatter, rewrite a paragraph, search your other posts, generate an image.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-panel&#34;&gt;The panel&lt;a class=&#34;anchor&#34; href=&#34;#the-panel&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The header shows a status dot and the active provider and model, in the form &lt;code&gt;gemini · gemini-3.5-flash&lt;/code&gt;. Green means a provider is ready, pulsing yellow means it&amp;rsquo;s thinking and grey means there&amp;rsquo;s no key yet, with an &lt;strong&gt;Open settings&lt;/strong&gt; link that takes you to the key form. The cog on the right opens the same &lt;strong&gt;AI Settings&lt;/strong&gt; modal.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Bulk actions</title>
				<link>https://docs.emetcms.com/content-management/bulk-actions/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/bulk-actions/</guid>
				<description>&lt;p&gt;Renaming thirty files by hand is exactly the sort of job a CMS should do for you, and exactly the sort of job that&amp;rsquo;s miserable through a web form one file at a time. Bulk actions let you select entries in a section&amp;rsquo;s list and rename, move, publish, unpublish, edit a frontmatter field, create translations or delete the lot in one go. On GitHub-hosted sites each action is a single commit.&lt;/p&gt;</description>
			</item>
			<item>
				<title>CMS config</title>
				<link>https://docs.emetcms.com/configuration/cms-yaml/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/configuration/cms-yaml/</guid>
				<description>&lt;p&gt;&lt;code&gt;admin/cms.yaml&lt;/code&gt; is optional. It holds the settings that are about how Emet behaves rather than how your site is built: which editor opens by default, what the link dialog offers, which SEO rules count, the AI providers, whether entries need review and where the local Hugo server is. Delete the file and everything falls back to defaults, with one exception: AI features are off entirely until this file has an &lt;code&gt;ai:&lt;/code&gt; block.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Google Search Console</title>
				<link>https://docs.emetcms.com/integrations/google-search-console/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/integrations/google-search-console/</guid>
				<description>&lt;p&gt;The SEO panel can tell you whether a post ticks the boxes, but not whether anyone&amp;rsquo;s finding it. Search Console can. With this integration connected, the bottom of the SEO tab shows the page&amp;rsquo;s clicks, impressions, average click-through rate and average position for the last 28 days, and a table of the queries that brought people there, so you can see which words are already working before you decide what to optimise.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Inline shortcodes</title>
				<link>https://docs.emetcms.com/shortcodes/inline-shortcodes/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/shortcodes/inline-shortcodes/</guid>
				<description>&lt;p&gt;Hugo&amp;rsquo;s &lt;a href=&#34;https://gohugo.io/content-management/shortcodes/#inline-shortcodes&#34;&gt;inline shortcodes&lt;/a&gt; let you write a shortcode&amp;rsquo;s template inside the content file that uses it, instead of in &lt;code&gt;layouts/shortcodes/&lt;/code&gt;. They&amp;rsquo;re handy for one-off formatting that doesn&amp;rsquo;t deserve a layout file, and Emet supports them without any configuration, because everything it needs is in the page. (Hugo needs &lt;code&gt;enableInlineShortcodes = true&lt;/code&gt; in its config before it will render them.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-hugo-writes-them&#34;&gt;How Hugo writes them&lt;a class=&#34;anchor&#34; href=&#34;#how-hugo-writes-them&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;An inline shortcode has a name ending in &lt;code&gt;.inline&lt;/code&gt;. The first time it appears it carries its template between opening and closing tags; after that you can reuse it by name:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Installation</title>
				<link>https://docs.emetcms.com/getting-started/installation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/getting-started/installation/</guid>
				<description>&lt;p&gt;Emet is a Vite project. Installing it means cloning the repository and running &lt;code&gt;npm install&lt;/code&gt;; there&amp;rsquo;s nothing to scaffold and no database to set up.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-youll-need&#34;&gt;What you&amp;rsquo;ll need&lt;a class=&#34;anchor&#34; href=&#34;#what-youll-need&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Node.js 22.12 or later, with npm.&lt;/li&gt;&#xA;&lt;li&gt;A Hugo site to point it at. For local development this can be any folder on disk; for a deployed CMS it needs to be a GitHub repository.&lt;/li&gt;&#xA;&lt;li&gt;For a deployed CMS, a GitHub App so people can sign in. You don&amp;rsquo;t need this to run Emet locally, so skip it for now and come back to &lt;a href=&#34;https://docs.emetcms.com/integrations/github-app/&#34;&gt;GitHub App setup&lt;/a&gt; when you&amp;rsquo;re ready to deploy.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cloning-and-installing&#34;&gt;Cloning and installing&lt;a class=&#34;anchor&#34; href=&#34;#cloning-and-installing&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/dmyates/emetcms.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; emetcms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s the whole install.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Local Hugo server</title>
				<link>https://docs.emetcms.com/desktop-app/local-hugo-server/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/desktop-app/local-hugo-server/</guid>
				<description>&lt;p&gt;The CSS-based preview in the browser is a reconstruction of what Hugo would render, and for anything beyond plain Markdown it&amp;rsquo;s a guess. The desktop app can do better because it has a real filesystem and, if you&amp;rsquo;ve installed it, a real Hugo. It starts &lt;code&gt;hugo server&lt;/code&gt; for the site you&amp;rsquo;ve opened and shows the actual rendered page in the preview pane, with Hugo&amp;rsquo;s live reload rebuilding it every time you save.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Markdown mode</title>
				<link>https://docs.emetcms.com/editor/markdown-mode/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/editor/markdown-mode/</guid>
				<description>&lt;p&gt;The Markdown editor shows you the file as it is: frontmatter aside, exactly the text Hugo will read. It&amp;rsquo;s built on &lt;a href=&#34;https://codemirror.net/&#34;&gt;CodeMirror 6&lt;/a&gt;, so you get syntax highlighting, search, folding, multiple cursors and, if you want it, Vim. You&amp;rsquo;ll want it for anything the visual editor can&amp;rsquo;t express cleanly, raw HTML mostly, and for the days when you&amp;rsquo;d rather just type.&lt;/p&gt;&#xA;&lt;h2 id=&#34;switching-modes&#34;&gt;Switching modes&lt;a class=&#34;anchor&#34; href=&#34;#switching-modes&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Markdown&lt;/strong&gt; button at the far right of the visual editor&amp;rsquo;s toolbar brings you here; the &lt;strong&gt;Visual&lt;/strong&gt; button at the far right of this one takes you back. Emet remembers your choice. The &lt;code&gt;editor.default_mode&lt;/code&gt; setting in &lt;code&gt;cms.yaml&lt;/code&gt; only decides which mode you see before you&amp;rsquo;ve made that choice; see &lt;a href=&#34;https://docs.emetcms.com/editor/visual-mode/#switching-modes&#34;&gt;Visual mode&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Social previews</title>
				<link>https://docs.emetcms.com/seo/social-previews/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/seo/social-previews/</guid>
				<description>&lt;p&gt;When someone pastes a link to your post into LinkedIn or a group chat, the platform fetches the page and builds a card from its Open Graph tags: title, description, image. You usually find out what that card looks like after you&amp;rsquo;ve shared it, which is the wrong way round. The &lt;strong&gt;Social Preview&lt;/strong&gt; section of the SEO panel shows you the card before you publish.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-see&#34;&gt;What you see&lt;a class=&#34;anchor&#34; href=&#34;#what-you-see&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Expand &lt;strong&gt;Social Preview&lt;/strong&gt; in the SEO tab and you get a tab strip for &lt;strong&gt;LinkedIn&lt;/strong&gt;, &lt;strong&gt;X/Twitter&lt;/strong&gt; and &lt;strong&gt;Facebook&lt;/strong&gt;, a mock-up of the card, and character counters underneath. The mock-ups follow each platform&amp;rsquo;s current layout:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Template interpolation</title>
				<link>https://docs.emetcms.com/preview/template-interpolation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/preview/template-interpolation/</guid>
				<description>&lt;p&gt;An &lt;a href=&#34;https://docs.emetcms.com/shortcodes/inline-shortcodes/&#34;&gt;inline shortcode&lt;/a&gt; carries its Go template in the page, so the preview pane has the template right there. It can&amp;rsquo;t run it, since there&amp;rsquo;s no Hugo in the browser, but it can do the next best thing: find the places where the template reads its parameters, drop the values in and throw away whatever&amp;rsquo;s left. This page is about how far that gets you.&lt;/p&gt;&#xA;&lt;p&gt;It only applies to inline shortcodes. Block shortcodes use the &lt;code&gt;{{field}}&lt;/code&gt; &lt;a href=&#34;https://docs.emetcms.com/shortcodes/preview-templates/&#34;&gt;preview templates&lt;/a&gt; from &lt;code&gt;site.yaml&lt;/code&gt;, and Emet never reads your &lt;code&gt;layouts/shortcodes/*.html&lt;/code&gt; files in the preview.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing</title>
				<link>https://docs.emetcms.com/developer/testing/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/developer/testing/</guid>
				<description>&lt;p&gt;Emet&amp;rsquo;s tests run on &lt;a href=&#34;https://vitest.dev/&#34;&gt;Vitest&lt;/a&gt;, with jsdom standing in for the browser and &lt;a href=&#34;https://testing-library.com/&#34;&gt;Testing Library&lt;/a&gt; for anything that renders. There are a little over a hundred test files, sitting next to the code they test, and they cover most of the subsystems: frontmatter parsing, slugs and filenames, config loading and defaults, the sync service, shortcode and table serialisation, the SEO rules, the Hugo config parser, the AI client and providers, the GitHub client and pull request helpers and a fair few hooks and components.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Text</title>
				<link>https://docs.emetcms.com/fields/text/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/text/</guid>
				<description>&lt;p&gt;Text fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#text&#34;&gt;Text section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Architecture</title>
				<link>https://docs.emetcms.com/developer/architecture/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/developer/architecture/</guid>
				<description>&lt;p&gt;Emet is a React and TypeScript single-page app, built with Vite, that treats a Git repository as its database. This page is a tour of how that works: the backends that read and write content, how a running copy decides which one it&amp;rsquo;s using, where configuration comes from, how state is kept and what the build produces. It&amp;rsquo;s meant to be read before you go poking around in &lt;code&gt;src/&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-theres-no-backend&#34;&gt;Why there&amp;rsquo;s no backend&lt;a class=&#34;anchor&#34; href=&#34;#why-theres-no-backend&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The design decision everything else follows from is that Emet has no application server. The site repository already holds the content, Git already keeps the history, and GitHub already has an API for reading and writing files, opening pull requests and checking CI. Putting a server and a database in front of that would mean a second copy of the content, a sync problem between the two and another thing to host and keep patched. I didn&amp;rsquo;t want any of those, so the browser talks to GitHub directly and the repository stays the single source of truth.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Data files</title>
				<link>https://docs.emetcms.com/content-management/data-files/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/data-files/</guid>
				<description>&lt;p&gt;Hugo&amp;rsquo;s &lt;code&gt;data/&lt;/code&gt; directory holds structured data that isn&amp;rsquo;t a page: navigation menus, author profiles, pricing tables, anything your templates read through &lt;code&gt;.Site.Data&lt;/code&gt;. These are plain YAML, JSON or TOML files with no frontmatter and no body, which makes them a poor fit for the entry editor and a good fit for a form.&lt;/p&gt;&#xA;&lt;p&gt;Choose &lt;strong&gt;Data&lt;/strong&gt; in the sidebar to browse the whole directory, nested folders and all. There&amp;rsquo;s nothing to configure: every &lt;code&gt;.yaml&lt;/code&gt;, &lt;code&gt;.yml&lt;/code&gt;, &lt;code&gt;.json&lt;/code&gt; and &lt;code&gt;.toml&lt;/code&gt; file under &lt;code&gt;data/&lt;/code&gt; shows up (or under &lt;code&gt;&amp;lt;base_path&amp;gt;/data/&lt;/code&gt; if you&amp;rsquo;ve set a base path). Files are listed by name with a format badge, folders are listed above them, and the breadcrumbs start at &lt;strong&gt;Data&lt;/strong&gt; so you can get back out of a nested folder. An amber dot marks a file with unsaved changes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hugo server preview</title>
				<link>https://docs.emetcms.com/preview/hugo-server/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/preview/hugo-server/</guid>
				<description>&lt;p&gt;The &lt;a href=&#34;https://docs.emetcms.com/preview/css-preview/&#34;&gt;CSS preview&lt;/a&gt; is a good approximation, but it&amp;rsquo;s still an approximation: no layouts, no partials, and shortcodes rendered from stand-in templates. If Hugo is installed on the machine Emet is running on, you can skip all that and look at the real page. Emet loads it from a &lt;code&gt;hugo server&lt;/code&gt; in the preview pane, and Hugo&amp;rsquo;s live reload keeps it current.&lt;/p&gt;&#xA;&lt;p&gt;This needs Hugo on the same machine as Emet, so it&amp;rsquo;s only available in two situations:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Inline actions</title>
				<link>https://docs.emetcms.com/ai/inline-actions/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/ai/inline-actions/</guid>
				<description>&lt;p&gt;Most of the time you don&amp;rsquo;t want a conversation; you want this sentence to be shorter. Inline actions are the one-click version of AI: select some text in the visual editor, pick an action, and the selection is replaced with the result. No chat, no confirmation, and &lt;code&gt;Ctrl+Z&lt;/code&gt; if you don&amp;rsquo;t like it.&lt;/p&gt;&#xA;&lt;p&gt;They only exist in the visual editor. In Markdown mode you&amp;rsquo;ll want the &lt;a href=&#34;https://docs.emetcms.com/ai/chat/&#34;&gt;chat panel&lt;/a&gt; instead.&lt;/p&gt;&#xA;&lt;h2 id=&#34;opening-the-menu&#34;&gt;Opening the menu&lt;a class=&#34;anchor&#34; href=&#34;#opening-the-menu&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Select some text. The small floating toolbar that appears above it has an &lt;strong&gt;AI&lt;/strong&gt; button on the right, as long as a provider is configured and ready. Click it, or press &lt;code&gt;Ctrl+J&lt;/code&gt; (&lt;code&gt;Cmd+J&lt;/code&gt; on a Mac), and the actions menu opens below the selection. The shortcut is &lt;code&gt;ai.shortcuts.inlineAction&lt;/code&gt; in &lt;code&gt;cms.yaml&lt;/code&gt; if you want a different one.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Keyboard shortcuts</title>
				<link>https://docs.emetcms.com/editor/shortcuts/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/editor/shortcuts/</guid>
				<description>&lt;p&gt;Every binding Emet responds to, in one place. &lt;code&gt;Ctrl&lt;/code&gt; means &lt;code&gt;Cmd&lt;/code&gt; on a Mac unless a table says otherwise. Most of the visual editor&amp;rsquo;s bindings are &lt;a href=&#34;https://tiptap.dev/&#34;&gt;Tiptap&lt;/a&gt;&amp;rsquo;s defaults and most of the Markdown editor&amp;rsquo;s are &lt;a href=&#34;https://codemirror.net/&#34;&gt;CodeMirror&lt;/a&gt;&amp;rsquo;s, so if you&amp;rsquo;ve used either before, your fingers already know a lot of this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;everywhere&#34;&gt;Everywhere&lt;a class=&#34;anchor&#34; href=&#34;#everywhere&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Shortcut&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Action&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Ctrl+S&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Save the open entry (does nothing if there&amp;rsquo;s nothing to save)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Ctrl+.&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Toggle focus mode (needs an entry open)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Leave focus mode, unless a dialog is open&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Ctrl+F&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Jump to the entry list filter, when you&amp;rsquo;re not inside an editor&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Ctrl+K&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Search every section by title or body text, when you&amp;rsquo;re not inside an editor&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Note that &lt;code&gt;Esc&lt;/code&gt; leaving focus mode includes the &lt;code&gt;Esc&lt;/code&gt; you press to get out of insert mode in Vim, so in focus mode you&amp;rsquo;ll want &lt;code&gt;jj&lt;/code&gt; instead.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Markdown</title>
				<link>https://docs.emetcms.com/fields/markdown/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/markdown/</guid>
				<description>&lt;p&gt;Markdown fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#markdown&#34;&gt;Markdown section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Preview templates</title>
				<link>https://docs.emetcms.com/shortcodes/preview-templates/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/shortcodes/preview-templates/</guid>
				<description>&lt;p&gt;A shortcode card in the editor tells you what the parameters are, not what the result looks like. The preview pane is where that happens, and the &lt;code&gt;preview&lt;/code&gt; property on a block shortcode is the HTML it uses. Emet can&amp;rsquo;t run your Hugo templates in the browser, so you give it a simplified stand-in with the field values dropped in.&lt;/p&gt;&#xA;&lt;p&gt;This mostly affects the &lt;a href=&#34;https://docs.emetcms.com/preview/css-preview/&#34;&gt;preview pane&lt;/a&gt;. A block card in the visual editor never renders it; the one place it shows up in the editor is the label on a chip for a shortcode sitting inside a sentence.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sections</title>
				<link>https://docs.emetcms.com/configuration/sections/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/configuration/sections/</guid>
				<description>&lt;p&gt;A section is a folder of content whose entries share a set of frontmatter fields: posts, pages, projects, docs. The &lt;code&gt;sections&lt;/code&gt; block of &lt;code&gt;site.yaml&lt;/code&gt; is where you tell Emet which folders those are and what the form for each one should look like. The sidebar lists the sections, the entry list shows what&amp;rsquo;s in the one you pick, and the frontmatter panel is built from its &lt;code&gt;fields&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-section&#34;&gt;A section&lt;a class=&#34;anchor&#34; href=&#34;#a-section&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;sections&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;blog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Blog posts&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label_singular&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Blog post&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;folder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;content/blog&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{year}}/{{slug}}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fields&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shortcodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The key (&lt;code&gt;blog&lt;/code&gt; here) identifies the section. It&amp;rsquo;s also the default folder and label, so &lt;code&gt;blog: {}&lt;/code&gt; is a valid section: Emet will look in &lt;code&gt;content/blog&lt;/code&gt;, call it &amp;ldquo;blog&amp;rdquo; and show no configured fields. You&amp;rsquo;d still be able to edit entries, because frontmatter keys that aren&amp;rsquo;t in the config are shown anyway (see &lt;a href=&#34;https://docs.emetcms.com/content-management/entries/#the-frontmatter-form&#34;&gt;Entries&lt;/a&gt;), but you&amp;rsquo;d lose the type-appropriate widgets.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Self-hosting</title>
				<link>https://docs.emetcms.com/deployment/self-hosting/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/deployment/self-hosting/</guid>
				<description>&lt;p&gt;You can serve Emet&amp;rsquo;s &lt;code&gt;dist/&lt;/code&gt; directory from Netlify, Vercel, GitHub Pages, nginx or anywhere else that serves files. The static part is genuinely that simple. What those platforms don&amp;rsquo;t run is the OAuth token exchange in &lt;code&gt;functions/&lt;/code&gt;, and without it nobody can sign in. So this page is mostly about that one endpoint, and only briefly about the hosting.&lt;/p&gt;&#xA;&lt;p&gt;If you haven&amp;rsquo;t read &lt;a href=&#34;https://docs.emetcms.com/deployment/&#34;&gt;Deployment&lt;/a&gt; for why the endpoint exists, do that first.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Setup wizard</title>
				<link>https://docs.emetcms.com/getting-started/setup-wizard/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/getting-started/setup-wizard/</guid>
				<description>&lt;p&gt;Emet needs an &lt;code&gt;admin/site.yaml&lt;/code&gt; in your repository before it can show you anything, and writing one by hand for a site with a dozen sections is tedious. The setup wizard does it for you: it scans the repository, guesses sections, fields and shortcodes from what&amp;rsquo;s already there, and commits the result.&lt;/p&gt;&#xA;&lt;h2 id=&#34;when-it-runs&#34;&gt;When it runs&lt;a class=&#34;anchor&#34; href=&#34;#when-it-runs&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The wizard appears when you&amp;rsquo;ve signed in, picked a repository and branch, and Emet can&amp;rsquo;t find &lt;code&gt;admin/site.yaml&lt;/code&gt; on that branch (or &lt;code&gt;&amp;lt;base_path&amp;gt;/admin/site.yaml&lt;/code&gt; if your site is in a subdirectory). There&amp;rsquo;s no button for it anywhere; it only triggers on a missing config.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Archetypes</title>
				<link>https://docs.emetcms.com/content-management/archetypes/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/archetypes/</guid>
				<description>&lt;p&gt;Hugo archetypes are the templates &lt;code&gt;hugo new&lt;/code&gt; uses to stamp out a content file: some frontmatter, perhaps a placeholder body, with Go template variables for the title and date. Emet uses them the same way when you create an entry, and gives you a small editor for them so you don&amp;rsquo;t have to leave the CMS to change what a new post starts with.&lt;/p&gt;&#xA;&lt;h2 id=&#34;which-archetype-applies&#34;&gt;Which archetype applies&lt;a class=&#34;anchor&#34; href=&#34;#which-archetype-applies&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When you create an entry, Emet works out the section path from the folder you&amp;rsquo;re in. &lt;code&gt;content/blog&lt;/code&gt; becomes &lt;code&gt;blog&lt;/code&gt;, and &lt;code&gt;content/en/resources/tutorials&lt;/code&gt; becomes &lt;code&gt;resources/tutorials&lt;/code&gt; (the language prefix and any &lt;code&gt;base_path&lt;/code&gt; are stripped). If you&amp;rsquo;ve drilled into a subfolder, that&amp;rsquo;s included too. It then tries, in order:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Number</title>
				<link>https://docs.emetcms.com/fields/number/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/number/</guid>
				<description>&lt;p&gt;Number fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#number&#34;&gt;Number section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Page builder</title>
				<link>https://docs.emetcms.com/ai/page-builder/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/ai/page-builder/</guid>
				<description>&lt;p&gt;The page builder is for the blank-page problem. You describe a page (&amp;ldquo;a landing page for the new pricing tiers, with a comparison table and an FAQ&amp;rdquo;) and the model drafts the whole thing: YAML frontmatter that matches your section&amp;rsquo;s fields and a Markdown body that uses your shortcodes. You review it, tweak it and apply it to the editor.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a draft, not a finished page. The useful part is that it knows your site&amp;rsquo;s vocabulary.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Quick start</title>
				<link>https://docs.emetcms.com/getting-started/quick-start/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/getting-started/quick-start/</guid>
				<description>&lt;p&gt;This page goes from a fresh clone to editing a Hugo site, first locally and then through GitHub. If you only want to try Emet out, the local part is enough and takes about two minutes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;editing-a-local-site&#34;&gt;Editing a local site&lt;a class=&#34;anchor&#34; href=&#34;#editing-a-local-site&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Clone and install:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/dmyates/emetcms.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; emetcms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then start the dev server with &lt;code&gt;HUGO_ROOT&lt;/code&gt; pointing at your Hugo site:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;HUGO_ROOT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/path/to/your/hugo/site npm run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open &lt;code&gt;http://localhost:5173&lt;/code&gt;. There&amp;rsquo;s no login in this mode. The sidebar lists your content sections, and clicking an entry opens it with its frontmatter as a form above the body. Edit something and press &lt;strong&gt;Save&lt;/strong&gt;; the file on disk changes and nothing else happens. If you have &lt;code&gt;hugo server&lt;/code&gt; running in another terminal, the preview pane can show you the real rendered page.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Boolean</title>
				<link>https://docs.emetcms.com/fields/boolean/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/boolean/</guid>
				<description>&lt;p&gt;Boolean fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#boolean&#34;&gt;Boolean section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Image generation</title>
				<link>https://docs.emetcms.com/ai/image-generation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/ai/image-generation/</guid>
				<description>&lt;p&gt;Every post wants a header image and most of us don&amp;rsquo;t have one. The image generator takes a prompt, gets an image back from OpenAI or Gemini, uploads it to your media folder and drops it into the body or a frontmatter image field. There&amp;rsquo;s also an &lt;strong&gt;Edit with AI&lt;/strong&gt; route for images you already have.&lt;/p&gt;&#xA;&lt;p&gt;It needs a provider that can make images, which means OpenAI (&lt;code&gt;gpt-image-2&lt;/code&gt;) or Gemini (&lt;code&gt;gemini-3-pro-image-preview&lt;/code&gt; or &lt;code&gt;gemini-2.5-flash-image&lt;/code&gt;). Anthropic can&amp;rsquo;t, and custom endpoints are never asked to. If your current provider is the wrong one, the modal says so and points you at AI Settings.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Media</title>
				<link>https://docs.emetcms.com/configuration/media/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/configuration/media/</guid>
				<description>&lt;p&gt;The &lt;code&gt;media&lt;/code&gt; block says where uploaded files go in the repository and what URL they&amp;rsquo;ll have on the site. Everything that puts a file in your repository uses it: the media library, images pasted or dropped into the editor, image fields and AI-generated images.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;media&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;folder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;static/images&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;public_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/images&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max_size_mb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;accept&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;image/png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;image/jpeg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;image/webp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;image/gif&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;image/svg+xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Key&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;What it does&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Default&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;folder&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Where uploads are committed, relative to the Hugo root. Prefixed with &lt;code&gt;base_path&lt;/code&gt; if you have one.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;static/images&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;public_path&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;The URL prefix for those files on the built site. This is what gets written into your Markdown and frontmatter.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;/images&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;max_size_mb&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Upload size limit in megabytes.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;accept&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Which files are allowed.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;the five image types above&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The whole block is optional, as is each key in it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Media library</title>
				<link>https://docs.emetcms.com/content-management/media-library/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/media-library/</guid>
				<description>&lt;p&gt;Images in a Hugo site are just files in &lt;code&gt;static/&lt;/code&gt;, referenced by path. The media library is a modal for browsing that folder, uploading into it and picking a path to insert, so you don&amp;rsquo;t have to remember whether it was &lt;code&gt;/images/2026/hero.jpg&lt;/code&gt; or &lt;code&gt;/img/hero.jpg&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It opens from the image button in the editor toolbar, from &lt;strong&gt;Browse&lt;/strong&gt; on &lt;a href=&#34;https://docs.emetcms.com/fields/#image&#34;&gt;image and file fields&lt;/a&gt;, and on its own when you drop or paste a single image into the editor.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Data browsing</title>
				<link>https://docs.emetcms.com/configuration/data-sections/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/configuration/data-sections/</guid>
				<description>&lt;p&gt;Hugo&amp;rsquo;s &lt;code&gt;data/&lt;/code&gt; directory doesn&amp;rsquo;t need any configuration. There&amp;rsquo;s always a &lt;strong&gt;Data&lt;/strong&gt; entry at the bottom of the sidebar, and it browses every &lt;code&gt;.json&lt;/code&gt;, &lt;code&gt;.yaml&lt;/code&gt;, &lt;code&gt;.yml&lt;/code&gt; and &lt;code&gt;.toml&lt;/code&gt; file under &lt;code&gt;data/&lt;/code&gt;, nested folders included. You can create files and folders from there too, even if the directory doesn&amp;rsquo;t exist yet. New files default to YAML, with JSON and TOML a click away.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve set &lt;code&gt;base_path&lt;/code&gt;, the browser uses that site&amp;rsquo;s &lt;code&gt;data/&lt;/code&gt; directory (&lt;code&gt;docs/data/&lt;/code&gt; for a site in &lt;code&gt;docs/&lt;/code&gt;) and won&amp;rsquo;t let you wander outside it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Datetime</title>
				<link>https://docs.emetcms.com/fields/datetime/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/datetime/</guid>
				<description>&lt;p&gt;Datetime fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#datetime&#34;&gt;Datetime section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sync</title>
				<link>https://docs.emetcms.com/content-management/sync/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/sync/</guid>
				<description>&lt;p&gt;Emet has no database of its own. On a GitHub-hosted site, the branch you&amp;rsquo;re editing is the database, and a small sync service running in your browser keeps your view of it current and ships the few changes that don&amp;rsquo;t go straight to GitHub. This page is about what gets committed when, what the indicator in the header is telling you, and how &lt;code&gt;[skip ci]&lt;/code&gt; ends up on your commit messages.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Translation</title>
				<link>https://docs.emetcms.com/ai/translation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/ai/translation/</guid>
				<description>&lt;p&gt;Emet&amp;rsquo;s &lt;a href=&#34;https://docs.emetcms.com/i18n/translation-workflow/&#34;&gt;translation workflow&lt;/a&gt; is built around copies: &lt;strong&gt;Translate&lt;/strong&gt; on an entry card starts a translation from a copy of the source (or a blank archetype), and &lt;strong&gt;Create translations&lt;/strong&gt; copies entries in bulk, each in the right place for a human to translate. No AI is involved in either.&lt;/p&gt;&#xA;&lt;p&gt;The AI side is two separate things. You can translate a selection in place from the inline actions menu, and you can translate a whole entry, frontmatter and body, from the toolbar. Both need at least two languages in &lt;code&gt;site.yaml&lt;/code&gt; and a provider that&amp;rsquo;s ready.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Date</title>
				<link>https://docs.emetcms.com/fields/date/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/date/</guid>
				<description>&lt;p&gt;Date fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#date&#34;&gt;Date section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Languages</title>
				<link>https://docs.emetcms.com/configuration/languages/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/configuration/languages/</guid>
				<description>&lt;p&gt;Hugo does multilingual sites either by giving each language its own content directory (&lt;code&gt;content/en&lt;/code&gt; and &lt;code&gt;content/de&lt;/code&gt;, or &lt;code&gt;content&lt;/code&gt; for the default language and &lt;code&gt;content.de&lt;/code&gt; for the other) or by keeping every language in one directory and putting the language code in the filename (&lt;code&gt;post.md&lt;/code&gt;, &lt;code&gt;post.de.md&lt;/code&gt;). Emet needs the same mapping so it can switch between them, find an entry&amp;rsquo;s translations and work out URLs.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;languages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;en&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;contentDir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;content/en&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;de&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Deutsch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;contentDir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;content/de&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Key&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;What it does&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;code&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;The language code, as in your Hugo config.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;What the language switcher calls it.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;contentDir&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;That language&amp;rsquo;s content directory, relative to the Hugo root.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; on exactly one language. If none is marked, the first in the list is the default.&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Leave the block out and Emet assumes a single language, &lt;code&gt;en&lt;/code&gt;, in &lt;code&gt;content&lt;/code&gt;. The language switcher only appears once there are two or more.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Publication</title>
				<link>https://docs.emetcms.com/content-management/publication/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/publication/</guid>
				<description>&lt;p&gt;By default, every save in Emet is a commit to the branch you&amp;rsquo;re editing, and if that branch is the one your site deploys from, the change is live as soon as the build finishes. For a personal blog that&amp;rsquo;s fine. For a site with more than one editor, or one where someone needs to sign off before things go public, it&amp;rsquo;s a bit terrifying.&lt;/p&gt;&#xA;&lt;p&gt;The publication workflow adds a step. You edit on a working branch, and when you&amp;rsquo;re ready, Emet opens a pull request to a production branch and lets you merge it once the checks pass. Your deploy pipeline watches production and nothing goes live until that merge.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Environment variables</title>
				<link>https://docs.emetcms.com/configuration/environment-variables/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/configuration/environment-variables/</guid>
				<description>&lt;p&gt;Everything about your site is in &lt;code&gt;admin/site.yaml&lt;/code&gt; and &lt;code&gt;admin/cms.yaml&lt;/code&gt;. Environment variables are for the things that belong to a deployment of Emet rather than to a site: which GitHub App it signs in with, where its API proxy is, and the secrets that proxy needs.&lt;/p&gt;&#xA;&lt;p&gt;There are two kinds. Build-time variables are read by Vite and baked into the JavaScript bundle, so changing one means rebuilding. Runtime variables are read by the Cloudflare Pages Functions on each request, never reach the browser, and can be changed without a rebuild. Secrets go in the second group.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Reviewing entries</title>
				<link>https://docs.emetcms.com/content-management/review/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/content-management/review/</guid>
				<description>&lt;p&gt;The &lt;a href=&#34;https://docs.emetcms.com/content-management/publication/&#34;&gt;publication workflow&lt;/a&gt; reviews a whole branch at once: one pull request, one approval, everything goes live together. That&amp;rsquo;s fine until your team wants to sign off on pages one at a time &amp;ndash; legal reads the pricing page, the editor reads the blog post, and nobody wants to approve a diff full of other people&amp;rsquo;s work.&lt;/p&gt;&#xA;&lt;p&gt;Entry review handles that case. Each entry carries its own review state, a reviewer reads and approves it in Emet, and the publish dialog won&amp;rsquo;t let anything go live until every changed entry has been approved.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Select</title>
				<link>https://docs.emetcms.com/fields/select/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/select/</guid>
				<description>&lt;p&gt;Select fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#select&#34;&gt;Select section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>List</title>
				<link>https://docs.emetcms.com/fields/list/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/list/</guid>
				<description>&lt;p&gt;List fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#list&#34;&gt;List section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Object</title>
				<link>https://docs.emetcms.com/fields/object/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/object/</guid>
				<description>&lt;p&gt;Object fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#object&#34;&gt;Object section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Relation</title>
				<link>https://docs.emetcms.com/fields/relation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/relation/</guid>
				<description>&lt;p&gt;Relation fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#relation&#34;&gt;Relation section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Image</title>
				<link>https://docs.emetcms.com/fields/image/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/image/</guid>
				<description>&lt;p&gt;Image fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#image&#34;&gt;Image section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>File</title>
				<link>https://docs.emetcms.com/fields/file/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/file/</guid>
				<description>&lt;p&gt;File fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#file&#34;&gt;File section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Code</title>
				<link>https://docs.emetcms.com/fields/code/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/code/</guid>
				<description>&lt;p&gt;Code fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#code&#34;&gt;Code section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Colour</title>
				<link>https://docs.emetcms.com/fields/color/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/color/</guid>
				<description>&lt;p&gt;Color fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#color&#34;&gt;Color section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hidden</title>
				<link>https://docs.emetcms.com/fields/hidden/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.emetcms.com/fields/hidden/</guid>
				<description>&lt;p&gt;Hidden fields now live on the main &lt;a href=&#34;https://docs.emetcms.com/fields/&#34;&gt;Fields&lt;/a&gt; page under the &lt;a href=&#34;https://docs.emetcms.com/fields/#hidden&#34;&gt;Hidden section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
