gohugoio/hugo · critical
no sites to build
Error message
no sites to build
What it means
Thrown at the end of site construction in hugolib/site.go:412 when the per-language site loop produced zero sites. The loop iterates confm.ConfigLangs(); if that yields no enabled language, no Site is created and the build cannot continue.
Solutions
- Check disableLanguages in hugo.toml and ensure at least one language remains enabled.
- Verify the [languages] block exists with at least one entry (e.g. [languages.en]).
- Run hugo config and confirm the resolved languages list is non-empty.
Example fix
// before disableLanguages = ["en","fr"] // after disableLanguages = ["fr"]
Defensive patterns
Strategy: validation
Validate before calling
// Assert at least one enabled language remains. // In CI: hugo config | grep -q '^languages\[' || exit 1
Prevention
- Never list every language in disableLanguages.
- Keep a default [languages.en] block unless intentionally multilingual with others.
- Validate the languages block in CI with hugo config.
When it happens
Trigger: All languages disabled via disableLanguages, an empty/nil languages configuration, or every language marked Disabled in the config map. Also reachable if ConfigLangs filtering removes all entries.
Common situations: Setting disableLanguages = ['en','fr',...] listing every configured language, or removing the defaultLanguageSetting while also disabling the fallback, or a config merge that nukes the languages block.
Related errors
- failed to compile cache buster
- failed to compile cache buster source
- failed to create config
- failed to decode config for language
- failed to decode $_hugo_config in template
AI-assisted analysis of gohugoio/hugo@52c9bd7908 (2026-08-09).
Data as JSON: /api/errors/e337ab51006c9e32.
Report an issue: GitHub.
Appendix: source
Thrown at hugolib/site.go:412
pub, err := publisher.NewDestinationPublisher(
firstSiteDeps.ResourceSpec,
s.conf.OutputFormats.Config,
s.conf.MediaTypes.Config,
)
if err != nil {
return nil, err
}
s.publisher = pub
s.relatedDocsHandler = page.NewRelatedDocsHandler(s.conf.Related)
// Site deps end.
sites = append(sites, s)
}
if len(sites) == 0 {
return nil, errors.New("no sites to build")
}
sitesVersionsRoles := make([][][]*Site, len(sites))
for i := 0; i < len(sites); i++ {
sitesVersionsRoles[i] = make([][]*Site, len(versionsSorted))
for j := range versionsSorted {
sitesVersionsRoles[i][j] = make([]*Site, len(rolesSorted))
}
}
siteVersionRoles := map[types.Ints2][]roles.Role{}
siteRoleVersions := map[types.Ints2][]versions.Version{}
// i = site, j = version, k = role
for i, v1 := range sitesVersionsRoles {
for j, v2 := range v1 {
for k := range v2 {
var vrs *Site
if j == 0 && k == 0 {View on GitHub (pinned to 52c9bd7908)