Hugo ships as a standard and a deploy edition, and the build tag decides which one you get
Hugo builds static websites from content files and templates, with taxonomies, multilingual output, and asset processing.
At a glance
- What is it?
- gohugoio/hugo is a Go static site generator that renders content files and templates, runs CSS, Sass, Tailwind, JavaScript and image pipelines in the same binary, and offers cloud upload only in a separately built deploy edition. This piece walks through the two editions, the source build, the Docker image and the contribution rules that shape how you work with it.
- Who is it for?
- Hugo suits people who want a single Go binary that turns content and templates into a static site and handles Sass, Tailwind, TypeScript and image processing without a separate Node toolchain. It is the wrong pick if you need a database-backed editor in the browser, because Hugo outputs files you then deploy.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- gohugoio/hugo90,466 ★ · +1,249
| Repository | 2026-07-28 | 2026-11-13 |
|---|---|---|
| gohugoio/hugo | 89.2k | 90.5k |
1,249 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
Direct cloud deployment exists only behind the withdeploy tag
Hugo comes in two editions with the same core features. The standard edition is the one the project tells most people to use. The deploy edition adds one capability: pushing the built site straight to a Google Cloud Storage bucket, an AWS S3 bucket or an Azure Storage container. That split is enforced at compile time, not by a config flag. The repository carries main_withdeploy_test.go and main_withdeploy_off_test.go next to main.go, and go.mod pulls in github.com/aws/aws-sdk-go-v2 v1.41.6 and the cloudfront service package for that path. The consequence for readers is practical. If you install the standard binary and later write a deploy target into your configuration, the standard build has no direct cloud deployment, so you either switch binaries or upload the public output with some other tool. Pick the edition before you wire Hugo into a CI pipeline, because swapping later means changing which artifact every build machine downloads.
Source builds need Go 1.27.0 and CGO switched off
Prebuilt binaries are published on the GitHub releases page, and package managers or package repositories are offered per platform, with separate instruction pages for macOS, Linux, Windows, and DragonFly BSD, FreeBSD, NetBSD and OpenBSD. Building from source requires Git and Go version 1.27.0 or later. The standard edition installs with:
CGO_ENABLED=0 go install github.com/gohugoio/hugo@latestThe deploy edition adds the build tag:
CGO_ENABLED=0 go install -tags withdeploy github.com/gohugoio/hugo@latestBoth commands set CGO_ENABLED=0, so the result is a pure Go binary. The Go 1.27.0 floor is the limit to watch: a distribution that packages an older Go toolchain cannot compile current Hugo, and go install will fail rather than fall back to an older release. On such systems the prebuilt binary is the shorter route, since it carries no toolchain requirement on your side.
The Docker image fetches Dart Sass as a separate stage
The Dockerfile sets GO_VERSION to 1.27, ALPINE_VERSION to 3.24 and DART_SASS_VERSION to 1.79.3. It cross-compiles with tonistiigi/xx:1.5.0 helpers, verifies the output with xx-verify, and stamps vendorInfo=docker into the binary through ldflags. Build tags are passed through an argument, and a comment in the file shows the form:
docker build --build-arg HUGO_BUILD_TAGS=withdeploy .A dedicated dart-sass stage downloads the Dart Sass release tarball for the target architecture from the sass/dart-sass GitHub releases, mapping amd64 to x64. That tells you something about Sass in Hugo: the Go module depends on github.com/bep/godartsass/v2 v2.5.0, which talks to a Dart Sass runtime rather than compiling Sass in pure Go. If you run Hugo outside this image and your templates use the Dart Sass pipeline, you have to install that runtime yourself. Building the image also requires network access to GitHub for the tarball.
Asset pipelines run inside the binary instead of a Node toolchain
Much of Hugo's surface is asset handling. CSS processing bundles, transforms, minifies, writes source maps, performs SRI hashing and integrates with PostCSS. JavaScript bundling transpiles TypeScript and JSX, tree shakes, minifies and hashes; go.mod shows this rests on github.com/evanw/esbuild v0.28.2. Sass processing and Tailwind CSS processing follow the same pattern, compiling to standard CSS with minification and SRI hashing. Image processing converts, resizes, crops, rotates, adjusts colors, applies filters, overlays text and images, and extracts metadata, with github.com/bep/imagemeta v1.1.0 and github.com/gohugoio/gift v0.2.0 in the dependency list. Syntax highlighting comes from github.com/alecthomas/chroma/v2 v2.27.0. Hugo also bundles libwebp, KaTeX and QuickJS in binary or WASM form, each under its own license. The trade is that pipeline behaviour is tied to the Hugo release: the esbuild or Chroma version you get is whatever that Hugo version pins, so upgrading a single tool means upgrading Hugo.
Hugo Modules turn themes and config into Git dependencies
Hugo Modules let a site pull content, assets, data, translations, themes, templates and configuration from other projects through public or private Git repositories. This is how the theme catalogue at themes.gohugo.io connects to a site, and it is why the repository has its own modules/ package alongside config/, langs/ and navigation/. Multilingual output and the taxonomy system sit in the same core, which is what makes Hugo usable for documentation sites, corporate and government sites, image portfolios, landing pages, blogs and resumes. The cost is that a site built from several modules depends on those repositories being reachable at build time. A private module needs credentials wherever the build runs, including CI, and a removed upstream repository breaks the build until you vendor or replace it. Teams that adopt a third-party theme as a module inherit its template changes on every update, so pinning versions matters more than it would with a copied theme folder.
The issue tracker refuses questions and pull requests need an accepted proposal
Hugo's support model is stricter than many open source projects. The README asks people not to use the issue queue for questions or troubleshooting unless they are certain the problem is a software defect; everything else goes to the Discourse forum at discourse.gohugo.io, which holds over 20,000 topics. Feature ideas follow a fixed path. First a topic in the forum's Feature category to check whether the capability already exists and to measure interest, then a formal proposal issue if interest is sufficient, and only after the project lead accepts it a pull request. The README is direct: do not submit a pull request until the proposal is accepted. Documentation changes go to a separate gohugoio/hugoDocs repository, not this one. For a reader the consequence is time. A fix you need for your own site will not land by opening a pull request against master; plan to carry a workaround in your templates while the proposal process runs.
Pre-1.0 version numbers on a two-week release rhythm
Hugo is not archived, and the last push to the master branch was on 2 November 2026. The three most recent releases were v0.169.0 on 27 October 2026, v0.168.0 on 13 October 2026 and v0.167.0 on 28 September 2026, a gap of roughly two weeks between each. Version numbers remain below 1.0, so the minor number is what moves with each release. Release tooling lives in the repository itself, with hugoreleaser.yaml, hugoreleaser.env, merge-release.sh and a releaser/ directory, plus magefile.go for build tasks and check_gofmt.sh for formatting checks. The steady cadence has a cost for site owners who pin a version in CI: falling a few releases behind happens within weeks, and because pipeline dependencies such as esbuild are bundled, skipping releases means taking several dependency jumps at once when you do upgrade. Reading the release notes for each skipped version before moving is the safer habit.
Editorial conclusion
Hugo suits people who want a single Go binary that turns content and templates into a static site and handles Sass, Tailwind, TypeScript and image processing without a separate Node toolchain. It is the wrong pick if you need a database-backed editor in the browser, because Hugo outputs files you then deploy. Before installing, decide whether you need direct uploads to S3, Google Cloud Storage or Azure, since only the deploy edition built with the withdeploy tag includes them, and confirm your Go version is 1.27.0 or newer if you build from source.
Frequently asked questions
What is GoHugo?
GoHugo refers to Hugo, the static site generator developed in the gohugoio/hugo repository and documented at gohugo.io. It is written in Go, released under Apache-2.0, and builds sites from content files and templates.
What is Hugo used for?
Hugo is used to build corporate, government, nonprofit, education, news, event and project sites, documentation sites, image portfolios, landing pages, blogs, and resumes. Its embedded web server previews changes during development before you deploy the generated site.
Is Hugo better than WordPress?
The Hugo README makes no comparison with WordPress. Hugo is a static site generator: it renders a site from content files and templates, which you then deploy to a host or build automatically from a Git provider.
Official sources
Where developers are discussing it
Posts on Hacker News, dev.to and Lobsters that link to this repository, found by our scan of those communities. 0 in the last 30 days; newest first.
- The minimum you need to know about GitHub Actionsdev.to · Oct 14, 2026 · 20 points · 7 comments
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/gohugoio-hugo)Star history chart for your README
[](https://hysenlabs.com/projects/gohugoio-hugo)Was this useful?