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]