Hugo is a static site generator, not a content management system — it turns Markdown files into HTML at build time and has no admin interface, no database, and no concept of a logged-in editor. Adding a CMS to Hugo means choosing between two fundamentally different models: a git-based editor that writes Markdown into your repository, or a headless CMS that serves content over an API which Hugo fetches at build time.
Nearly every listicle answering this question ranks products without explaining the fork, which is unfortunate because the fork is the entire decision. Once you know which model you want, picking a specific product is a shortlist of two or three and largely a matter of taste. Pick the wrong model and no amount of product research will make the setup feel right.
Table of contents
- Why Hugo needs a CMS at all
- Model one: git-based CMS
- Model two: headless CMS
- The third option: no CMS
- How to choose, concretely
- What this means for hosting
- How this fits the rest of the stack
- FAQ
Why Hugo needs a CMS at all
Hugo’s native editing workflow is: open a Markdown file, edit the frontmatter and body, commit, push, and let the build run. For a developer this is close to ideal — version control, review, diffs, rollback, and no interface between you and the content.
It falls apart the moment someone who does not use git needs to publish. The requirement is rarely stated that plainly, but it is almost always the real one:
- A marketing colleague needs to publish without a terminal.
- Someone needs a preview of an unpublished draft.
- There are enough content types that hand-editing frontmatter produces inconsistent fields.
- Images need uploading and resizing without committing binaries by hand.
- The same content needs to appear in a mobile app as well as the site.
The last one is the only item on that list that genuinely requires a headless API. Everything else is satisfied by a git-based editor, which is why the git-based model is the right default and the headless model is the specific exception.
Model one: git-based CMS
A git-based CMS is an editing interface over your repository. An editor logs in, writes in a rich text or Markdown editor, clicks publish, and the CMS commits a Markdown file to your repository. The commit triggers your normal build. Hugo has no idea the CMS exists.
What this buys you:
- Content stays in the repository. It is versioned, diffable, reviewable, and it survives the CMS vendor disappearing.
- No runtime dependency. Your site does not call the CMS to build. If the CMS is down, publishing waits; the site is unaffected.
- No migration to adopt it. Point it at your existing content directory and configure the fields to match your frontmatter.
- Editorial workflow via pull requests, if you want review before publish.
The costs are real but narrow. Every save is a commit, so the history gets noisy. Editing is single-file rather than relational, so content that is genuinely a database — a product catalogue with variants — feels wrong. And the preview is only as good as the build, so a slow build means a slow preview.
The category has consolidated around a handful of products, several of which name Hugo as an explicitly supported generator alongside Jekyll, Eleventy and Astro. Any of them will work. Pick on the editing experience your non-technical colleagues will actually use, because that is the only requirement that brought you here.
Model two: headless CMS
A headless CMS stores content in its own database and exposes it over an API. Hugo fetches that content at build time and renders it. The CMS is a separate system with its own hosting, its own user model, and its own data.
This is the right model when:
- The same content is consumed by more than one thing — a website, a mobile app, a partner integration.
- The content is genuinely relational, with structured types referencing each other rather than a folder of documents.
- You need granular editorial permissions, scheduled publishing, or localisation as first-class features.
- Non-technical editors publish frequently enough that a commit-per-save history would be unmanageable.
The costs are correspondingly larger. Your build now depends on an external API being up and reachable, which means a build can fail for reasons unrelated to your code. Content is no longer in your repository, so backups become a separate responsibility you must actually discharge. Preview requires more wiring. And the migration is real — you are moving content out of Markdown and into someone else’s schema, which is not a weekend if you have hundreds of pages.
Hugo can consume remote data at build time, so this works. It is just meaningfully more machinery than the git-based path, and it should be justified by a requirement on the list above rather than by the word headless sounding more modern.
The third option: no CMS
Worth stating because it is frequently the correct answer and rarely the recommended one.
If the people editing the site are comfortable with git, adding a CMS makes the workflow worse, not better. You gain an interface nobody wanted and a dependency you now maintain.
A middle path covers a surprising number of cases: keep the git workflow, and use the web editor built into your git host for occasional edits. It renders Markdown, it commits on save, it triggers the build, and it requires no additional product. For a site edited a few times a month by one or two people who can be shown a form once, this is genuinely sufficient.
Reach for a CMS when there is a person who cannot or will not use git and who needs to publish regularly. That is the trigger. Not the site’s size, and not how professional the setup feels.
How to choose, concretely
Four questions, in order. The first one that yields a clear answer decides it.
- Does anything other than the website consume this content? If yes, headless. This requirement cannot be met by the git-based model at all.
- Is the content relational, with types that reference each other? If yes, headless. Markdown files model documents, not relationships.
- Does someone who does not use git need to publish? If yes and the first two were no, git-based CMS. This is the majority case.
- Otherwise: no CMS. Use the git host’s web editor for the occasional non-terminal edit.
Having answered, evaluate specific products on the editor experience for the people who will use it daily, not on the feature matrix. A CMS that your colleague finds confusing is not a working CMS regardless of what it supports.
What this means for hosting
The hosting requirement barely changes between the options, which is one of the underrated advantages of the static approach.
With a git-based CMS, nothing changes at all. The CMS commits to your repository, the commit triggers a build, and the build publishes static files. Your host needs to build from a repository on push, and that is the entire integration.
With a headless CMS, one thing changes: the build needs network access to the API and credentials in environment variables. You will also want a build hook so that publishing in the CMS triggers a rebuild, rather than content sitting unpublished until someone pushes code.
In both cases what you are hosting is a static site. On RunxBuild that means building from your GitHub repository, custom domains with certificates handled, headers and redirects configured, and 120GB of bandwidth included before $0.10/GB — see static sites and builds. Environment variables cover the headless case’s API credentials.
Worth noting for the git-based path specifically: because the CMS commits like any other contributor, your deploy history and your editorial history are the same history. A bad content change rolls back exactly like a bad code change, which is a genuinely useful property that the headless model gives up.
How this fits the rest of the stack
The best CMS for Hugo is a git-based one for most sites, a headless one if something other than the website consumes the content or the content is genuinely relational, and none at all if everyone editing is comfortable with git. Decide the model before shortlisting products, because the model determines the answer and the products within a model are close substitutes. Either way you are still deploying a static site, and to see what that costs alongside anything else in the stack, the RunxBuild hosting calculator breaks it out as separate line items.
Useful related references:
- WordPress as a CMS: What It Is Genuinely Good At
- Gatsby CMS Options: Choosing the Content Layer
- Static Site CMS: The Git-Based, the API-Based, and the One That Beats Both for Most Teams
- Services on RunxBuild
FAQ
Does Hugo have a built-in CMS?
No. Hugo is a static site generator: it reads Markdown files and templates and produces HTML at build time. There is no admin interface, no database and no user model. Any editing interface is a separate tool layered on top.
What is a git-based CMS?
An editing interface that commits Markdown files to your repository when someone clicks publish. The commit triggers your normal build, so the CMS is invisible to Hugo. Content stays versioned in the repository and the site has no runtime dependency on the CMS.
Git-based or headless CMS for Hugo?
Git-based unless something other than the website consumes the content, or the content is genuinely relational rather than a set of documents. Those two requirements are the only ones a git-based CMS cannot meet, and they are the only reasons to take on the extra machinery.
Can Hugo work with a headless CMS?
Yes. Hugo can fetch remote data at build time, so it can render content from a headless CMS API. You will need API credentials in the build environment and a build hook so that publishing in the CMS triggers a rebuild rather than waiting for a code push.
Do I need a CMS for a Hugo site at all?
Only if someone who cannot or will not use git needs to publish regularly. If everyone editing is comfortable with git, a CMS adds an interface nobody wanted. The web editor built into your git host covers occasional non-terminal edits without adding a product.