v0.154.0

gohugoio/hugov0.154.0Dec 31, 2025by bep

AI Summary

This release introduces 'partial decorators,' a powerful templating feature allowing templates to call other templates, along with type-checking utilities for Hugo resources.

Key Highlights

  • Introduction of partial decorators (inner keyword)
  • New reflect functions to identify core Hugo types
  • Increase WebP memory limit to 384 MiB

New Features

  • Partial decorators
  • reflect.Is{Page,Site,Resource,ImageResource}

Full Release Notes

Hugo `v0.154.0` is the **14th release** this year (not counting patch releases) and introduces [partial decorators](https://gohugo.io/quick-reference/glossary/#partial-decorator), or “partials with a twist.” This is a very powerful construct that I, @bep, have always wanted to have in Hugo, but I could never wrap my head around an implementation. Until now.

A small and not very useful example:

```handlebars
{{ with partial "b.html" "World" }}Hello {{ . }}{{ end }}
{{ define "_partials/b.html" }}<b>{{ inner . }}</b>{{ end }}
```

The above renders to:

```handlebars
<b>Hello World</b>
```

* The new `inner` keyword can be used zero or more times in a partial template, typically with different data (e.g. pages in a range), and its presence signals a reversal of the execution -- the callee becomes the caller.
* Decorators can be deeply nested, see [this PR](https://github.com/gohugoio/hugoDocs/pull/3330) for an example.

This release also brings some new utility funcs in the [reflect](https://gohugo.io/functions/reflect/) package to identify the core types in Hugo. For example, to identify an [processable image](https://gohugo.io/quick-reference/glossary/#processable-image) hasn't been trivial, now it is:

```handlebars
{{ $obj := . }}
{{ if reflect.IsResource $obj }}
   {{ if reflect.IsImageResource $obj }}
        // It has width/height and we can process it.
   {{ else }}
       // Just link to it.
   {{ end }}
{{ end }}
```

## Bug fixes

* tpl/collections: Fix apply to work with built-in funcs like len 5c7fad23 @bep #13418 
* Revert "resources/page: Fix slugorcontentbasename for section pages" bf1d20d7 @bep #14104 #14325 

## Improvements

* helpers: Limit verbose watch output for better readability d3b5d47a @majiayu000 #14277 
* tpl/reflect: Make the IsImageResource implementation less technical 86cd1838 @bep 
* internal/warpc: Increase WebP memory limit to 384 MiB 871da337 @jmooring #14309 
* Update tpl/reflect/reflect.go 1deec99b @bep 
* Add reflect.Is{Page,Site,Resource,ImageResource} b7bb557c @bep #14307 
* Allow partials to work as decorators 7c19c196 @bep #13193 

## Dependency Updates

* build(deps): bump github.com/tetratelabs/wazero from 1.10.1 to 1.11.0 2637aa15 @dependabot[bot]