{"id":"e337ab51006c9e32","repo":"gohugoio/hugo","slug":"no-sites-to-build","errorCode":null,"errorMessage":"no sites to build","messagePattern":"no sites to build","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","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/8a468df065a75c1c7cf9f6850f32148746590ea5/hugolib/site.go#L394-L430","documentation":"Emitted during site construction (hugolib/site.go:412) when, after iterating the configured languages/configs, the resulting sites slice is empty. Hugo cannot build anything without at least one site, so it fails fast instead of producing empty output.","triggerScenarios":"NewHugoSites/site setup where every configured language is filtered out — e.g. disableLanguages listing all defined languages, or a languages config block that resolves to zero buildable languages.","commonSituations":"Multilingual configs where disableLanguages accidentally includes every language (often via environment-specific config merging), a typo making the languages map empty, or module/config mounts pulling in a config that disables the only language.","solutions":["Check disableLanguages in your config — ensure at least one defined language is not disabled.","Verify the [languages] section defines at least one language and keys aren't misspelled.","Run `hugo config` to inspect the merged configuration (environment overlays may disable languages unexpectedly)."],"exampleFix":"# before (hugo.toml)\n[languages.en]\n[languages.fr]\ndisableLanguages = [\"en\", \"fr\"]\n# after\ndisableLanguages = [\"fr\"]","handlingStrategy":"validation","validationCode":"cfg, err := allconfig.LoadConfig(...)\nif err != nil { return err }\nif len(cfg.LanguagesDefaultFirst) == 0 {\n    return fmt.Errorf(\"config defines no languages/sites\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure the site config defines at least one language and doesn't disable all of them","Check disableLanguages / disableKinds settings before invoking a build","Validate loaded config (site/language count) before calling the build API"],"tags":["hugo","config","multilingual","site-build"],"analyzedSha":"8a468df065a75c1c7cf9f6850f32148746590ea5","analyzedAt":"2026-07-31T21:23:07.045Z","schemaVersion":2}