{"id":"b00e52a05d5fe084","repo":"gohugoio/hugo","slug":"no-code-renderer-found-for-q","errorCode":null,"errorMessage":"no code renderer found for %q","messagePattern":"no code renderer found for %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"markup/goldmark/codeblocks/render.go","lineNumber":71,"sourceCode":"}\n\nfunc (r *htmlRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {\n\treg.Register(ast.KindFencedCodeBlock, r.renderCodeBlock)\n}\n\nfunc (r *htmlRenderer) renderCodeBlock(w util.BufWriter, src []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {\n\tctx := w.(*render.Context)\n\n\tif entering {\n\t\treturn ast.WalkContinue, nil\n\t}\n\n\tn := node.(*ast.FencedCodeBlock)\n\n\tlang := getLang(n, src)\n\trenderer := ctx.RenderContext().GetRenderer(hooks.CodeBlockRendererType, lang)\n\tif renderer == nil {\n\t\treturn ast.WalkStop, fmt.Errorf(\"no code renderer found for %q\", lang)\n\t}\n\n\tordinal := ctx.GetAndIncrementOrdinal(ast.KindFencedCodeBlock)\n\n\tvar buff bytes.Buffer\n\n\tl := n.Lines().Len()\n\tfor i := range l {\n\t\tline := n.Lines().At(i)\n\t\tbuff.Write(line.Value(src))\n\t}\n\n\ts := htext.Chomp(buff.String())\n\n\tvar info []byte\n\tif n.Info != nil {\n\t\tinfo = n.Info.Segment.Value(src)\n\t}","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/gohugoio/hugo/blob/8a468df065a75c1c7cf9f6850f32148746590ea5/markup/goldmark/codeblocks/render.go#L53-L89","documentation":"Hugo's Goldmark code-block renderer resolves a render hook for every fenced code block via `GetRenderer(hooks.CodeBlockRendererType, lang)`. If no renderer is registered for the block's language — neither a user `render-codeblock` layout hook nor Hugo's built-in Chroma highlighter fallback — the AST walk stops and the page build fails naming the language string.","triggerScenarios":"Rendering a markdown fenced code block whose info string maps to a language for which no code-block renderer resolves. In practice this surfaces when the built-in highlighter path is unavailable (e.g. `markup.highlight.codeFences=false` combined with hook lookup changes) or a custom `layouts/_markup/render-codeblock-<lang>.html` setup leaves a language unhandled in an edge configuration.","commonSituations":"Themes providing per-language codeblock render hooks (e.g. render-codeblock-mermaid.html) removed or renamed during a theme upgrade; disabling code fences / highlighting in config while content still relies on codeblock rendering; Hugo version changes in render-hook resolution order exposing unusual info strings (odd characters in the fence language).","solutions":["Ensure the built-in fallback is available: leave markup.highlight.codeFences enabled (default true) so unhandled languages fall back to the Chroma renderer.","Add or restore a codeblock render hook for the language: layouts/_markup/render-codeblock-<lang>.html or a generic render-codeblock.html.","Fix the fence's info string if it contains a garbled/unintended language token.","If a theme provided the hook, confirm the theme module/version still ships it after upgrades."],"exampleFix":"<!-- before: layouts has no hook and highlighting disabled -->\n```mermaid\ngraph TD; A-->B;\n```\n<!-- after: add layouts/_markup/render-codeblock-mermaid.html -->\n<pre class=\"mermaid\">{{ .Inner | htmlEscape | safeHTML }}</pre>","handlingStrategy":"fallback","validationCode":"// ensure a matching render hook exists for each fenced language you use, e.g.\n// layouts/_markup/render-codeblock-mermaid.html for ```mermaid blocks","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Provide a specific render hook (layouts/_markup/render-codeblock-<lang>.html) for every custom code block language your content uses","Add a generic layouts/_markup/render-codeblock.html as the catch-all fallback renderer","Audit content for fenced languages (grep '```' | sort -u) when adding or removing render hooks","Remember theme-provided hooks can be shadowed or removed by project-level layouts"],"tags":["hugo","goldmark","render-hooks","code-blocks","markdown"],"analyzedSha":"8a468df065a75c1c7cf9f6850f32148746590ea5","analyzedAt":"2026-07-31T21:23:07.045Z","schemaVersion":2}