{"record":{"id":"274506b24882dbe9","repo":"gohugoio/hugo","slug":"unknown-dimension-q-274506","errorCode":null,"errorMessage":"unknown dimension %q","messagePattern":"unknown dimension %q","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"hugolib/site.go","lineNumber":635,"sourceCode":"\th.init.gitInfo = hsync.OnceMoreFunc(func(ctx context.Context) error {\n\t\treturn h.loadGitInfo()\n\t})\n\n\treturn h, nil\n}\n\n// GetSiteDimension returns the value of the specified site dimension (such as language, version, or role)\n// based on the provided dimension name string. If the dimension name is unknown, it panics.\nfunc (s *Site) Dimension(d string) page.SiteDimension {\n\tswitch d {\n\tcase sitesmatrix.DimensionName(sitesmatrix.Language):\n\t\treturn s.language\n\tcase sitesmatrix.DimensionName(sitesmatrix.Version):\n\t\treturn s.version\n\tcase sitesmatrix.DimensionName(sitesmatrix.Role):\n\t\treturn s.role\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown dimension %q\", d))\n\t}\n}\n\n// Returns the server port.\nfunc (s *Site) ServerPort() int {\n\treturn s.conf.C.BaseURL.Port()\n}\n\n// Returns the configured title for this Site.\nfunc (s *Site) Title() string {\n\treturn s.conf.Title\n}\n\nfunc (s *Site) Copyright() string {\n\treturn s.conf.Copyright\n}\n\nfunc (s *Site) Lang() string {","sourceCodeStart":617,"sourceCodeEnd":653,"githubUrl":"https://github.com/gohugoio/hugo/blob/52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2/hugolib/site.go#L617-L653","documentation":"Panic in Site.Dimension(d): the dimension name d is not one of the recognized names ('language', 'version', 'role'). Dimension exposes a single site-axis value for use in templates (e.g. in a sites matrix); an unknown name is a caller/template error.","triggerScenarios":"Calling .Site.Dimension \"<invalid>\" or sitesmatrix dimension lookups with a typo'd or unsupported name. The valid names come from sitesmatrix.DimensionName of Language, Version, Role. Passing 'lang', 'locale', 'env', etc. triggers the panic.","commonSituations":"Template author guesses a dimension name. Using a feature (e.g. versions/roles) without enabling it and passing a name. Typo in a dimension string.","solutions":["Use only valid dimension names: \"language\", \"version\", or \"role\".","If you only need the language, prefer .Language or .Lang instead of .Dimension.","Check the sitesmatrix config; enable the version/role dimension before querying it."],"exampleFix":"{{/* before */}}\n{{ .Site.Dimension \"lang\" }}\n\n{{/* after */}}\n{{ .Site.Dimension \"language\" }}\n{{/* or simpler */}} {{ .Site.Language.Lang }}","handlingStrategy":"type-guard","validationCode":"// Whitelist dimension names before calling .Dimension.\n// Template:  {{ in (slice \"language\" \"version\" \"role\") $d }}\n// Go:        var validDim = map[string]bool{\"language\":true,\"version\":true,\"role\":true}","typeGuard":"func validDimension(d string) bool {\n    switch d {\n    case \"language\", \"version\", \"role\":\n        return true\n    }\n    return false\n}\n\n// Usage: if validDimension(d) { v := site.Dimension(d) }","tryCatchPattern":null,"preventionTips":["Use only \"language\", \"version\", \"role\".","Prefer .Language/.Lang for the language axis.","Enable version/role dimensions in config before querying.","Validate user/front-matter-supplied dimension strings."],"tags":["site","templates","sites-matrix","panic","api-misuse"],"backgroundTag":null,"analyzedSha":"52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2","analyzedAt":"2026-08-09T21:49:36.660Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}