Emet is a CMS for Hugo sites that runs entirely in your browser. There’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’s API. Your site repository stays the single source of truth for your content, which is where it should be.
Think of it as an alternate, Hugo-aware frontend for GitHub.
Why this exists#
Static sites are great right up until someone who isn’t you needs to edit one. Hugo’s answer to “add a post” is hugo new 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.
In practice this means:
- You write in a visual editor or a Markdown editor, whichever you prefer, and Emet turns the result into the same Markdown files you’d have written by hand.
- Frontmatter becomes a form, driven by a YAML config that describes your sections and fields. You can generate that config by pointing Emet at your repository.
- Hugo shortcodes get proper editing cards in the visual editor instead of being mangled or hidden.
- Every save is a commit. If you’ve set up a production branch, publishing is a pull request that Emet opens and merges for you, and if your team wants to sign off on pages one at a time, there’s per-entry review that holds publishing until each changed page is approved.
- If a colleague changes a page you’re editing, Emet tells you before you save, not after you’ve overwritten their work.
What you get#
Beyond the editor itself, Emet knows about the things that tend to surround a Hugo site:
- A preview pane that uses your site’s own CSS, or the real Hugo server if you’re running one locally.
- Multilingual content, with side-by-side translation, badges showing which languages an entry exists in, and filters for what’s missing or out of date.
- An SEO panel with 26 rules, plus Google Search Console data for the page you’re editing.
- AI assistance (OpenAI, Anthropic, Gemini or any OpenAI-compatible endpoint) for rewriting, translating, generating images and building whole pages. This is entirely optional and off until you configure a provider.
Ctrl+Ksearch across every section, a list of the entries you worked on recently, bulk actions, data file editing, archetypes and a Hugo config editor, for the days when you’re maintaining the site rather than writing for it.- A desktop app (Electron) that works on a local folder instead of a GitHub repository, with Hugo’s dev server built in.
How it works#
- You sign in with GitHub. Emet uses a GitHub App and the OAuth authorization code flow with PKCE, so no client secret ever reaches the browser.
- You pick a repository and a branch. If the repository doesn’t have an
admin/site.yamlyet, the setup wizard scans it and writes one. - You edit. Entries open in a form-plus-editor view; saving commits the file to your branch.
- Optionally, you sync to production. With a
production_branchconfigured, the Sync with Production button opens a PR from your working branch and lets you merge it once checks pass.
The only server-side component is a tiny OAuth token exchange, deployed as Cloudflare Pages Functions alongside the static files. Everything else happens in your browser.
Where next?#
- Installation covers cloning the repository and running it locally.
- Quick start gets you from a clone to editing a real site.
- Setup wizard explains what Emet writes into your repository on first run.