Skip to content

Repository files navigation

@htnabe/prettier-plugin-hugo-post

npm version GitHub codecov license

A Prettier plugin for formatting Hugo content files that mix front matter, Markdown, and Go template syntax.

Why this plugin?

Hugo content files are not plain Markdown. They often contain:

  • YAML, TOML, or JSON front matter
  • Markdown prose and lists
  • Hugo shortcodes
  • Go template expressions and pipelines

This plugin keeps those pieces formatted consistently while leaving the rest of your Prettier setup alone.

Features

  • Front matter formatting for YAML, TOML, and JSON
  • Markdown formatting via Prettier
  • Hugo shortcode spacing and normalization
  • Template expression formatting for .Title, pipelines, conditions, and range blocks
  • Works with standard Prettier overrides

Installation

Using Bun:

bun add -d prettier @htnabe/prettier-plugin-hugo-post

Using npm:

npm install --save-dev prettier @htnabe/prettier-plugin-hugo-post

If you also format Hugo layout templates, install the companion plugin:

bun add -d @htnabe/prettier-plugin-go-template

Basic configuration

Add the plugin to Prettier and set the parser for Hugo content files:

{
  "plugins": ["@htnabe/prettier-plugin-hugo-post"],
  "overrides": [
    {
      "files": ["content/**/*.md", "**/*.md", "**/*.hugo"],
      "options": {
        "parser": "hugo-post"
      }
    }
  ]
}

For a mixed Hugo project, combine it with @htnabe/prettier-plugin-go-template:

{
  "plugins": ["@htnabe/prettier-plugin-hugo-post", "@htnabe/prettier-plugin-go-template"],
  "overrides": [
    {
      "files": ["content/**/*.md", "**/*.md"],
      "options": {
        "parser": "hugo-post"
      }
    },
    {
      "files": ["layouts/**/*.html", "**/*.html"],
      "options": {
        "parser": "go-template"
      }
    }
  ]
}

Usage

Format a single file:

bunx prettier --write content/posts/my-post.md

Check formatting without writing:

bunx prettier --check "content/**/*.md"

Example

This input:

---
title:    "My Post"
tags: [  "hugo",  "blog" ]
---

{{<figure src="/img.jpg"alt="Test">}}
{{ .Title|upper }}

is normalized to:

---
title: "My Post"
tags: ["hugo", "blog"]
---

{{< figure src="/img.jpg" alt="Test" >}}
{{ .Title | upper }}

Project scripts

The repository uses these package scripts:

bun test
bun run lint
bun run lint:fix
bun run format
bun run format:check
bun run example

Contributing

Contributions are welcome. Please read the contributing guide before opening a PR.

License

MIT

Acknowledgments


Made with ❤️ for the Hugo community.

About

A Prettier plugin for Hugo content files with front matter, Markdown content, and Go template syntax

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages