<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docs on HugoKit</title><link>https://hugokit.com/docs/</link><description>Recent content in Docs on HugoKit</description><generator>Hugo</generator><language>en</language><copyright>2026</copyright><atom:link href="https://hugokit.com/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Broken links and missing CSS after deploying to GitHub Pages</title><link>https://hugokit.com/docs/hugo-broken-links-missing-css-github-pages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-broken-links-missing-css-github-pages/</guid><description>&lt;p&gt;The site is fine on &lt;code&gt;localhost:1313&lt;/code&gt;. You deploy it, open &lt;code&gt;https://you.github.io/my-blog/&lt;/code&gt;, and get unstyled HTML: the text is there, the CSS is gone, the images 404, and half the links go nowhere.&lt;/p&gt;
&lt;p&gt;Nothing is wrong with your build. The problem is that your site no longer lives at the root of a domain.&lt;/p&gt;
&lt;h2 id="whats-actually-happening"&gt;What&amp;rsquo;s actually happening&lt;/h2&gt;
&lt;p&gt;A GitHub Pages project site is served from a &lt;strong&gt;subpath&lt;/strong&gt;: &lt;code&gt;https://you.github.io/my-blog/&lt;/code&gt;, not &lt;code&gt;https://you.github.io/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Locally, your site &lt;em&gt;is&lt;/em&gt; at the root, so a template that writes &lt;code&gt;/css/main.css&lt;/code&gt; works. In production that same path resolves to &lt;code&gt;https://you.github.io/css/main.css&lt;/code&gt; – one level above your site, where nothing exists. Every absolute path you wrote by hand is now pointing outside your own site.&lt;/p&gt;</description></item><item><title>Editing your config</title><link>https://hugokit.com/docs/editing-your-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/editing-your-config/</guid><description>&lt;p&gt;Your Hugo config is the file most likely to break a site, and the one you edit least often – so you never quite remember what the keys are called. HugoKit gives it a form, a raw editor, and one rule: nothing is written to disk until you&amp;rsquo;ve seen the diff.&lt;/p&gt;
&lt;h2 id="two-tabs-one-file"&gt;Two tabs, one file&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Config&lt;/strong&gt; page opens your site&amp;rsquo;s config file – TOML, YAML or JSON; the format is detected from the file, not assumed.&lt;/p&gt;</description></item><item><title>Getting started</title><link>https://hugokit.com/docs/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/getting-started/</guid><description>&lt;p&gt;HugoKit is a Mac app that runs the Hugo you already use. It doesn&amp;rsquo;t convert your site, doesn&amp;rsquo;t move your files and doesn&amp;rsquo;t need an account – it starts &lt;code&gt;hugo server&lt;/code&gt;, checks the site before it ships, and publishes it.&lt;/p&gt;
&lt;h2 id="what-you-need"&gt;What you need&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A Mac running &lt;strong&gt;macOS 26 (Tahoe) or later&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A Hugo site. If you don&amp;rsquo;t have one, HugoKit can create it for you.&lt;/li&gt;
&lt;li&gt;Hugo itself is optional. If it isn&amp;rsquo;t installed, HugoKit installs it during setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-the-app"&gt;Install the app&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Download the DMG from &lt;a href="https://hugokit.com/"&gt;hugokit.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Open it and drag &lt;strong&gt;HugoKit&lt;/strong&gt; into your Applications folder.&lt;/li&gt;
&lt;li&gt;Launch it. The app is signed and notarised, so macOS opens it without the &amp;ldquo;unidentified developer&amp;rdquo; dialog.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="first-launch"&gt;First launch&lt;/h2&gt;
&lt;p&gt;The setup wizard has four steps: &lt;strong&gt;Welcome&lt;/strong&gt;, Hugo, &lt;strong&gt;Add Your First Site&lt;/strong&gt;, and &lt;strong&gt;You&amp;rsquo;re All Set&lt;/strong&gt;. You can leave it at any point with &lt;code&gt;Esc&lt;/code&gt;, and the middle steps have a &lt;strong&gt;Skip Setup&lt;/strong&gt; link. To see it again later, choose &lt;strong&gt;Help → Show Welcome Screen&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Publishing to GitHub Pages</title><link>https://hugokit.com/docs/publishing-to-github-pages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/publishing-to-github-pages/</guid><description>&lt;p&gt;HugoKit publishes to GitHub Pages the way you&amp;rsquo;d do it by hand: it commits your project, pushes it, and lets GitHub Actions build the site. The difference is that you never open a terminal, and the checks that usually bite you run first.&lt;/p&gt;
&lt;h2 id="before-you-start"&gt;Before you start&lt;/h2&gt;
&lt;p&gt;You need a GitHub account and &lt;strong&gt;a repository for the site&lt;/strong&gt;. HugoKit can&amp;rsquo;t create the repository for you – make an empty one on github.com first, public or private, both work.&lt;/p&gt;</description></item><item><title>Running the server</title><link>https://hugokit.com/docs/running-the-server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/running-the-server/</guid><description>&lt;p&gt;HugoKit runs the same &lt;code&gt;hugo server&lt;/code&gt; you&amp;rsquo;d run in a terminal. It just remembers the flags, picks a free port, and turns Hugo&amp;rsquo;s output into something you can read.&lt;/p&gt;
&lt;h2 id="start-and-stop"&gt;Start and stop&lt;/h2&gt;
&lt;p&gt;Select the site and use &lt;strong&gt;Start Server&lt;/strong&gt; in the toolbar; it becomes &lt;strong&gt;Stop Server&lt;/strong&gt; while the server runs. The &lt;strong&gt;Server&lt;/strong&gt; page has the same actions, plus &lt;strong&gt;Restart&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The exact command is written to the log before it runs, so you can always see what HugoKit asked Hugo to do:&lt;/p&gt;</description></item><item><title>Editing content</title><link>https://hugokit.com/docs/editing-content/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/editing-content/</guid><description>&lt;p&gt;The Content page lists your pages and lets you make the small edits that don&amp;rsquo;t need a full editor – a title, a date, a tag, a typo. It&amp;rsquo;s built for exactly those changes, and it leaves the writing to your own editor.&lt;/p&gt;
&lt;h2 id="the-content-page"&gt;The Content page&lt;/h2&gt;
&lt;p&gt;Open &lt;strong&gt;Content&lt;/strong&gt; for the selected site and HugoKit counts what&amp;rsquo;s there – pages, sections, words and images, and how many are drafts, future-dated or expired – and lists the files. Open one and you get a preview, a front matter inspector, and a &lt;strong&gt;Raw&lt;/strong&gt; tab.&lt;/p&gt;</description></item><item><title>Snapshots and undo</title><link>https://hugokit.com/docs/snapshots-and-undo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/snapshots-and-undo/</guid><description>&lt;p&gt;HugoKit edits files that are yours – a config, a post, a template a preflight fix rewrites. The one mistake an app like this can&amp;rsquo;t afford is changing your text and leaving you no way back. So it doesn&amp;rsquo;t get the chance: before HugoKit writes to any file in your site, it snapshots the file as it was.&lt;/p&gt;
&lt;h2 id="when-a-snapshot-is-taken"&gt;When a snapshot is taken&lt;/h2&gt;
&lt;p&gt;Every write HugoKit makes goes through the same door. That covers all four places the app touches your files:&lt;/p&gt;</description></item><item><title>hugo server won't start: port already in use</title><link>https://hugokit.com/docs/hugo-server-port-already-in-use/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-server-port-already-in-use/</guid><description>&lt;p&gt;You run &lt;code&gt;hugo server&lt;/code&gt; and get:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: listen tcp 127.0.0.1:1313: bind: address already in use
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Something is already listening on port 1313. Nine times out of ten it&amp;rsquo;s a &lt;code&gt;hugo server&lt;/code&gt; you started earlier – in a terminal tab you closed without stopping it, or in another window.&lt;/p&gt;
&lt;h2 id="the-quick-way-out-use-another-port"&gt;The quick way out: use another port&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;hugo server --port 1314
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s it. Nothing is broken; two servers just can&amp;rsquo;t share one port.&lt;/p&gt;</description></item><item><title>Hugo without the terminal</title><link>https://hugokit.com/docs/hugo-without-the-terminal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-without-the-terminal/</guid><description>&lt;p&gt;Hugo is a command-line tool, and using it means knowing a handful of commands, a handful of flags, and which of them you need right now. That&amp;rsquo;s a small amount of knowledge, and it&amp;rsquo;s fine – until it isn&amp;rsquo;t. Until you write once a month and have to relearn it every time. Until the flag you need is one you&amp;rsquo;ve never used. Until something goes wrong and the error is about Go template internals.&lt;/p&gt;</description></item><item><title>Publishing over SFTP</title><link>https://hugokit.com/docs/publishing-over-sftp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/publishing-over-sftp/</guid><description>&lt;p&gt;If you have a web host rather than a GitHub Pages site, HugoKit builds the site on your Mac and uploads it. It only sends the files that actually changed.&lt;/p&gt;
&lt;h2 id="before-you-start"&gt;Before you start&lt;/h2&gt;
&lt;p&gt;You need the SFTP details your host gave you: host, username, password (or an SSH key), and the folder your site is served from – often &lt;code&gt;/public_html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Set your real &lt;code&gt;baseURL&lt;/code&gt; in &lt;code&gt;hugo.toml&lt;/code&gt; first. Unlike the GitHub Pages path, HugoKit does not override it for an FTP build: the site is built exactly as your config says. &lt;a href="https://hugokit.com/docs/preflight/"&gt;Preflight&lt;/a&gt; will stop you if it still points at localhost.&lt;/p&gt;</description></item><item><title>Themes and template preview</title><link>https://hugokit.com/docs/themes-and-template-preview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/themes-and-template-preview/</guid><description>&lt;p&gt;Hugo&amp;rsquo;s layouts are the part you can&amp;rsquo;t see until the page renders. HugoKit&amp;rsquo;s &lt;strong&gt;Themes&lt;/strong&gt; page lists what&amp;rsquo;s installed, and &lt;strong&gt;Template Preview&lt;/strong&gt; renders any single layout file next to its source – without you guessing which URL exercises it.&lt;/p&gt;
&lt;h2 id="installed-themes"&gt;Installed themes&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Themes&lt;/strong&gt; page lists every theme in your site&amp;rsquo;s &lt;code&gt;themes/&lt;/code&gt; folder. Removing one deletes &lt;code&gt;themes/&amp;lt;name&amp;gt;&lt;/code&gt; from disk; nothing else in the site is touched.&lt;/p&gt;
&lt;h2 id="new-blank-theme"&gt;New Blank Theme&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;New Blank Theme&lt;/strong&gt; scaffolds a placeholder theme in &lt;code&gt;themes/&amp;lt;name&amp;gt;&lt;/code&gt; – minimal layouts and styles to build on, not a finished design. It runs Hugo&amp;rsquo;s own &lt;code&gt;hugo new theme&lt;/code&gt; underneath.&lt;/p&gt;</description></item><item><title>A desktop app for Hugo</title><link>https://hugokit.com/docs/hugo-gui-desktop-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-gui-desktop-app/</guid><description>&lt;p&gt;Hugo is a command-line tool. There&amp;rsquo;s no official app, no window, no buttons – you drive it from a terminal. So it&amp;rsquo;s a reasonable thing to go looking for: a GUI, a desktop app, a Mac app, something with an interface. This page is the honest answer to that search.&lt;/p&gt;
&lt;h2 id="hugokit-is-a-native-mac-app-for-hugo"&gt;HugoKit is a native Mac app for Hugo&lt;/h2&gt;
&lt;p&gt;HugoKit runs the same Hugo binary you already have and puts a window around it. Start the server, preview your pages, check the site and publish it – from one place, with the flags on buttons instead of in your memory. It&amp;rsquo;s free, it&amp;rsquo;s native SwiftUI (no Electron), and it needs no account.&lt;/p&gt;</description></item><item><title>Build flags</title><link>https://hugokit.com/docs/build-flags/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/build-flags/</guid><description>&lt;p&gt;Every publish builds the site first. The &lt;strong&gt;Build&lt;/strong&gt; section on the Deploy page decides how – the same Hugo flags you&amp;rsquo;d type by hand, set per site and shown as the exact command line before anything runs.&lt;/p&gt;
&lt;h2 id="the-flags"&gt;The flags&lt;/h2&gt;
&lt;p&gt;On the &lt;strong&gt;Deploy&lt;/strong&gt; page, per site:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--gc&lt;/code&gt;&lt;/strong&gt; – run Hugo&amp;rsquo;s garbage collection after the build, clearing stale entries from its cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--minify&lt;/code&gt;&lt;/strong&gt; – minify the built output.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment&lt;/strong&gt; – the build environment Hugo runs in (&lt;code&gt;--environment&lt;/code&gt;), for config and templates that switch on it. Leave it blank for Hugo&amp;rsquo;s default.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both flags are &lt;strong&gt;on by default&lt;/strong&gt; – exactly what every HugoKit build did before this was a setting, so upgrading doesn&amp;rsquo;t change what your site builds to. The command line under the toggles updates as you change them, so you always see what will run: &lt;code&gt;hugo --gc --minify&lt;/code&gt;, or &lt;code&gt;hugo&lt;/code&gt;, or &lt;code&gt;hugo --gc --minify --environment staging&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>LiveReload isn't reloading</title><link>https://hugokit.com/docs/hugo-livereload-not-reloading/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-livereload-not-reloading/</guid><description>&lt;p&gt;You save a file. The browser sits there. Or it refreshes and shows exactly what it showed before.&lt;/p&gt;
&lt;p&gt;Before you change anything, work out &lt;strong&gt;which half is broken&lt;/strong&gt;: did Hugo see the file change, or did the browser fail to act on it? The server log answers that. Save the file and watch the terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Change detected, rebuilding site (#1).
Total in 42 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You see that line&lt;/strong&gt; → Hugo saw it. The problem is in the browser.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You see nothing&lt;/strong&gt; → Hugo never noticed the file. The problem is the watcher.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are two completely different bugs, and guessing wrong costs you an hour.&lt;/p&gt;</description></item><item><title>Preflight – what it checks and why</title><link>https://hugokit.com/docs/preflight/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/preflight/</guid><description>&lt;p&gt;A Hugo site that builds perfectly on your Mac can still land broken on the web. The build isn&amp;rsquo;t the thing that breaks – the &lt;em&gt;paths&lt;/em&gt; are. Preflight runs before every publish and looks for exactly the failures that only show up once the site is live.&lt;/p&gt;
&lt;figure class="doc-shot"&gt;
 
&lt;picture class="mode-pic"&gt;
 &lt;source media="(prefers-color-scheme: dark)" srcset="https://hugokit.com/images/docs/preflight-dark.webp"&gt;
 &lt;img class="shot" src="https://hugokit.com/images/docs/preflight-light.webp" alt="HugoKit&amp;#39;s preflight report: the pre-publish checks, with a fix offered as a red and green diff to approve." width="1072" height="764" loading="lazy"&gt;
&lt;/picture&gt;
&lt;/figure&gt;

&lt;h2 id="when-it-runs"&gt;When it runs&lt;/h2&gt;
&lt;p&gt;Automatically, before every publish. If it finds nothing, the publish just continues. If it finds something, you get the report and decide what to do.&lt;/p&gt;</description></item><item><title>Site health</title><link>https://hugokit.com/docs/site-health/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/site-health/</guid><description>&lt;p&gt;Preflight runs before a publish and blocks the things that break a deployed site. &lt;strong&gt;Site health&lt;/strong&gt; is the other half: it doesn&amp;rsquo;t block anything, and it tells you what the site is like to &lt;em&gt;read&lt;/em&gt; – broken links, images without alt text, a config key Hugo deprecated two versions ago.&lt;/p&gt;
&lt;p&gt;Open it with &lt;strong&gt;⇧⌘H&lt;/strong&gt;, from the Dashboard&amp;rsquo;s health card, from the Config page, the View menu or the command palette (⌘K).&lt;/p&gt;</description></item><item><title>Hugo vs WordPress</title><link>https://hugokit.com/docs/hugo-vs-wordpress/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-vs-wordpress/</guid><description>&lt;p&gt;Hugo and WordPress both build websites, and roughly there the similarity ends. WordPress is a database-driven CMS: content lives in a database, you edit it in a browser admin, and a server assembles each page when someone visits. Hugo is a static site generator: content lives in Markdown files, you build the whole site into plain HTML once, and a host just serves those files.&lt;/p&gt;
&lt;p&gt;Neither is &amp;ldquo;better&amp;rdquo;. They make different trade-offs, and the right pick depends on who runs the site and what it needs to do.&lt;/p&gt;</description></item><item><title>Raw HTML omitted: your HTML disappears from Markdown</title><link>https://hugokit.com/docs/hugo-raw-html-omitted-markdown/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-raw-html-omitted-markdown/</guid><description>&lt;p&gt;You put a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, an &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; or a &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; block in a Markdown file. The page builds fine – and the HTML is gone. In the output there&amp;rsquo;s a comment where your markup should be:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;!-- raw HTML omitted --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And in the build log:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WARN Raw HTML omitted while rendering &amp;quot;/content/about.md&amp;quot;;
 see https://gohugo.io/getting-started/configuration-markup/#rendererunsafe
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="why"&gt;Why&lt;/h2&gt;
&lt;p&gt;Hugo renders Markdown with Goldmark, and Goldmark refuses to pass raw HTML through by default. It&amp;rsquo;s a safety default: if your Markdown comes from somewhere you don&amp;rsquo;t control, letting it emit arbitrary HTML – &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; included – is a hole. Hugo would rather drop it than trust it.&lt;/p&gt;</description></item><item><title>GitHub Pages shows your README instead of your Hugo site</title><link>https://hugokit.com/docs/github-pages-shows-readme-instead-of-hugo-site/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/github-pages-shows-readme-instead-of-hugo-site/</guid><description>&lt;p&gt;You push your Hugo project to GitHub, enable Pages, and the site that comes up is your &lt;code&gt;README.md&lt;/code&gt; – rendered as a web page, with the wrong theme and none of your content.&lt;/p&gt;
&lt;p&gt;GitHub isn&amp;rsquo;t building your Hugo site. It&amp;rsquo;s running &lt;strong&gt;Jekyll&lt;/strong&gt; on the folder you pushed, and Jekyll, finding no &lt;code&gt;index.html&lt;/code&gt;, serves the README instead.&lt;/p&gt;
&lt;h2 id="why-it-happens"&gt;Why it happens&lt;/h2&gt;
&lt;p&gt;Pages has two very different modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deploy from a branch&lt;/strong&gt; – GitHub takes the files on a branch and runs them through Jekyll. Fine for a Jekyll site or for pre-built HTML. It has no idea what Hugo is: your &lt;code&gt;content/&lt;/code&gt;, &lt;code&gt;layouts/&lt;/code&gt; and &lt;code&gt;hugo.toml&lt;/code&gt; mean nothing to it, and &lt;code&gt;public/&lt;/code&gt; isn&amp;rsquo;t in the repository at all, because your &lt;code&gt;.gitignore&lt;/code&gt; excludes it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt; – a workflow you supply builds the site and publishes the result. This is the mode a Hugo site wants.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If Pages is set to &lt;em&gt;Deploy from a branch&lt;/em&gt; → &lt;code&gt;main&lt;/code&gt; → &lt;code&gt;/ (root)&lt;/code&gt; while your repo holds Hugo &lt;strong&gt;source&lt;/strong&gt;, you get the README. Every time.&lt;/p&gt;</description></item><item><title>Hugo builds fine, but the page is blank</title><link>https://hugokit.com/docs/hugo-found-no-layout-file/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-found-no-layout-file/</guid><description>&lt;p&gt;The build succeeds. The server starts. And the page in the browser is empty – no error, no content, nothing to click. Somewhere in the log:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WARN found no layout file for &amp;quot;html&amp;quot; for kind &amp;quot;home&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The exact wording moves around between Hugo versions, but the shape is always the same: &lt;em&gt;kind&lt;/em&gt; and &lt;em&gt;no layout file&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="why"&gt;Why&lt;/h2&gt;
&lt;p&gt;Hugo doesn&amp;rsquo;t render Markdown to HTML on its own. It hands each page to a template, and the template decides what the HTML looks like. If it can&amp;rsquo;t find a template for a page, it doesn&amp;rsquo;t guess and it doesn&amp;rsquo;t fail – it writes the page with nothing in it and moves on.&lt;/p&gt;</description></item><item><title>Hugo ignores a setting in hugo.toml</title><link>https://hugokit.com/docs/hugo-config-setting-ignored/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-config-setting-ignored/</guid><description>&lt;p&gt;You add a setting to &lt;code&gt;hugo.toml&lt;/code&gt;. You restart the server. Nothing changes. No error, no warning – Hugo builds happily and behaves as if the line isn&amp;rsquo;t there.&lt;/p&gt;
&lt;p&gt;Look at where the line sits:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-toml"&gt;baseURL = &amp;quot;https://example.com/&amp;quot;
title = &amp;quot;My site&amp;quot;

[params]
 author = &amp;quot;Anders&amp;quot;
 description = &amp;quot;A site&amp;quot;

theme = &amp;quot;papermod&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;theme&lt;/code&gt; is at the bottom, at the left margin, unindented. It looks top-level. It isn&amp;rsquo;t.&lt;/p&gt;
&lt;h2 id="why"&gt;Why&lt;/h2&gt;
&lt;p&gt;TOML has no braces. A &lt;code&gt;[section]&lt;/code&gt; header opens a table, and &lt;strong&gt;every key after it belongs to that table until the next header&lt;/strong&gt;. Indentation is decoration; TOML doesn&amp;rsquo;t read it.&lt;/p&gt;</description></item><item><title>error calling partial: the two things it usually means</title><link>https://hugokit.com/docs/hugo-error-calling-partial/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-error-calling-partial/</guid><description>&lt;p&gt;The build stops in the middle of a template:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: error calling partial: partial &amp;quot;header.html&amp;quot; not found
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or, more alarmingly:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: error calling partial: runtime error: invalid memory address
 or nil pointer dereference
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two different messages, two different causes, and both are one-line fixes.&lt;/p&gt;
&lt;h2 id="partial--not-found"&gt;&amp;ldquo;partial &amp;hellip; not found&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Hugo looked for the file and it wasn&amp;rsquo;t where it looks. Three things to check, in order:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. The name has to match the file, extension included.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Hugo won't build: front matter errors</title><link>https://hugokit.com/docs/hugo-front-matter-errors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-front-matter-errors/</guid><description>&lt;p&gt;You add a post, Hugo refuses to build, and the error is about YAML rather than about anything you recognise as your problem. Here are the three you&amp;rsquo;ll actually meet.&lt;/p&gt;
&lt;h2 id="mapping-values-are-not-allowed-in-this-context"&gt;&amp;ldquo;mapping values are not allowed in this context&amp;rdquo;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;Error: failed to unmarshal YAML: yaml: line 2: mapping values are
 not allowed in this context
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There&amp;rsquo;s an unquoted colon in a value:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;---
title: Hugo: a static site generator
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;YAML reads the first colon as &lt;em&gt;this is a key&lt;/em&gt;, and then finds a second one and gives up. Quote the value:&lt;/p&gt;</description></item><item><title>Deprecation warnings after upgrading Hugo</title><link>https://hugokit.com/docs/hugo-deprecation-warnings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-deprecation-warnings/</guid><description>&lt;p&gt;You upgrade Hugo. The site still builds. But the log has grown a paragraph:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WARN deprecated: .Site.IsServer was deprecated and will be removed
 in a future release. Use hugo.IsServer instead.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It builds &lt;em&gt;today&lt;/em&gt;. That&amp;rsquo;s the part worth understanding.&lt;/p&gt;
&lt;h2 id="why-you-shouldnt-leave-it"&gt;Why you shouldn&amp;rsquo;t leave it&lt;/h2&gt;
&lt;p&gt;Hugo removes things in three steps: first a warning, then an error, then the feature is gone. The steps are spread across releases, so a warning you ignore is a build that fails on some future Tuesday when you upgrade for an unrelated reason – and by then you&amp;rsquo;ll have forgotten what the warning said.&lt;/p&gt;</description></item><item><title>GitHub Pages keeps serving the old version of your site</title><link>https://hugokit.com/docs/github-pages-serving-old-version/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/github-pages-serving-old-version/</guid><description>&lt;p&gt;You publish. Git accepts the push. GitHub reports no failure. And hugokit.com – or whatever your site is called – shows exactly what it showed yesterday.&lt;/p&gt;
&lt;p&gt;Before you look at anything else: &lt;strong&gt;open the site in a private window.&lt;/strong&gt; A stale service worker or a cached HTML file explains this often enough to be worth thirty seconds.&lt;/p&gt;
&lt;p&gt;If it&amp;rsquo;s still old, the cause is almost always this one.&lt;/p&gt;
&lt;h2 id="two-deploy-mechanisms-one-repository"&gt;Two deploy mechanisms, one repository&lt;/h2&gt;
&lt;p&gt;GitHub Pages can get its files from one of two places, and it uses exactly one:&lt;/p&gt;</description></item><item><title>Your post doesn't show up</title><link>https://hugokit.com/docs/hugo-drafts-not-showing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-drafts-not-showing/</guid><description>&lt;p&gt;You wrote the post. The file is in &lt;code&gt;content/posts/&lt;/code&gt;. Hugo builds without a word. And the post isn&amp;rsquo;t on the site – not on the front page, not at its own URL, not anywhere.&lt;/p&gt;
&lt;p&gt;Hugo isn&amp;rsquo;t losing it. Hugo is hiding it, deliberately, for one of three reasons.&lt;/p&gt;
&lt;h2 id="1-its-a-draft"&gt;1. It&amp;rsquo;s a draft&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;---
title: &amp;quot;My post&amp;quot;
draft: true ← here
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;hugo new&lt;/code&gt; writes &lt;code&gt;draft: true&lt;/code&gt; into every file it creates, and it&amp;rsquo;s easy to forget it&amp;rsquo;s there. Drafts are excluded from every build, including the dev server.&lt;/p&gt;</description></item><item><title>Hugo can't build SCSS: you need the extended version</title><link>https://hugokit.com/docs/hugo-scss-extended-version/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://hugokit.com/docs/hugo-scss-extended-version/</guid><description>&lt;p&gt;You add a theme, run &lt;code&gt;hugo server&lt;/code&gt;, and the build stops with something like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;error: error building site: TOCSS: failed to transform &amp;quot;scss/main.scss&amp;quot; (text/x-scss): this feature is not available in your current Hugo version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nothing is wrong with your site or your theme. Your Hugo just can&amp;rsquo;t compile SCSS.&lt;/p&gt;
&lt;h2 id="why-this-happens"&gt;Why this happens&lt;/h2&gt;
&lt;p&gt;Hugo ships in two builds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standard&lt;/strong&gt; – the plain &lt;code&gt;hugo&lt;/code&gt; binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extended&lt;/strong&gt; – the same, plus a Sass/SCSS compiler (and WebP encoding).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most themes style themselves in SCSS, and only the extended build can turn that into CSS. Run one of those themes on standard Hugo and the transform fails – that&amp;rsquo;s the &lt;code&gt;TOCSS&lt;/code&gt; error (&lt;code&gt;TOCSS&lt;/code&gt; is Hugo&amp;rsquo;s &amp;ldquo;to CSS&amp;rdquo; step).&lt;/p&gt;</description></item></channel></rss>