{"record":{"id":"85a065b47de95c9c","repo":"mermaid-js/mermaid","slug":"diagram-name-not-found","errorCode":null,"errorMessage":"Diagram ${name} not found.","messagePattern":"Diagram (.+?) not found\\.","errorType":"exception","errorClass":"DiagramNotFoundError","httpStatus":null,"severity":"error","filePath":"packages/mermaid/src/diagram-api/diagramAPI.ts","lineNumber":76,"sourceCode":"  diagram.injectUtils?.(\n    log,\n    setLogLevel,\n    getConfig,\n    sanitizeText,\n    setupGraphViewbox,\n    getCommonDb(),\n    () => {\n      // parseDirective is removed in https://github.com/mermaid-js/mermaid/pull/4759.\n      // This is a no-op for legacy support.\n    }\n  );\n};\n\nexport const getDiagram = (name: string): DiagramDefinition => {\n  if (name in diagrams) {\n    return diagrams[name];\n  }\n  throw new DiagramNotFoundError(name);\n};\n\nexport class DiagramNotFoundError extends Error {\n  constructor(name: string) {\n    super(`Diagram ${name} not found.`);\n  }\n}\n","sourceCodeStart":58,"sourceCodeEnd":84,"githubUrl":"https://github.com/mermaid-js/mermaid/blob/d93e9c88c01a599c062ee6a3f1462e3558ac6b90/packages/mermaid/src/diagram-api/diagramAPI.ts#L58-L84","documentation":"Thrown by getDiagram(name) when name is not a key in the internal diagrams registry (a DiagramNotFoundError subclass of Error). It is the synchronous lookup counterpart to the lazy-load path; it fires when code asks for a diagram definition by name and that name was never registerDiagram'd.","triggerScenarios":"Calling getDiagram('foo') for an unregistered type; Diagram.fromText reaching the final getDiagram after a failed loader registration left the registry unchanged; calling a diagram db/parser before its module loaded.","commonSituations":"A tree-shaken build dropped a diagram module, dynamic import failed silently, or a custom integration calls getDiagram before registerDiagram.","solutions":["Ensure the diagram module is imported and registerDiagram(...) ran before getDiagram.","Use the lazy loader path (getDiagramLoader) for external diagrams instead of assuming synchronous availability.","Catch DiagramNotFoundError and trigger the loader, then retry.","Verify the name string exactly matches the registered id (case-sensitive)."],"exampleFix":"// before\nconst { db, renderer } = getDiagram(type);\n\n// after\nlet def;\ntry { def = getDiagram(type); }\ncatch {\n  const loader = getDiagramLoader(type);\n  if (!loader) throw new Error(`Unsupported: ${type}`);\n  const { id, diagram } = await loader();\n  registerDiagram(id, diagram);\n  def = getDiagram(type);\n}\nconst { db, renderer } = def;","handlingStrategy":"try-catch","validationCode":"import { getDiagramLoader, registerDiagram } from 'mermaid';\n\nasync function ensureDiagram(name: string) {\n  try { return getDiagram(name); }\n  catch {\n    const loader = getDiagramLoader(name);\n    if (!loader) throw new Error(`Unsupported diagram: ${name}`);\n    const { id, diagram } = await loader();\n    registerDiagram(id, diagram);\n    return getDiagram(name);\n  }\n}","typeGuard":"function isRegistered(name: string): boolean {\n  try { getDiagram(name); return true; } catch { return false; }\n}","tryCatchPattern":"import { DiagramNotFoundError } from 'mermaid';\ntry {\n  const def = getDiagram(name);\n} catch (e) {\n  if (e instanceof DiagramNotFoundError) {\n    // load and register, then retry\n  } else throw e;\n}","preventionTips":["Register all diagram modules at app startup.","Use the lazy loader path for external diagrams rather than assuming sync availability.","Confirm the requested name matches the registered id exactly (case-sensitive)."],"tags":["mermaid","registry","diagram","lookup","not-found"],"backgroundTag":null,"analyzedSha":"d93e9c88c01a599c062ee6a3f1462e3558ac6b90","analyzedAt":"2026-08-12T06:23:11.304Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}