Skip to content

Releases: gohugoio/hugo

v0.112.4

28 May 13:25
@bep bep
Compare
Choose a tag to compare

Documentation

v0.112.3

24 May 14:54
@bep bep
Compare
Choose a tag to compare

What's Changed

  • Fix regression when loading config -e is empty or HUGO_ENV or HUGO_ENVIRONMENT is set 231374a @bep #11013

v0.112.2

24 May 11:16
@bep bep
Compare
Choose a tag to compare

What's Changed

v0.112.1

23 May 17:42
@bep bep
Compare
Choose a tag to compare

What's Changed

  • Fix regression when config for OutputFormat.BaseName is an empty string ed906a8 @bep #11000

Also see the main release: https://github.com/gohugoio/hugo/releases/tag/v0.112.0

v0.112.0

23 May 08:27
@bep bep
Compare
Choose a tag to compare

Note: There's a patch release out already, see https://github.com/gohugoio/hugo/releases/tag/v0.112.1

Proper TailwindCSS v3.x support, much improved language config merge, consolidation of all Hugo config (check out hugo config), rewritten commands package (CLI) using SimpleCobra, Goldmark's typographer extension (quotation marks per language), and more.

Headlines

TailwindCSS v3.x Support, new cache buster configuration

See https://github.com/bep/hugo-starter-tailwind-basic for a running example.

TailwindCSS 3 has been out for a while now, and unfortunately their new build strategy didn't work very well with Hugo. But this release adds a new build.cachebusters config option for the resource cache that allows more fine grained control over when to trigger a new Tailwind build. This is a generally useful feature, so if you're having issues not seeing your resource changes (e.g. change to a JS file) on change, you could try to tweak the defaults. A tip is to run the server with hugo server --debug and watch out for log messages prefixed with cachebuster: on file changes.

There are several possible setups here, but one that we have tested and that works well is outlined in the config below. The basic concept is to add hugo_stats.json to the server watcher list in Hugo and trigger a new TailwindCSS build only whenever either this file or the main CSS file changes.

[module]
  [[module.mounts]]
    source = "assets"
    target = "assets"
  [[module.mounts]]
    source = "hugo_stats.json"
    target = "assets/watching/hugo_stats.json"

[build]
  writeStats = true
  [[build.cachebusters]]
    source = "assets/watching/hugo_stats\\.json"
    target = "styles\\.css"
  [[build.cachebusters]]
    source = "(postcss|tailwind)\\.config\\.js"
    target = "css"
  [[build.cachebusters]]
    source = "assets/.*\\.(js|ts|jsx|tsx)"
    target = "js"
  [[build.cachebusters]]
    source = "assets/.*\\.(.*)$"
    target = "$1"

And then in tailwind.config.js:

module.exports = {
	content: ['./hugo_stats.json'],
};

Reconsolidated all configuration handling

For this release we have collected all configuration into one big Go struct and rewritten the command line API using SimpleCobra. All of this makes the source code easier to maintain and understand, but the original motivation for this was to get a complete and autogenerated API reference for Hugo (we're working on getting that done), but this also have some less technical upsides:

'hugo config' is now complete

What you get when running hugo config is a complete TOML representation (add --format json or --format yaml for alternative formats) of the effective configuration. As this will include default values and configuration merged in from themes, we don't recommend to copy and paste this into hugo.toml, as that would make your configuration very verbose.

Improved language config handling

See issue #10620 for some details, but in general, the merge behaviour of sections from languages is much improved. In the example below for language en you will now get:

 "comments": {
    "color": "blue",
    "title": "English Comments Title",
}

In earlier versions of Hugo you would get:

 "comments": {
    "title": "English Comments Title",
}
title = "Base Title"
staticDir = "mystatic"
[params]
[params.comments]
color = "blue"
title = "Default Comments Title"
[languages]
[languages.en]
title = "English Title"
[languages.en.params.comments]
title = "English Comments Title"

Note that values in a given language will always have precedence over same keys in root (the section inside the language is the receiving side of any merge operation), so, if you want the old (and buggy) behaviour, you can add a merge strategy to one of the params sections, e.g:

[languages.en.params.comments]
_merge = "none"
title = "English Comments Title"

You can now also configure just about everything per language. One useful example would be the Goldmark typographer extension:

[languages.de]
languageCode = 'de-DE'
languageName = 'Deutsch'
weight = 2
[languages.de.markup.goldmark.extensions.typographer]
leftDoubleQuote = '«'   # default “
rightDoubleQuote = '»'  # default ”

More info in verbose build output

If you build flag with the -v, you will now get timing info for the core building steps in Hugo:

INFO 2023/05/16 09:53:55 process in 17 ms
INFO 2023/05/16 09:53:55 assemble in 345 ms
INFO 2023/05/16 09:53:55 render in 341 ms
INFO 2023/05/16 09:53:55 postProcess in 0 ms

Notes

Bug fixes

Improvements

Dependency Updates

v0.111.3

12 Mar 12:00
@bep bep
Compare
Choose a tag to compare

Bug fixes

  • Fix "unknown shortcode token" when calling shortcode within fenced code block e7148f3 @bep #10819
  • Don't fail when calling Paginate with an empty pages.PagesGroup 34a86e1 @bep #10802
  • Improve error message for unclosed shortcode with inner content 9818724 @deining

Improvements

Dependency Updates

Documentation

v0.111.2

05 Mar 12:43
@bep bep
Compare
Choose a tag to compare

Bug fixes

Documentation

Build Setup

v0.111.1

02 Mar 10:30
@bep bep
Compare
Choose a tag to compare

This fixes the "page" not defined issue in Hugo 0.111.0. eef23a7 @bep #10774

v0.111.0

01 Mar 21:13
@bep bep
Compare
Choose a tag to compare

Hugo 0.111.0 is the second Hugo release of the year. Note: There's already a patch release.

Notable news

Page Fragments

We added the new .Fragments method on Page as part of the Related Content feature refresh (below), but it's plenty useful on its own, and has been long sought after by Hugo users.

It has many uses: Build table of contents, check if a page fragment (heading identifier) exists on a page, check for duplicate heading identifiers, start table of contents from a specific heading identifier. See the Hugo Documentation for more information

Indexing of Page Fragments in Related Content

We have reworked the Related Content API so it's now one method .Related that takes either a Page or an options map. We have also introduced a new type attribute on the index configuration with the new type fragments. See this for details, but to add some weight to the page titles in the Related Content configuration you can do this:

[related]
threshold    = 20
includeNewer = true
toLower      = false
[[related.indices]]
name        = "fragmentrefs"
type        = "fragments"
applyFilter = false
weight = 50

See the Hugo Documentation for more.

Global page func

Note: There was a bug in this release that made this new feature not working, so you need to upgrade to Hugo 0.111.1. We blame it on Go.

Hugo almost always passes a Page as the data context into the top level template (e.g. single.html) (the one exception is the multihost sitemap template). This means that you can access the current page with the . variable in the template.

But when you're deeply nested inside .Render, partial etc., accessing that Page object isn't always practical or possible.

For this reason, Hugo now provides a global page function that you can use to access the current page from anywhere in any template.

{{ page.Title }}

Notes

  • For the Goldmark markdown hander, we now split parse and render for Goldmark. This was motivated by the new fragments support in Related Content, but it has some other side effects: If you only need a page's table of contents, we now skip the rendering step, which makes it faster, but it also means that you can access the page .Fragments structure from everywhere, even in render hooks (271318a @bep #10750)
  • tpl/tplimpl: Remove the Google News internal template 66f94b4 @jmooring
  • Only invoke a given cached partial once 4ef9baf @bep #4086 #9588

Bug fixes

Improvements

Dependency Updates

Documentation

Build Setup

v0.110.0

17 Jan 12:33
@bep bep
Compare
Choose a tag to compare

Note

Bug fixes

Improvements

Dependency Updates

Documentation

Build Setup