The work title for the v0.123.0
release has been "the million pages release", introducing a new memory limit that allows for a streaming build, shifting large objects out of memory when not in use. This release is also a rewrite of the Hugo core, fixing lots of long-lived bugs and adding some other exciting improvements (see below). There are some breaking changes that have been announced for a long time. Most sites will not be affected by this, but we recommend that you test your site with the new Hugo version before you set it up to build to production. Many people have contributed to this release, but a special shoutout goes to @bep and @jmooring, but also to @TiGR and @McShelby for their help testing and reporting bugs.
A list of notable new features:
- You can now set a upper memory limit (default 25% of system memory) via the OS environment variable
HUGO_MEMORYLIMIT
(in gigabytes) allowing for much larger data/page sets and/or running on lower specced PCs. This is backed by a partitioned LRU cache used throughout Hugo. A cache that gets dynamically resized in low memory situations, allowing Go's Garbage Collector to free the memory. Note that for regular sized Hugo sites, the performance should be about the same as before. - New dependency tracker for partial server rebuilds. This quickly calculates the delta given a changed resource (e.g. a content file, template, JS file etc.) and supports transitive relations.
- A new document store. Previously, a little simplified, we split the document store (where we store pages and resources) in a tree per language. This worked pretty well, but the structure made some operations harder than they needed to be. We have now restructured it into one Radix tree for all languages. Internally the language is considered to be a dimension of that tree, and the tree can be viewed in all dimensions concurrently. This makes some operations re. language simpler (e.g. finding translations is just a slice range), but the idea is that it should also be relatively inexpensive to add more dimensions if needed (e.g. role). With this we also introduce a new logical page Path which we will used going forward to support other content data sources.
- Add warnidf template function, see docs
- Add the
[params]
concept to front matter, see docs - Add images.Dither filter, see docs
Bug fixes
- Fix handling of build options for term pages 5ada27b @bep #12058
- Fix sample logic when adding content files in server afe5b6d @bep #12054
- all: Fix typos and some URLs 168d375 @coliff
- Fix handling of draft term pages fc6aabe @bep #12055
- commands: Fix --clock with the list command 4835f9e @bep #11888
- Fix server panic on i18n file change 9679443 @bep #12048
- Fix rebuild regression on non-default content language edits 68f67c9 @bep #12043
- Fix i18n rebuild regression f1491c9 @bep #12039
- Fix rebuild with resources.Concat 639073e @bep #12017
- all: Fix typos 0672b5c @coliff
- resources/page: Fix typo e309f82 @rosano
- Fix taxonomy term with backing file regression caba6ba @bep #12020
- Fix rebuild of changed bundled content files a65622a @bep #12000
- Fix site.Taxonomies for taxonomies with space in name 146aedd @bep #12001
- Misc resource fixes/improvements 2873324 @bep #11974
- Fix disabled languages regression 4174a78 @bep #11959
- tpl/data: Fix GetCSV deprecation message 5dd06b4 @jmooring
- Fix failing test on Windows d8f0e30 @bep
- deploy: Fix CloudFront invalidation with AWS SDK2 d8c2734 @bep
- Fix build error 34d63c8 @bep
- Fix recent regression .Resources.Get for resources with spaces in filename 80595bb @bep #11944
- hugofs/glob: Fix dropped test error ec22bb3 @alrs
Improvements
- Handle rebuilds when resources passed to transform.Unmarshal etc. changes 5dbc29d @bep #12065
- Don't use the same value in .Data.Term.Title as in .Title 5bdda0b @bep #12041
- Let standard library handle charset parameter to MIME types 43ea2cd @datosh #10734
- Add images.Dither filter 21d9057 @jmooring #8598
- markup/goldmark: Improve TOC tests f4575e5 @jmooring
- Move the duplicate page/resource filter 0851c17 @bep #12013
- Upgrade to Go 1.22 9571246 @bep #12010
- Avoid impporting deploy from config when nodeploy tag is set 0257eb5 @bep #12009
- commands: Remove unused memstats flag bd0200d @bep
- source: Remove unused Filesystem struct a80c302 @bep
- Filter dot files etc. in i18n 9df7b29 @bep #11993
- commands: Revert the recent changes that allowed profiling on server rebuilds c37bf19 @bep
- Handle resource changes when the resources is already evicted from cache 609d798 @bep #11988 #11973 #11988
- all: Rename Unmormalized => Unnormalized 53f2043 @bep
- hugolib: Formally deprecate .Page.NextPage .Page.PrevPage 7f82461 @jmooring
- hugio: Rename strigReadSeeker => stringReadSeeker b72f909 @bep
- resources/page: Formally deprecate .Site.LastChange 3a665dd @jmooring
- Preserve file/dir name case when loading data 46575ba @bep #11979
- Detect now invalid path patterns in cascade 058f230 @bep #11977
- Handle build vs _build in front matter a66480f @bep #11970
- resources: Optimize reading resource Content when it's already a string e33a632 @bep
- tpl/tplimpl: Update embedded instagram, twitter, and vimeo shortcodes d0788b9 @jmooring #11971
- Add some more context to error 034fbef @bep #11970
- Improve nilpointer error message 8d42a79 @bep
- hugolib: Adjust a test case f5ec75d @bep
- hugolib: Revert deprecation of .Page.Lang 6cb3bda @jmooring
- all: Deprecate .Page.Lang and .Page.File.Lang 963cecc @jmooring
- config/security: Add SYSTEMDRIVE to OsEnv allowlist b6def61 @jmooring
- hugolib: Add some more details to the "paginator not supported" error 1891d5e @bep #11949
- Run go mod tidy 156f08d @bep
- Upgrade to deploy to use AWS SDK V2 a1c6498 @frankywahl
- Improve error message when attempting to paginate from a single page template 6c3b6ba @bep #11953
- Filter out duplicate content resource files bd66d30 @bep #11946
- output: Prevent setting Name directly in new output formats 309d61b @bep #11947
- Create default link and image render hooks 5b7cb25 @bep #11933
- Emit a warning that can be turned off when overwriting built-in .Params values afee781 @bep #11941
- Add warnidf template function 4e84f57 @bep #9189
- Add path, kind and lang to content front matter f31a6db @bep #11544
- all: Run gofumpt -l -w . a795acb @bep
- testing: Simplify some integration tests 982d951 @bep
- Add the [params] concept to front matter 6dedb4e @bep #11055
- tpl/data: Deprecate data.GetJSON and data.GetCSV 292626e @bep
- modules: Print required Hugo version for incompatible modules 60d954c @razonyang
- hugolib: Remove unused test image 63e0a92 @bep
- navigation: Improve menu cache ce7daa6 @Kandulanaveennaidu
- testing: Rename integration_test.go to PACKAGE_integration_test.go 2a03294 @bep
- Port some integration tests to new test setup 50dc327 @bep
- all: Rework page store, add a dynacache, improve partial rebuilds, and some general spring cleaning 7285e74 @bep #11455 #11455 #11549 #10169 #10364 #10482 #10630 #10656 #10694 #10918 #11262 #11439 #11453 #11457 #11466 #11540 #11551 #11556 #11654 #11661 #11663 #11664 #11669 #11671 #11807 #11808 #11809 #11815 #11840 #11853 #11860 #11883 #11904 #7388 #7425 #7436 #7544 #7882 #7960 #8255 #8307 #8863 #8927 #9192 #9324
Dependency Updates
- build(deps): bump github.com/tdewolff/minify/v2 from 2.20.16 to 2.20.17 f54ba6f @dependabot[bot]
- build(deps): bump github.com/evanw/esbuild from 0.20.0 to 0.20.1 4019b17 @dependabot[bot]
- build(deps): bump golang.org/x/tools from 0.17.0 to 0.18.0 4a53fd5 @dependabot[bot]
- build(deps): bump golang.org/x/net from 0.20.0 to 0.21.0 2d1681d @dependabot[bot]
- build(deps): bump golang.org/x/mod from 0.14.0 to 0.15.0 301bafa @dependabot[bot]
- build(deps): bump github.com/yuin/goldmark from 1.6.0 to 1.7.0 58d7f83 @dependabot[bot]
- build(deps): bump github.com/getkin/kin-openapi from 0.122.0 to 0.123.0 54ad51e @dependabot[bot]
- build(deps): bump github.com/tdewolff/minify/v2 from 2.20.13 to 2.20.16 bd1bcc0 @dependabot[bot]
- build(deps): bump github.com/evanw/esbuild from 0.19.12 to 0.20.0 b332f24 @dependabot[bot]
- deps: Update gocloud.dev/aws d8e1e82 @bep
- build(deps): bump github.com/aws/aws-sdk-go from 1.48.6 to 1.50.7 4d98b0e @dependabot[bot]
- build(deps): bump golang.org/x/image from 0.14.0 to 0.15.0 15b9976 @dependabot[bot]
Documentation
- docs: Regen docshelper 60b176c @bep
- docs: Regen CLI docs 068ccde @bep
- docs: Regenerate docshelper 7cb447a @bep
- docs: Make null booleans falsy in the docs helper 5161544 @bep
- docs: Regen docs helper 7caa5b3 @bep
- docs: Prepare for new sub tree fc7de71 @bep #11925