Skip to content

Update Hugo to v0.166.0 - #608

Open
bot-actions[bot] wants to merge 1 commit into
masterfrom
hugo-v0.166.0
Open

bot-actions[bot] wants to merge 1 commit into
masterfrom
hugo-v0.166.0

Conversation

@bot-actions

@bot-actions bot-actions Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

👑 Hugo update!

v0.166.0 Release Notes

This release is mostly about hardening and bug fixes, but there are some notable changes:

  • .Render now takes an optional context argument: {{ .Render "view" $ctx }}, mirroring the partial API. This makes it possible to pass e.g. a dict to a content view. See #15077.
  • The return keyword in templates has been reimplemented. It now works in any template (not just partials) and can be used anywhere, e.g. inside if or range blocks. See #15212.
  • New resources.Publish template function and IndexOf method on Pages.
  • related config: new tokenize option for index values, and index creation is faster.
  • Several security fixes; see the notes below.

Note

  • tpl/transform: Bump fileCacheEntryVersion in transform.ToMath (note) 8d88b8b4 @bep #15267
  • resources/images: Bump formatVersionNumbers.PNG and fix version cache busting for images.Filter (note) d19e0a4b @bep #12536 #12543 #15266
  • warpc/js: Upgrade katex to 0.18.4 (note) ec52e638 @bep #15254
  • hexec: Fail on symlinks that escape the Node.js permission paths c05c012a @bep
  • config/security: Deny text/org content by default e6abb9c3 @bep
  • config/security: Add http.proxyFromEnvironment and document the resolved address check 6a2a955d @bep #15301 #15302
  • deps: Upgrade github.com/gobwas/glob v0.2.3 => v1.0.0 efd24562 @bep #15273
  • hugofs: Drop symlinked mount roots 938c8206 @bep
  • tpl: Improve the return keyword in templates 8405b802 @bep #15212
  • resources/page: Don't let a title's "/" split an auto-derived slug 39507d51 @ipince #4092 #3577 #5571 #4090

Glob patterns

The glob library used for e.g. module mounts (includeFiles, excludeFiles), cascade targets, segments, deployment matchers and noVendor has been upgraded to v1.0.0. This is a complete rewrite of the matching engine that fixes a long list of correctness bugs, but it also means that some patterns may behave differently:

  • Malformed patterns (e.g. an unclosed {, an empty [] class) now fail with a syntax error instead of being silently accepted.
  • ** matches any sequence of characters including separators, but it is not the **/ "globstar" of shells: **/x requires the literal / and does not match x, and a/**/b does not match a/b. Use {**/,}x if you need both.
  • \ is the escape character, so a literal backslash must be written as \\.

If a pattern that used to match no longer does (or vice versa), it was most likely relying on a bug in the old engine.

Security

  • text/org content is now denied by default, as Org mode's export blocks and @@html:...@@ snippets pass raw HTML through unescaped, making it the same XSS sink as text/html. Sites with Org content can opt back in via security.allowContent.
  • Remote fetches (resources.GetRemote etc.) now validate the resolved address at dial time and reject loopback, private, link-local, CGNAT and similar ranges. This only applies under the default security.http.urls allowlist; if you have customized it, you have opted into your own hosts and the check stands down. Proxies from HTTP_PROXY/HTTPS_PROXY hide the destination address from this check and are now ignored unless you set security.http.proxyFromEnvironment = true.
  • Node.js tools (PostCSS, Tailwind CSS etc.) now fail before invocation if a symlink inside the project resolves outside the allowed read/write roots. If you have a legitimate link, add its target to security.node.permissions.allowRead.
  • Mount roots that are themselves symlinks (e.g. themes/mytheme/assets -> /somewhere/else) are now dropped. This closes a gap in the themes/ confinement; absolute mount source values are still allowed.

Other

  • {{ return <value> }} outside a partial is now an error; it was previously silently ignored.
  • A page without an explicit slug whose title contains a / (e.g. Watch/listen to this) now gets a single URL segment (.../watch-listen-to-this/) instead of a nested one (.../watch/listen-to-this/). Taxonomy and term pages are not affected.
  • Hugo is now built with Go 1.27.

KaTeX

When upgrading to Hugo v0.166.0, sites using transform.ToMath with the output option set to html or htmlAndMathml must update the KaTeX stylesheet referenced in their template(s) to version 0.18.4 or higher. Using older CSS versions like 0.16.21 will cause certain mathematical or chemical expressions to render incorrectly.

Example update:

- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css">
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.18.4/dist/katex.min.css">

See these examples:

Bug fixes

  • tpl/strings: Fix replaceRE with zero-width assertions ae07063f @youdie006
  • common/hreflect: Fix the off-by-one in the float to int overflow guards 5130d000 @youdie006
  • resources/images: Fix filters on transparent colors and paletted images 77856683 @bep #12536 #12543
  • github: Fix workflow for stale issues efe5cbc7 @jmooring #15261
  • all: Run modernize -fix ./... 7b5199fd @bep
  • commands: Fix lang flag description in config command 87260e4a @jmooring #15223
  • hugolib: Fix slice bounds panic when deleting multiple nodes at same path 49dceb19 @bep #15207
  • hugolib: Fix ReadingTime and FuzzyWordCount calculations 5e709925 @jmooring #15206

Improvements

  • js: Add es2025 as supported build target 857120b7 @bep #15307
  • hugofs: Drop symlinked mount roots 938c8206 @bep
  • markup/highlight: Escape lineAnchors before passing it to Chroma 3b2d3b82 @bep
  • tpl/partials: Slight performance improvement of the common partialCached case 9c2527f8 @bep
  • Add internalExternal.IgnoreTailwindCSSSecurityError config option a36bd274 @bep
  • config/security: Harden the default http.urls and resolved address checks (#15285) 24d5e42f @bep
  • resources/images: Preserve the source palette for geometric filter chains 9e7c978e @bep #12543
  • resources/images: Add golden test cases for geometric filter chains on paletted images 6b5b7d82 @bep #12543
  • resources/images: Add some golden test cases 62e24b7e @bep #12536 #12543
  • related: Speed up index creation f61346ed @bep
  • related: Add tokenize option for index values 850f11c0 @jmooring #7515 #15199
  • resources/page: Don't let a title's "/" split an auto-derived slug 39507d51 @ipince #4092 #3577 #5571 #4090
  • config/allconfig: Improve resilience of hugo mod init 90fe5068 @jmooring #15253
  • tpl: Separate deferred templates by escaping mode 49835f8f @Soundcreates #15234
  • resources: Validate the resolved address on remote fetches d6e6f9e5 @bep #15247
  • markup: Escape code-fence attribute values in the default renderer e4dc48cf @bep #15247
  • hugolib: Make .Render take an optional context argument bcde8063 @bep #15077
  • modules/npm: Make the generated workspace package private with a stable name df4ac348 @bep #15245
  • common/hstore: Keep read lock while sorting map values 166d3ee1 @Soundcreates #15237
  • metrics: Improve template metrics duration formatting a25af7fa @Shiwang0-0 #15027
  • Remove comments from rebuild test functions 723579ff @bep
  • hugolib: Add some fast render mode integration tests 85ad5e48 @bep
  • Upgrade to Go 1.27 e31ff547 @bep #15228
  • tpl: Improve the return keyword in templates 8405b802 @bep #15212
  • page: Add IndexOf method to Pages bf05832d @Shiwang0-0 #13589
  • tpl/resources: Add resources.Publish a05736cb @bep #15208
  • markup/pandoc: Support pandoc 3.11 and later 423e9cea @jmooring #15271 #15280

Dependency Updates

  • build(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2 3fbfd273 @dependabot[bot]
  • build(deps): bump golang.org/x/sync from 0.22.0 to 0.23.0 393de587 @dependabot[bot]
  • build(deps): bump golang.org/x/mod from 0.40.0 to 0.41.0 870f7464 @dependabot[bot]
  • build(deps): bump github.com/getkin/kin-openapi from 0.146.0 to 0.149.0 6152e22e @dependabot[bot]
  • build(deps): bump github.com/bits-and-blooms/bitset 5b6e7c23 @dependabot[bot]
  • build(deps): bump github.com/bep/lazycache from 0.8.1 to 0.9.0 dc03bb27 @dependabot[bot]
  • build(deps): bump github.com/bep/tmc from 0.6.0 to 0.7.0 701dd337 @dependabot[bot]
  • build(deps): bump github.com/yuin/goldmark from 1.8.5 to 1.8.6 b4062c84 @dependabot[bot]
  • build(deps): bump golang.org/x/image from 0.44.0 to 0.45.0 cdd16273 @dependabot[bot]
  • deps: Upgrade github.com/gobwas/glob v0.2.3 => v1.0.0 efd24562 @bep #15273
  • build(deps): bump golang.org/x/mod from 0.39.0 to 0.40.0 d4629682 @dependabot[bot]
  • build(deps): bump github.com/tdewolff/minify/v2 from 2.24.16 to 2.24.17 fd5f7c6e @dependabot[bot]
  • build(deps): bump github.com/gohugoio/httpcache from 0.8.0 to 0.9.0 6b335176 @dependabot[bot]
  • build(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.1 5f0d88b8 @dependabot[bot]
  • build(deps): bump golang.org/x/tools from 0.48.0 to 0.49.0 9171daeb @dependabot[bot]
  • build(deps): bump software.sslmate.com/src/go-pkcs12 from 0.7.0 to 0.7.2 d1ee825b @dependabot[bot]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant