{"record":{"id":"5816a025716378de","repo":"MagicMirrorOrg/MagicMirror","slug":"no-module-name-found-for-this-configuration-jso","errorCode":null,"errorMessage":"No module name found for this configuration:\n${JSON.stringify(module, null, 2)}","messagePattern":"No module name found for this configuration:\n(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"js/app.js","lineNumber":227,"sourceCode":"\t\t\t}\n\n\t\t\t// get the used module positions\n\t\t\tUtils.getModulePositions();\n\n\t\t\tlet modules = [];\n\t\t\tfor (const module of config.modules) {\n\t\t\t\tif (module.disabled) continue;\n\t\t\t\tif (module.module) {\n\t\t\t\t\tif (Utils.moduleHasValidPosition(module.position) || typeof (module.position) === \"undefined\") {\n\t\t\t\t\t\t// Only add this module to be loaded if it is not a duplicate (repeated instance of the same module)\n\t\t\t\t\t\tif (!modules.includes(module.module)) {\n\t\t\t\t\t\t\tmodules.push(module.module);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tLog.warn(\"Invalid module position found for this configuration:\" + `\\n${JSON.stringify(module, null, 2)}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"No module name found for this configuration:\" + `\\n${JSON.stringify(module, null, 2)}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetGlobalDispatcher(new Agent({ connect: { timeout: fetch_timeout } }));\n\n\t\t\tawait loadModules(modules);\n\n\t\t\thttpServer = new Server(configObj);\n\t\t\tconst { app, io } = await httpServer.open();\n\t\t\tLog.log(\"Server started ...\");\n\n\t\t\tconst nodePromises = [];\n\t\t\tfor (let nodeHelper of nodeHelpers) {\n\t\t\t\tnodeHelper.setExpressApp(app);\n\t\t\t\tnodeHelper.setSocketIO(io);\n\n\t\t\t\ttry {\n\t\t\t\t\tnodePromises.push(nodeHelper.start());","sourceCodeStart":209,"sourceCodeEnd":245,"githubUrl":"https://github.com/MagicMirrorOrg/MagicMirror/blob/4b4a59534f7da01e4030e46029fe9dd649a7675e/js/app.js#L209-L245","documentation":"During startup, App iterates over config.modules and reads module.module to know which module to load. If an entry has no module name property (undefined/empty), it cannot be registered or loaded, so this warning is logged and the entry is skipped.","triggerScenarios":"A config.js modules array contains an entry missing the required 'module' property — e.g. only a position/config object, a trailing empty object {}, or a copy/paste that dropped the module line.","commonSituations":"Hand-edited config.js where the module: \"...\" line was accidentally deleted; JSON config generators or scripts emitting empty entries; pasting a module snippet and forgetting to fill in the module name placeholder.","solutions":["Add the missing module property to the entry: { module: \"modulename\", position: \"...\" }.","Remove the empty/invalid entry from the modules array entirely.","Run a JSON/JS syntax sanity check on config.js (node -e \"require('./config')\" style check) to spot malformed entries."],"exampleFix":"// before (config.js)\n{ position: \"top_right\" }\n// after\n{ module: \"calendar\", position: \"top_right\" }","handlingStrategy":"validation","validationCode":"config.modules.forEach((m, i) => {\n  if (typeof m !== \"object\" || m === null || typeof m.module !== \"string\" || !m.module.trim()) {\n    throw new Error(`config.modules[${i}] is missing a valid 'module' property`);\n  }\n});","typeGuard":"function isModuleEntry(m) {\n  return typeof m === \"object\" && m !== null && typeof m.module === \"string\" && m.module.length > 0;\n}","tryCatchPattern":"null","preventionTips":["Validate config.js after every manual edit (node --check or a small validation script).","Fill in module name placeholders immediately when pasting snippets.","Watch for trailing empty objects left behind when deleting modules."],"tags":["configuration","modules","validation"],"backgroundTag":"missing-required-property","analyzedSha":"4b4a59534f7da01e4030e46029fe9dd649a7675e","analyzedAt":"2026-08-31T21:49:42.591Z","schemaVersion":2},"datasetVersion":"2026-08-31T22:30:34.772Z"}