github gohugoio/hugo v0.170.0

57 minutes ago

The big change in this release is that the extended edition of Hugo is gone. LibSass has been deprecated for a long time, and it was the main reason we needed a CGO-enabled extended build. There is now only one Hugo binary, and apart from LibSass it has all the features the extended build had.

Notes

  • Setting transpiler to libsass in css.Sass now returns an error. Dart Sass is now the default and the only transpiler, so you need to install it if you use Sass.
  • We no longer publish hugo_extended_* archives. To avoid breaking existing CI setups, we publish aliases for the most downloaded extended archives (e.g. hugo_extended_<version>_linux-amd64.tar.gz, hugo_extended_<version>_Linux-64bit.tar.gz, the linux-amd64.deb, linux-arm64.tar.gz and windows-amd64.zip), but you should update your scripts to use the standard archives. The extended_withdeploy builds are also removed. See Installation.
  • hugo.IsExtended now always returns false, and the module config setting hugoVersion.extended is deprecated and has no effect.
  • Command-line flags (e.g. --buildDrafts) now override OS environment variables (e.g. HUGO_BUILDDRAFTS). This also fixes HUGO_ENVIRONMENT=qa hugo build -e staging loading the staging config but reporting qa in hugo.Environment.
  • strings.Truncate has been rewritten on top of a proper HTML scanner. It now handles comments, void elements, quoted attributes with > and raw text elements such as script correctly, and it's faster and allocates less. On a curious note, the old version was implemented by Mathias Biilmann, the Netlify CEO.
  • time.Time values now keep their named time zone, and eq, ne, in and uniq compare time.Time values by instant.
  • resources.Match and friends now preserve the directory casing in the matched paths, so e.g. resources.Match "gallery/Travel/Iceland/*" now works on case-sensitive file systems.
  • Syncing of static files is much faster for big unchanged files, as we now skip the content check for files with the same size and modification time.
  • Several fixes and hardening of the WASM based image codecs (AVIF crash at encoderSpeed 6 and lower, recovering from broken WASM instances in the server).

Security

Hugo

  • Passthrough content is now HTML escaped when no passthrough render hook is set, unless markup.goldmark.renderer.unsafe is enabled. Before this, e.g. \(<img src=x onerror=alert(1)>\) in a content file emitted raw HTML.
  • The wrapperClass option, settable from the highlight shortcode and transform.Highlight, is now escaped.
  • Vendored module paths are now restricted to the _vendor directory (symlinks pointing outside are rejected).

Thanks to @R0X4R for finding and reporting the last two issues.

Go

This release is built with Go 1.27.4, which includes 12 security fixes. The one most relevant for Hugo is a crash in the net/http HTTP/1 server (used by hugo server) caused by a race in MaxBytesReader. The other 11 are in the cmd/go toolchain (cgo flag and linker injection at build time) and mainly matter if you build Hugo from source with untrusted dependencies.

Dependencies

  • golang.org/x/net v0.62.0 fixes two issues in the html package: quadratic complexity when coalescing text nodes, and a namespace issue when rendering raw text. Hugo uses this package when collecting HTML elements for hugo_stats.json and in the AsciiDoc integration.
  • github.com/go-jose/go-jose/v4 v4.1.6 (indirect dependency) contains a number of security fixes, among them GHSA-mgcc-cww5-fp2q (RSA modulus size limit when parsing JWKs) and a stack depth limit in the JSON decoder.

Changes

Dependency Updates

  • build(deps): bump golang.org/x/image from 0.47.0 to 0.48.0 29bcc86 @dependabot[bot]
  • build(deps): bump golang.org/x/text from 0.43.0 to 0.44.0 4f8354e @dependabot[bot]
  • build(deps): bump github.com/spf13/pflag from 1.0.10 to 1.1.0 6aebad4 @dependabot[bot]
  • build(deps): bump github.com/getkin/kin-openapi from 0.152.0 to 0.153.0 8846854 @dependabot[bot]
  • build(deps): bump github.com/bits-and-blooms/bitset 0586add @dependabot[bot]
  • build(deps): bump github.com/tdewolff/minify/v2 from 2.24.24 to 2.24.25 45dfa4e @dependabot[bot]
  • build(deps): bump github.com/yuin/goldmark from 1.8.6 to 1.8.7 d2010fc @dependabot[bot]
  • deps: Upgrade github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.5.0 => v0.6.0 2d6cf3a @bep
  • deps: Upgrade github.com/bep/imagemeta v1.1.0 => v1.1.1 b6fa2fe @bep
  • build(deps): bump golang.org/x/net from 0.61.0 to 0.62.0 fe34313 @dependabot[bot]
  • build(deps): bump github.com/tdewolff/minify/v2 from 2.24.22 to 2.24.24 7ff95e0 @dependabot[bot]
  • build(deps): bump github.com/gobwas/glob from 1.0.0 to 1.1.0 98ab2ff @dependabot[bot]
  • build(deps): bump github.com/go-jose/go-jose/v4 from 4.1.4 to 4.1.6 a1668da @dependabot[bot]

Documentation

Don't miss a new hugo release

NewReleases is sending notifications on new releases.