Preview
Start or stop Hugo's server, adjust content flags and keep the build log in view.
Run Hugo locally, review the site and publish when you're ready – from one Mac app.
Free · macOS 26 or later

How it works
HugoKit works with the Hugo executable and project files already on your Mac – nothing to move or convert.
Start or stop Hugo's server, adjust content flags and keep the build log in view.
Preflight builds the site and looks for problems in its config, assets, links, templates and static JavaScript.
Use GitHub Pages, FTP or SFTP, with the settings kept for each site.
Preflight
Preflight runs before every publish. Suggested fixes are shown as diffs and applied only after approval.
Publish
Each target stores its own build settings, status and history. Review Changes counts the added, changed and deleted files before a publish, and HugoKit checks the public URL afterwards when one is configured.
In the app
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.
Preflight blocks what breaks a deployed site. Site Health – ⇧⌘H from anywhere – reports on the site itself: broken links, images without alt text, config keys Hugo has deprecated. Findings are listed for you to act on; Site Health does not edit the site.
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.
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.
⌘F. Matching ignores case and diacritics, so aben finds Åben.⌘F opens a native find bar inside the sheet and ⌥⌘F adds replace controls. Replace All is one undo step, and changes stay in the buffer until Save.⌘S). Both edit the same text.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.
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.
⇧⌘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.
⌘K search palette, a sharing image drawn per page and the whole site as llms.txt.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.
Hugo’s reference material, indexed and searchable inside the app, in a window of its own (⌘2). Look up a function name, a page variable or a config key without switching to a browser.
The everyday actions have their own shortcuts. The rest sit in the menus, under the same names they carry in the app.
⌘P publish · ⇧⌘P preflight · ⌘D deploy⇧⌘H site health · ⇧⌘T template preview · ⌘2 Hugo Reference⌘O open a site · ⇧⌘N create one · ⌘, settings⌘F search the active context – Content list or Raw document · ⌥⌘F replace in Raw · ⌘K insert a link while editingClosing the window leaves HugoKit running in the menu bar, with every site and its server status one click away.
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.
HugoKit looks for Hugo in the locations it is usually installed, and offers to install Hugo Extended when it finds none.
Built in SwiftUI, with no account system or backend service. HugoKit communicates with Hugo, Git and the host you publish to.
Why it exists
I build and maintain several Hugo sites, and I wanted one place to start the server, check a build and publish. HugoKit started as a tool for my own work, and it's still the app I use on those sites.
HugoKit is a personal, non-commercial project. Donations help cover its running costs: Donate
Yes – add the site's folder or watch a parent folder. HugoKit uses the project as it is, without converting its files.
No – keep writing in the editor you already use. HugoKit handles the server, checks and publishing, and reloads the preview when files change.
Not necessarily. If Hugo is already installed, HugoKit uses it; otherwise it offers to install Hugo Extended during setup.
Right where it already is: in the project folder on your Mac. HugoKit does not copy content into its own format.
That's what snapshots are for. Before HugoKit writes to a file, it keeps a copy and records a diff. You can restore one file or the full operation, and Preflight fixes still require approval.
GitHub Pages, FTP and SFTP. You can keep one target or several for each site. Netlify and Vercel are not supported as direct targets.
Yes. It's free to download and use, with no account or subscription.
Any Mac running macOS 26 (Tahoe) or later.
HugoKit uses Sparkle to check for signed updates from hugokit.com. It shows the release notes and asks before installing. Sparkle system profiling is disabled.
I'm Anders Mortensen, based in Denmark. I built HugoKit for the Hugo sites I maintain and continue to develop it as a personal project. Bug reports and feature requests are welcome by email.
HugoKit is a Mac app for running Hugo sites locally and publishing them to GitHub Pages, FTP or SFTP.
Download for macOSQuestions and bug reports are welcome at hello@hugokit.com.