I built a Markdown linter called gomarklint and wanted to share it here since Hugo is one of the main use cases I had in mind.
The short version: single binary, no Node.js required, and it’s fast — 100,000+ lines in ~170ms. Because it’s a compiled Go binary, there’s no JIT warmup. The first run is as fast as every other run, which makes it useful as a pre-commit hook, not just a CI step.
It also validates external HTTP links as part of the lint pass. So instead of a separate link checker step in CI, you just run gomarklint ./content/... and it handles both.
Works with GitHub Actions and pre-commit if you use those.
If anyone tries it on a Hugo site, I’m curious whether there are content patterns that cause false positives — front matter handling in particular is something I want to get right.