From 7e5bc6ef72228f1356cd30dd16dd74c0b1d71ff2 Mon Sep 17 00:00:00 2001 From: Gaurav Dubey Date: Thu, 16 Jul 2026 00:39:01 +0530 Subject: [PATCH 1/2] fix(init): declare RadixThemesPlugin in default rxconfig template The blank app template renders Radix Themes components (rx.heading, rx.text, rx.code, rx.button), which auto-enable the Radix plugin at compile time. The generated rxconfig.py did not list RadixThemesPlugin, so the compiler fell back to implicit enablement and emitted the "Implicit Radix Themes enablement has been deprecated in version 0.9.0" warning on the first `reflex run` of every freshly scaffolded app. Declare rx.plugins.RadixThemesPlugin() explicitly in the config template (kept last to preserve the existing plugin/stylesheet ordering the implicit path used), which is the exact remedy the deprecation message instructs users to apply. New apps are now warning-free. closes #6483 --- packages/reflex-base/src/reflex_base/compiler/templates.py | 1 + tests/units/utils/test_utils.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/packages/reflex-base/src/reflex_base/compiler/templates.py b/packages/reflex-base/src/reflex_base/compiler/templates.py index ca94aa2c482..22adab11daa 100644 --- a/packages/reflex-base/src/reflex_base/compiler/templates.py +++ b/packages/reflex-base/src/reflex_base/compiler/templates.py @@ -139,6 +139,7 @@ def rxconfig_template(app_name: str): plugins=[ rx.plugins.SitemapPlugin(), rx.plugins.TailwindV4Plugin(), + rx.plugins.RadixThemesPlugin(), ] )""" diff --git a/tests/units/utils/test_utils.py b/tests/units/utils/test_utils.py index 4c60761e62e..8278a35e6bc 100644 --- a/tests/units/utils/test_utils.py +++ b/tests/units/utils/test_utils.py @@ -14,6 +14,7 @@ from reflex_base.vars.base import Var from reflex.environment import environment +from reflex.plugins import RadixThemesPlugin from reflex.state import BaseState from reflex.utils import exec as utils_exec from reflex.utils import frontend_skeleton, js_runtimes, prerequisites, templates, types @@ -361,6 +362,11 @@ def test_create_config_e2e(tmp_working_dir): exec((tmp_working_dir / constants.Config.FILE).read_text(), eval_globals) config = eval_globals["config"] assert config.app_name == app_name + # The default template must declare RadixThemesPlugin explicitly. The blank + # app renders Radix Themes components, so without an explicit plugin the + # compiler falls back to implicit enablement and emits a deprecation warning + # on the first `reflex run` of a freshly scaffolded app (issue #6483). + assert any(isinstance(plugin, RadixThemesPlugin) for plugin in config.plugins) class DataFrame: From 40c285e5544d6717fc1cad24742fce1de57e6ae3 Mon Sep 17 00:00:00 2001 From: Farhan Date: Fri, 7 Aug 2026 21:21:52 +0500 Subject: [PATCH 2/2] fix(radix): keep deprecated App(theme=...) applied with an explicit RadixThemesPlugin Declaring RadixThemesPlugin() in the default rxconfig template routed App(theme=...) into apply_app_theme's explicit-plugin early return, which silently dropped the theme in freshly scaffolded apps (the pattern all theming docs teach). Remove the guard so the deprecated parameter keeps working, and winning, until its 1.0 removal, matching pre-plugin behavior. Also add news fragments for the changelog check. --- packages/reflex-base/news/6776.bugfix.md | 1 + .../news/6776.bugfix.md | 1 + .../src/reflex_components_radix/plugin.py | 3 -- tests/units/test_app.py | 37 +++++++++++++++++-- 4 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 packages/reflex-base/news/6776.bugfix.md create mode 100644 packages/reflex-components-radix/news/6776.bugfix.md diff --git a/packages/reflex-base/news/6776.bugfix.md b/packages/reflex-base/news/6776.bugfix.md new file mode 100644 index 00000000000..90e009cc535 --- /dev/null +++ b/packages/reflex-base/news/6776.bugfix.md @@ -0,0 +1 @@ +Declare `rx.plugins.RadixThemesPlugin()` in the `rxconfig.py` written by `reflex init`, so freshly scaffolded apps no longer emit the implicit Radix Themes enablement deprecation warning. diff --git a/packages/reflex-components-radix/news/6776.bugfix.md b/packages/reflex-components-radix/news/6776.bugfix.md new file mode 100644 index 00000000000..2789b26b2bb --- /dev/null +++ b/packages/reflex-components-radix/news/6776.bugfix.md @@ -0,0 +1 @@ +Deprecated `App(theme=...)` now keeps applying its theme when an explicit `RadixThemesPlugin` is configured, instead of being silently ignored until its removal in 1.0. diff --git a/packages/reflex-components-radix/src/reflex_components_radix/plugin.py b/packages/reflex-components-radix/src/reflex_components_radix/plugin.py index 150183a17ad..8f8764032c0 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/plugin.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/plugin.py @@ -108,8 +108,5 @@ def apply_app_theme(self, theme: Component) -> None: ) self._app_theme_warning_emitted = True - if self._explicit: - return - self.enabled = True self.theme = theme diff --git a/tests/units/test_app.py b/tests/units/test_app.py index 17c86420829..c50af0271db 100644 --- a/tests/units/test_app.py +++ b/tests/units/test_app.py @@ -2500,11 +2500,11 @@ def test_compile_with_legacy_app_theme_warns_and_enables_radix_plugin( assert mock_deprecate.call_args.kwargs["feature_name"] == "App(theme=...)" -def test_explicit_radix_plugin_wins_over_legacy_app_theme( +def test_legacy_app_theme_wins_over_explicit_radix_plugin( compilable_app: tuple[App, Path], mocker: MockerFixture, ): - """Explicit RadixThemesPlugin config should win over deprecated App.theme.""" + """Deprecated App.theme keeps working (and winning) until its removal.""" conf = rx.Config( app_name="testing", plugins=[rx.plugins.RadixThemesPlugin(theme=rx.theme(accent_color="green"))], @@ -2523,8 +2523,37 @@ def test_explicit_radix_plugin_wins_over_legacy_app_theme( web_dir / constants.Dirs.PAGES / constants.PageNames.APP_ROOT ).read_text() - assert 'RadixThemesTheme,{accentColor:"green"' in app_root - assert 'RadixThemesTheme,{accentColor:"plum"' not in app_root + assert 'RadixThemesTheme,{accentColor:"plum"' in app_root + assert 'RadixThemesTheme,{accentColor:"green"' not in app_root + mock_deprecate.assert_called_once() + assert mock_deprecate.call_args.kwargs["feature_name"] == "App(theme=...)" + + +def test_default_explicit_radix_plugin_adopts_legacy_app_theme( + compilable_app: tuple[App, Path], + mocker: MockerFixture, +): + """A bare RadixThemesPlugin() (default theme) should adopt deprecated App.theme.""" + conf = rx.Config( + app_name="testing", + plugins=[rx.plugins.RadixThemesPlugin()], + ) + mocker.patch("reflex_base.config._get_config", return_value=conf) + app, web_dir = compilable_app + mocker.patch("reflex.utils.prerequisites.get_web_dir", return_value=web_dir) + mock_deprecate = mocker.patch("reflex_base.utils.console.deprecate") + + app.theme = rx.theme(accent_color="plum") + app.add_page(lambda: rx.el.div("Index"), route="/") + app.add_page(lambda: rx.el.div("404"), route=constants.Page404.SLUG) + app._compile() + + app_root = ( + web_dir / constants.Dirs.PAGES / constants.PageNames.APP_ROOT + ).read_text() + + assert 'RadixThemesTheme,{accentColor:"plum"' in app_root + assert 'RadixThemesTheme,{accentColor:"blue"' not in app_root mock_deprecate.assert_called_once() assert mock_deprecate.call_args.kwargs["feature_name"] == "App(theme=...)"