How this blog runs on Hugo I’ve covered separately. A lot of that is small, repetitive work. Open Markdown, maintain front matter, keep tags and categories tidy, toggle drafts, start the server, deploy. I use neovim, so I wanted to handle all of that straight from the editor.

I didn’t find a plugin that bundled this. So I wrote hugo-cms.nvim.

What It Is

hugo-cms.nvim is a “CMS” for Hugo, living inside neovim. You register your Hugo sites once and drive them from there. No jumping into the file manager, no second terminal window, no web UI.

You need a current neovim plus Hugo and ripgrep on your shell. snacks.nvim handles pickers and prompts and is pulled in by your plugin manager as a dependency. I run LazyVim myself, where snacks.nvim ships in by default, so hugo-cms.nvim drops right in. macOS and Linux are tested, Windows is not.

What It Does

Everything runs through :Hugo with subcommands. The commands really want to live on leader keys. Mine are all on <leader>h…, one or two keystrokes and I’m in. The example spec in the README shows a complete keymap.

:Hugo new creates a new post from an archetype. The slug comes from the title, the path follows a pattern you set per archetype. You don’t have to figure out where the file goes every time. :Hugo open is the picker over every post, :Hugo resume jumps back to the last post you had open, even across Neovim restarts. When all you remember is a phrase from an old post, :Hugo search does full-text search over content/.

:Hugo media is the media library. Import images or attachments into the bundle, drop them in at the cursor as an image, a link or a shortcode, set covers, all without leaving for the file manager. :Hugo tags, :Hugo categories and :Hugo draft toggle front-matter fields through a picker, synced across language siblings in the bundle so translations stay in step.

:Hugo preview starts hugo server in a terminal split, opens the current page in the browser, rebuilds on every save. For deployment :Hugo publish runs a deploy.sh at the site root that you maintain yourself. I built it this way on purpose because deployment looks different for everyone and I didn’t want to bake those choices into plugin options.

Multilingual sites are supported directly. Front-matter writes sync across language siblings automatically, rename and delete work on the whole bundle by default with an opt-out for a single language.

Where It Is

hugo-cms.nvim is growing. What’s in there works. The rest fills in over time. README, changelog and roadmap are in the repo.

How that plays out in practice lives in its own series. A walkthrough from site setup through managing posts to media library, preview and deploy. On top of that, multilingual sites, slugs and covers and the workflow with SEO check and gotchas.