{"record":{"id":"fda342f0734914ad","repo":"reflex-dev/reflex","slug":"reflex-config-plugins-must-contain-plugin-instance","errorCode":null,"errorMessage":"reflex.Config.plugins must contain Plugin instances, but got {entry!r} of type {type(entry).__name__}. Pass an instance, e.g. plugins=[SitemapPlugin()].","messagePattern":"reflex\\.Config\\.plugins must contain Plugin instances, but got (.+?) of type (.+?)\\. Pass an instance, e\\.g\\. plugins=\\[SitemapPlugin\\(\\)\\]\\.","errorType":"exception","errorClass":"InvalidPluginConfigError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/config.py","lineNumber":467,"sourceCode":"            elif isinstance(entry, Plugin):\n                normalized.append(entry)\n            elif isinstance(entry, type) and issubclass(entry, Plugin):\n                try:\n                    normalized.append(entry())\n                except TypeError as exc:\n                    msg = (\n                        f\"reflex.Config.plugins entry {entry.__name__!r} could not be \"\n                        f\"instantiated and may require arguments; pass an instance \"\n                        f\"instead, e.g. plugins=[{entry.__name__}(...)].\"\n                    )\n                    raise InvalidPluginConfigError(msg) from exc\n            else:\n                msg = (\n                    f\"reflex.Config.plugins must contain Plugin instances, but got \"\n                    f\"{entry!r} of type {type(entry).__name__}. \"\n                    f\"Pass an instance, e.g. plugins=[SitemapPlugin()].\"\n                )\n                raise InvalidPluginConfigError(msg)\n        if invalid:\n            details = \", \".join(p.describe() for p in invalid)\n            msg = (\n                f\"reflex.Config.plugins contains plugin(s) that could not be loaded \"\n                f\"(check REFLEX_PLUGINS import paths): {details}.\"\n            )\n            raise InvalidPluginConfigError(msg)\n        self.plugins = normalized\n\n    def _add_extra_plugins(self):\n        \"\"\"Append plugins declared via the ``REFLEX_EXTRA_PLUGINS`` env var.\n\n        Unlike ``REFLEX_PLUGINS``, which *replaces* ``plugins`` entirely, this env\n        var appends to the existing list so plugins configured in ``rxconfig.py``\n        are preserved. Each entry is a fully qualified import path resolved to a\n        Plugin *subclass* (not instantiated by the env machinery). For each class:\n\n        - An invalid import path is warned about and skipped (a bad env entry is","sourceCodeStart":449,"sourceCodeEnd":485,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/config.py#L449-L485","documentation":"An entry in `rx.Config(plugins=[...])` is neither a Plugin instance nor a Plugin subclass — it is some other object entirely (a string import path, a module, an unrelated class).","triggerScenarios":"`plugins=[\"myapp.plugins.SitemapPlugin\"]` (string path is not accepted here) or `plugins=[SomeRandomClass]`.","commonSituations":"Expecting string-based plugin registration (that is what the `REFLEX_PLUGINS` env var is for) and putting paths directly in `plugins=[...]`.","solutions":["Import the plugin and pass an instance: `plugins=[SitemapPlugin()]`","For string import paths, use the REFLEX_PLUGINS environment variable instead"],"exampleFix":"# before\nrx.Config(plugins=[\"myapp.plugins.SitemapPlugin\"])\n\n# after\nfrom myapp.plugins import SitemapPlugin\nrx.Config(plugins=[SitemapPlugin()])","handlingStrategy":"type-guard","validationCode":"from reflex_base.config import Plugin\n\ndef clean_plugins(entries):\n    return [e for e in entries if isinstance(e, Plugin)]","typeGuard":"from reflex_base.config import Plugin\n\ndef is_plugin_instance(v) -> bool:\n    return isinstance(v, Plugin) and not isinstance(v, type)","tryCatchPattern":null,"preventionTips":["Pass instances in plugins=[...]; use REFLEX_PLUGINS env var for string import paths","Add a startup assert validating the plugins list"],"tags":["reflex","config","plugins","type-validation"],"backgroundTag":"invalid-plugin-config","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}