{"record":{"id":"a96c7d2fdb4447e2","repo":"liabru/matter-js","slug":"plugin-register-was-upgraded-to","errorCode":null,"errorMessage":"Plugin.register: was upgraded to","messagePattern":"Plugin\\.register: was upgraded to","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"src/core/Plugin.js","lineNumber":34,"sourceCode":"\n    /**\n     * Registers a plugin object so it can be resolved later by name.\n     * @method register\n     * @param plugin {} The plugin to register.\n     * @return {object} The plugin.\n     */\n    Plugin.register = function(plugin) {\n        if (!Plugin.isPlugin(plugin)) {\n            Common.warn('Plugin.register:', Plugin.toString(plugin), 'does not implement all required fields.');\n        }\n\n        if (plugin.name in Plugin._registry) {\n            var registered = Plugin._registry[plugin.name],\n                pluginVersion = Plugin.versionParse(plugin.version).number,\n                registeredVersion = Plugin.versionParse(registered.version).number;\n\n            if (pluginVersion > registeredVersion) {\n                Common.warn('Plugin.register:', Plugin.toString(registered), 'was upgraded to', Plugin.toString(plugin));\n                Plugin._registry[plugin.name] = plugin;\n            } else if (pluginVersion < registeredVersion) {\n                Common.warn('Plugin.register:', Plugin.toString(registered), 'can not be downgraded to', Plugin.toString(plugin));\n            } else if (plugin !== registered) {\n                Common.warn('Plugin.register:', Plugin.toString(plugin), 'is already registered to different plugin object');\n            }\n        } else {\n            Plugin._registry[plugin.name] = plugin;\n        }\n\n        return plugin;\n    };\n\n    /**\n     * Resolves a dependency to a plugin object from the registry if it exists. \n     * The `dependency` may contain a version, but only the name matters when resolving.\n     * @method resolve\n     * @param dependency {string} The dependency.","sourceCodeStart":16,"sourceCodeEnd":52,"githubUrl":"https://github.com/liabru/matter-js/blob/acb99b6f8784c809b940f1d2cf745427e088e088/src/core/Plugin.js#L16-L52","documentation":"Plugin.register found a plugin already registered under the same name with a LOWER version; the new (higher-version) plugin replaces it in the registry, but a warning informs you an upgrade occurred. This is informational: the newer plugin wins. It matters because two code paths registering different versions of the same-named plugin cause unexpected replacement.","triggerScenarios":"Calling Plugin.register twice for the same plugin.name where the second object's semver version is greater — e.g. loading two bundles containing different versions of the same plugin.","commonSituations":"Duplicate script includes of a plugin at different versions; upgrading a plugin while an old copy is still loaded; bundling the plugin multiple times.","solutions":["Remove the older plugin registration/duplicate script tag so only one version loads.","If intentional, silence awareness: the newer plugin IS active; update code that referenced the old version's API.","Consolidate plugin versions in your build (dedupe in package.json/bundler)."],"exampleFix":"// before\nPlugin.register(pA); // v1.0.0\nPlugin.register(pB); // v1.1.0, same name -> upgrade warning\n// after\nPlugin.register(pB); // register only the latest version","handlingStrategy":"validation","validationCode":"const existing = Matter.Plugin._registry[plugin.name];\nif (!existing || Matter.Plugin.versionParse(plugin.version).number > Matter.Plugin.versionParse(existing.version).number) {\n  Matter.Plugin.register(plugin);\n}","typeGuard":null,"tryCatchPattern":"// warning only: no throw; log if unexpected\nconst origWarn = Matter.Common.warn;\nMatter.Common.warn = (...args) => {\n  if (args.join(' ').includes('was upgraded to')) console.debug('plugin upgraded:', ...args);\n  origWarn(...args);\n};","preventionTips":["Load each plugin exactly once and only the newest version","Dedupe plugin versions across bundles and script tags","Track registered versions via Matter.Plugin._registry during development"],"tags":["plugin","versioning","duplicate"],"backgroundTag":"plugin-version-conflict","analyzedSha":"acb99b6f8784c809b940f1d2cf745427e088e088","analyzedAt":"2026-09-02T21:29:27.057Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}