{"record":{"id":"e337ab51006c9e32","repo":"gohugoio/hugo","slug":"no-sites-to-build","errorCode":null,"errorMessage":"no sites to build","messagePattern":"no sites to build","errorType":"console","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"hugolib/site.go","lineNumber":412,"sourceCode":"\t\tpub, err := publisher.NewDestinationPublisher(\n\t\t\tfirstSiteDeps.ResourceSpec,\n\t\t\ts.conf.OutputFormats.Config,\n\t\t\ts.conf.MediaTypes.Config,\n\t\t)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\ts.publisher = pub\n\t\ts.relatedDocsHandler = page.NewRelatedDocsHandler(s.conf.Related)\n\t\t// Site deps end.\n\n\t\tsites = append(sites, s)\n\n\t}\n\n\tif len(sites) == 0 {\n\t\treturn nil, errors.New(\"no sites to build\")\n\t}\n\n\tsitesVersionsRoles := make([][][]*Site, len(sites))\n\tfor i := 0; i < len(sites); i++ {\n\t\tsitesVersionsRoles[i] = make([][]*Site, len(versionsSorted))\n\t\tfor j := range versionsSorted {\n\t\t\tsitesVersionsRoles[i][j] = make([]*Site, len(rolesSorted))\n\t\t}\n\t}\n\n\tsiteVersionRoles := map[types.Ints2][]roles.Role{}\n\tsiteRoleVersions := map[types.Ints2][]versions.Version{}\n\t// i = site, j = version, k = role\n\tfor i, v1 := range sitesVersionsRoles {\n\t\tfor j, v2 := range v1 {\n\t\t\tfor k := range v2 {\n\t\t\t\tvar vrs *Site\n\t\t\t\tif j == 0 && k == 0 {","sourceCodeStart":394,"sourceCodeEnd":430,"githubUrl":"https://github.com/gohugoio/hugo/blob/52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2/hugolib/site.go#L394-L430","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\ndisableLanguages = [\"en\",\"fr\"]\n// after\ndisableLanguages = [\"fr\"]","handlingStrategy":"validation","validationCode":"// Assert at least one enabled language remains.\n// In CI: hugo config | grep -q '^languages\\[' || exit 1","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["config","languages","build","site"],"backgroundTag":null,"analyzedSha":"52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2","analyzedAt":"2026-08-09T21:49:36.660Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}