A native Mac app for Hugo

Hugo, without the terminal.

Run, inspect and publish the Hugo sites already on your Mac – all from one native window.

free · macOS 26 or later · no account, no cloud
Latest release v0.2.0
Free
no license, no subscription
Any editor
works beside your editor and AI agents
No cloud
no account; your files stay on your Mac
01How it works

Core

The whole loop.

Preview, preflight, publish – in that order.

01 Preview

The server, on a button.

HugoKit runs the same hugo server command you would run yourself. It remembers the flags, finds a free port and turns Hugo’s output into a readable live log.

  • Toggle drafts, future and expired content without remembering flags.
  • Read colour-coded logs and see the exact command HugoKit runs.
  • Open the local preview from the same window.
The Server view: live URL, stop and restart actions, and toggles for drafts, future and expired content.
02 Preflight

It checks before it publishes.

A site can build perfectly on your Mac and still break after deployment. Preflight checks the paths, config and assets before every publish.

  • Checks the build, config, assets and common subpath traps.
  • Shows every suggested fix as a diff before writing anything.
  • Ranks findings as errors, warnings or information.
HugoKit's preflight check presenting a fix as a diff before publishing.
03 Publish

Publish where you already publish.

Set up a destination once, then publish with ⌘P. Each target keeps its own build settings, status and history, and HugoKit checks the live site when it finishes.

  • Publish to GitHub Pages, FTP or SFTP – one target or several.
  • See status and history per target, followed by a live-site check.
  • Keep deploy credentials in the macOS Keychain.
The Deploy view: a configured deploy target with Add Deploy Target and a history of successful deploys.
02Features

Why HugoKit

What makes HugoKit different

A safer way to work with the Hugo sites and tools you already have.

Explore every feature 14 features, grouped in one list
All your sites Add sites one by one, clone one from a Git URL, or point HugoKit at a folder and it finds them itself. Pin your favourites; give each site its own emoji.

Every Hugo site you have, in one sidebar. Add them one at a time with ⌘O, clone one straight from a Git URL, or point HugoKit at the folder you keep your projects in and let it find them itself.

  • Watch a folder: HugoKit scans up to three levels deep, adds every folder that holds a Hugo config, and skips the ones that never contain a site of their own – public, resources, themes, archetypes, .git, node_modules, .build and vendor.
  • A folder counts as a site when it has a Hugo config file. If the config is there but the folders around it look incomplete, the site is added with a warning rather than turned away.
  • Add a site straight from a Git URL – paste the repository, choose where to clone it, and HugoKit clones and adds it in one step. A token is only ever sent to github.com.
  • Pin the ones you use most, and give each site an emoji so the sidebar is scannable at a glance.
  • Each site keeps its own settings – its port, its content toggles, its deploy destinations.
Create new sites Start from the HugoKit Starter template – pick sections and features up front – or from a blank Hugo site. Git init included.

⇧⌘N gives you two templates. The HugoKit Starter is a complete, working site – kept as a real, running Hugo project inside the app rather than a pile of snippets. Blank is the plain output of hugo new site with a small welcome page.

  • The Starter always brings the essentials – a 404 page, robots.txt, a sitemap, an RSS feed, an SEO partial and light/dark mode – plus an archive, a colophon, a ⌘K search palette, a sharing image drawn per page and the whole site as llms.txt.
  • You pick the rest up front: a blog with sample posts, a projects section, an about page, a theme toggle and tags.
  • The Starter is TOML-only and needs Hugo 0.146 or newer; Blank lets you choose the config format.
  • Either one can initialise a git repository, open the site and start the server the moment it is done.
Site health Every site gets a score: front matter checks, content stats and a build trend, with the issues listed out. ⇧⌘H from anywhere.

Preflight blocks what breaks a deployed site. Site health – ⇧⌘H from anywhere – tells you what the site is like to read: broken links, images without alt text, a config key Hugo deprecated two versions ago. It points; you decide.

  • Nine checks run in parallel: broken internal links, images without alt text, images over 500 KB, deprecated config keys, a missing favicon, build-time regressions, front matter gaps, draft ratio and a stale search index.
  • A score out of 100 – an error costs 10 points, a warning 5, an info 2 – and every issue is tagged CONTENT, PERF, A11Y or CONFIG.
  • Front matter issues are aggregated per field, so 200 posts without a date cost you one issue, not two hundred.
  • It reads the built site in public/, so build before you read too much into the score.
Template preview Browse your theme's layout files and see each one rendered live – ⇧⌘T from anywhere.

A layout file is invisible until a page renders it. Template Preview (⇧⌘T) puts your layouts on the left and the rendered page on the right, served by your own dev server – so you can see what single.html actually does without hunting for a URL that exercises it.

  • Your layouts/ and every theme’s layouts/ in one tree – and where both define the same file, the project’s version wins, exactly as Hugo resolves it.
  • Preview with picks a real page from your content that the selected template actually renders; partials, shortcodes and baseof fall back to the home page.
  • The preview is live: save the file in your editor and it reloads like any other page.
  • It needs the dev server running – if it is stopped, the panel says so and offers to start it.
Theme scaffolding See each site's installed themes, scaffold a blank one to build on, and preview its templates as you go.

The Themes page lists what is installed in themes/. New Blank Theme scaffolds a placeholder to build on – minimal layouts and styles, not a finished design – by running Hugo’s own hugo new theme underneath.

  • Letters, numbers and hyphens; the name becomes the folder under themes/.
  • A checkbox decides whether the sample pages hugo new theme generates come along. layouts/, assets/ and archetypes/ are left alone either way.
  • Set it as the active theme on creation, and the next build uses it.
  • Removing a theme deletes themes/ and touches nothing else in the site.
Content overview Pages, sections, word counts and images per site – with a front matter inspector and quick edits built in. Real writing stays in your own editor.

The Content page counts what is in the site and lists the files. It is built for a typo, a front matter field, a date – not for writing. A front matter inspector sits beside each file for exactly those fields; real writing stays in your own editor, and the preview reloads on save either way.

  • Pages, sections, word counts and images per site – plus how many are drafts, future-dated or expired. A page bundle shows as one entry with its images, not a folder of loose files.
  • Edit the front matter in a panel beside the file – title, description, date, tags and categories, with suggestions drawn from the site’s own taxonomies – or use the Raw tab, a plain monospaced editor with an explicit Save (⌘S). Both edit the same text.
  • See every tag and category across the site, catch a duplicate spelling, and rename one everywhere in a single pass you can undo.
  • Close a file with unsaved changes and HugoKit asks first.
  • Open in editor is one click away, in whatever editor you already use.
Config editor Edit your Hugo config visually or as raw text, with a diff preview before anything is saved.

Your 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 text tab, and one rule: nothing is written to disk until you have seen the diff.

  • The form is grouped: Basics, Build, Author, Params, Markup, Taxonomies, Main Menu and Additional Fields.
  • The two tabs are the same document – type a key in Raw and it turns up in the form, and the other way round.
  • Save does not save. It shows every changed key, old value against new; you approve, and then it is written.
  • TOML, YAML or JSON – the format is read from the file, and keys you never touched keep their place, their spelling and their comments.
Snapshots and undo Before HugoKit writes to any file in your site, it keeps a copy. Every change is a diff you can read – and undo, file by file.

Nothing changes without a diff, and everything can be undone. Whenever HugoKit writes to your site – a preflight fix, a config save, a content edit, a theme switch – it snapshots the affected files first.

  • Snapshots live in the app’s own storage, never in your repository – so they can’t be committed or published by accident.
  • Every write is recorded as a per-file diff. Read it in place, copy it out, or undo just that file.
  • Restore brings back a whole operation – and takes its own snapshot first, so even an undo can be undone.
  • Per site, you decide: turn the layer off, or set how many versions of each file to keep.
Hugo Reference Searchable Hugo documentation built into the app – 195 entries across twelve categories, no browser needed.

Hugo’s reference material, indexed and searchable inside the app, in a window of its own (⌘2). It is there so a forgotten function name does not cost you a browser tab and twenty minutes.

  • 195 entries across twelve categories: functions, methods, page and site variables, templates, partials, shortcodes, front matter, config, content, build and performance.
  • Opens in its own window and stays out of the way of the site you are working on.
Keyboard shortcuts Publish with ⌘P, preflight with ⇧⌘P, site health with ⇧⌘H, template preview with ⇧⌘T – and ⌘K opens the command palette.

The things you do every day have a key. Everything else is one ⌘K away in the command palette.

  • ⌘P publish · ⇧⌘P preflight · ⌘D deploy
  • ⇧⌘H site health · ⇧⌘T template preview · ⌘2 Hugo Reference
  • ⌘O open a site · ⇧⌘N create one · ⌘, settings
Menu bar extra A dynamic menu bar icon with controls for your sites – without opening the window.

HugoKit does not need its window open to be useful. Close it and the app keeps running in the menu bar, with every site and its status one click away.

  • Start or stop any site from the menu, and open its localhost URL in the browser.
  • The status dot follows the server: green running, amber busy, red failed, grey idle.
  • Don’t want it? Turn the icon off in Settings → General.
Notifications Native notifications when the server stops, a build fails or a publish finishes – every event has its own toggle.

Native macOS notifications for the things that finish while you are looking at something else. Every event has its own toggle, so you can keep the publish result and silence the rest.

  • Six events: server started, server stopped unexpectedly, build succeeded, build failed, publish succeeded, publish failed.
  • The toggles live in Settings → Notifications.
  • If you have denied notification permission, HugoKit says so and links straight to System Settings.
Hugo, managed HugoKit finds your Hugo install automatically – and if there isn't one, it installs it for you.

You shouldn’t have to install a Go binary to write a blog post. HugoKit looks for Hugo where Hugo usually lives, and installs it for you if it isn’t there.

  • It checks Homebrew’s paths, /usr/local/bin, ~/.local/bin and /usr/bin, then falls back to which hugo.
  • Nothing found? With Homebrew installed it runs brew install hugo; without it, it downloads the latest Hugo extended release from GitHub and installs it to ~/.local/bin.
  • Extended is the build that compiles SCSS, and most themes need it – so that is the variant it installs.
  • Rather do it yourself? HugoKit shows the command, links to Hugo’s own instructions, and gives you a Retry Detection button.
Native and private SwiftUI throughout, credentials in the macOS Keychain. No account – nothing ever leaves your Mac.

SwiftUI throughout – no Electron, no account, no backend. HugoKit talks to Hugo, Git and your host, and to nothing else.

  • Your files stay where they are: nothing is converted, moved or copied into an app format.
  • Deploy credentials go into the macOS Keychain, never into a config file in your repository.
  • No sign-in and no cloud service in the loop – nothing leaves your Mac until you publish it yourself.
03Why it exists

Colophon

Anders Mortensen Anders Mortensen andersmortensen.com

I write my own sites in Hugo, and I got tired of a terminal window, a browser tab and a deploy script for every small change. So I built HugoKit for myself – and kept building because I use it every day. It's a personal project, not a company.

It's non-commercial and stays that way – nothing to buy, nothing to subscribe to. If you'd like to help cover the running costs, you can Donate

04FAQ
Does it work with my existing Hugo site?
Yes. HugoKit runs the Hugo you already use – point it at your site’s folder (or a folder full of sites) and it shows up in the sidebar. Nothing is converted, nothing is locked in; your site stays a plain Hugo site.
Does it replace my editor?
No – it sits beside it. HugoKit runs the server, the checks and the publish; the writing happens wherever you like. Your content is plain Markdown on disk, so your editor – or an AI coding agent working in the same folder – changes the files, and the preview reloads on save.
  • Any editor
  • AI agents
  • Plain Markdown
Do I need Hugo installed first?
No. HugoKit finds your Hugo install automatically – and if there isn’t one, it installs it for you.
  • Auto-install
Where does my content live?
On your Mac, as the plain files Hugo already uses. There’s no account and no cloud – deploy credentials go in the macOS Keychain, and nothing ever leaves your machine.
What if HugoKit breaks something?
Before HugoKit writes to any file in your site – a preflight fix, a config save, a content edit – it keeps a copy of the file as it was. Every change is recorded as a diff you can read, and undo works per file or per operation. Preflight fixes are shown as a diff you approve before they’re applied at all.
  • Snapshots
  • Diffs
  • Undo
Where can it publish to?
GitHub Pages, and your own server over FTP/SFTP – one target or several per site. Cloud hosts like Netlify or Vercel aren’t supported – if you deploy through them, their git integration already does this job.
  • GitHub Pages
  • FTP / SFTP
  • Multiple targets
Is it really free?
Yes – free to download, free to use, no account and no subscription. It’s a personal project, not a business.
Which Macs does it run on?
Any Mac running macOS 26 (Tahoe) or later.
  • macOS 26+
How do updates work?
HugoKit updates itself – there’s no App Store in the loop. It checks hugokit.com for a newer version, shows you the release notes in the app, and installs the update once you agree. The check sends nothing about you: it just asks whether a new version exists, with Sparkle’s system profiling switched off.
  • Built-in updates
  • Release notes in-app
  • Signed
Who's behind it?
One person: me, Anders, in Denmark. HugoKit is something I built for my own sites and keep working on because I use it every day. There’s no company and no roadmap – if something’s broken or missing, email me.
05Download

Get it

Download HugoKit

No newsletter, no upsell. If something breaks, email me.

Version
0.2.0
Size
6.8 MB
Architecture
Universal – Apple silicon and Intel
Requires
macOS 26 or later
Released
23 July 2026