v0.5.0
Breaking Changes
Radix Themes 3.0
rx.badge
now hassize="3"
available, and sizes"2"
and"1"
have been adjusted accordinglyrx.input.root
andrx.input.input
are deprecated. Just userx.input
as the root. It acceptsrx.input.slot
as a child.- [REF-2789] Graceful deprecation of
rx.input.root
andrx.input.input
#3249
- [REF-2789] Graceful deprecation of
Previously Deprecated Features Removed
get_asset_path
removed- passing
state
torx.App
- passing
script_tags
torx.App.add_page
- passing
custom_styles
torx.markdown
(usecomponent_map
instead) rx.State
getters removed (useself.router
instead)get_token
get_sid
get_headers
get_client_ip
get_current_page
get_query_params
get_cookies
Remove deprecations for 0.5.0 by @picklelo in #3222
New Features
Radix Themes 3.0
rx.spinner
- new component for indeterminate loadingrx.skeleton
- new component for placeholder loadingloading
prop available forrx.button
rx.icon_button
rx.spinner
andrx.skeleton
-- useloading=State.is_loading
instead of usingrx.cond
rx.data_list
- new component for showing key value pairsrx._x.progress
- experimental radix themes progress component, supportsduration
for indeterminate progress.
Radix 3.0 by @Lendemor in #3159
New Public API for wrapping Components
To make wrapping components easier and less error prone, the following functions should be overridden when wrapping components:
add_style
- return anrx.style.Style
for default component stylesadd_imports
- return a dictionary of{"[email protected]": {"tag1", "tag2", "tag3"}}
of required imports -- it will automatically be merged with the other component imports.add_hooks
- return a list of javascript snippets that will go inside the component function -- it will be deduped automatically with any other hooksadd_custom_code
- return a list of javascript snippets that will go inside the module for each page the component is included in.
With these new methods, Reflex will internally call them for each parent class your component inherits from, so there is no need to call super().add_*
or do any merging yourself.
- [REF-2523] Implement new public Component API by @masenf in #3203
- add_style api by @Lendemor in #3202
State.setvar(var_name, value)
A less magic version of the automatic State.set_x
setter functions which accept the var_name
as a string.
Experimental Toast Component
def try_some_toast():
return rx.fragment(
rx.button("π₯", on_click=rx._x.toast.info("Cheers"), variant="outline"),
rx._x.toast.provider(),
)
Generic .throttle
and .debounce
for all Event types
class ThrottleState(rx.State):
last_event: datetime.datetime = datetime.datetime.now()
def handle_mouse_move(self):
self.last_event = datetime.datetime.now()
def throttle_example():
return rx.box(
ThrottleState.last_event,
background_color=rx.color("red", 7),
width="500px",
height="500px",
on_mouse_move=ThrottleState.handle_mouse_move.throttle(500), # one event every 500ms
)
rx.container
new prop stack_children_full_width
For a nice streamlit-like wide layout, use the following snippet:
def index():
return rx.container(
rx.vstack(content()),
stack_children_full_width=True,
)
This will cause all vstack/hstack children and most stack child components to have width="100%"
automatically, which provides a nice aesthetic for many apps without applying CSS to individual components.
- [REF-2574] Default width for Stack (+children) and default padding for container by @masenf in #3104
Improvements
Unify on ruff-format
- ruff-format: unify Black with Ruff
v0.1
by @Borda in #2837 - sync ruff version in pyproject.toml with the precommit one by @Lendemor in #3150
Error Messages
- [REF-2636]Improve Error message for unsupported event trigger by @ElijahAhianyo in #3147
- prevent shadowing by @Lendemor in #3221
- Better error when a computed var has the same name as an existing state var.
- [REF-2643]Throw Errors for duplicate Routes by @ElijahAhianyo in #3155
- [REF-2622]Throw warning for incompatible uvicorn version on windows by @ElijahAhianyo in #3246
rx.color_mode
changes
rx.color_mode.button
now has built in positioning prop for floating button
Default style for rx.upload
- Refactor upload component and add styled upload component by @Ifechukwu001 in #3035
Use Alembic Batch Mode for reflex db makemigrations
This improves compatibility with the default sqlite database when re-typing columns.
README
- add color dalle code example by @tgberkeley in #3108
- a little correction in the "es" docs by @JLDev-coder in #3127
- Add Japanese README.md file by @PeterYusuke in #3234
Miscellaneous
- add default underline for links by @Lendemor in #3148
- Expose
color_scheme
on TabsTrigger by @masenf in #3112 - update blank template by @Lendemor in #3219
- Clean up config and app API by @picklelo in #3197
- Fixed unused kwargs in reflex.App by @Snaipergelka in #3170
- Now able to pass a custom
SocketIO
instance
- Now able to pass a custom
Bugfixes
- [REF-2587] Ignore top-level theme appearance by @masenf in #3119
- avoids "flickering" when the top-level appearance differs from user selected mode
- [REF-2619] Re-init when the template is out of date by @masenf in #3121
- Fixed app name validation by @Snaipergelka in #3146
- extend rx.input allowed types by @Lendemor in #3149
- [REF-2682] Foreach over dict uses Tuple arg value by @masenf in #3160
- Improve nested foreach when dict has complex values
- Update CodeBlock class to accept rx.color in custom_style by @khhan0130 in #3168
- Windows
--frontend-only
fix ctrl + c by @ElijahAhianyo in #3181 - [REF-2676][REF-2751]Windows Skip ARM devices on bun install + Telemetry by @ElijahAhianyo in #3212
- icon_button: Icon size should be specified as int pixels, not str by @masenf in #3247
- copy background task marker by @benedikt-bartscher in #3255
- Can now define background tasks in a state mixin
- Dynamic NoSSRComponent properly renders in prod mode when using State/event handlers
Dependencies
- Bump bun version to 1.1.5 by @ElijahAhianyo in #3176
- Windows Pin Bun version by @ElijahAhianyo in #3192
- Windows Pin Version followup (Use Windows Install Link) by @ElijahAhianyo in #3193
- [REF-2764] dep update 0.5.0 by @masenf in #3245
- gunicorn 22.0.0 with security fix
Other Changes
- separate DECORATED_PAGES per reflex app by @benedikt-bartscher in #3102
- fix: args issue in
__init__
of App class by @nautics889 in #3141 - [REF-2620] Fallback to npm (not bun) by @masenf in #3138
- pin macos version for CI by @Lendemor in #3145
- [REF-2618] Send template info in init telemetry event by @martinxu9 in #3153
- Integration testing: Firefox compatibility by @masenf in #3162
- Improved get_attribute_access_type by @benedikt-bartscher in #3156
- custom component install command to install current project in editable mode by @martinxu9 in #3200
- migrate deprecated redis.close to redis.aclose by @benedikt-bartscher in #3199
- allow optional props with None default value by @benedikt-bartscher in #3179
- Allow StatefulComponent to also be rendered via
__str__
by @masenf in #3211 - Improved get_attribute_access_type tests by @benedikt-bartscher in #3180
- Improved implicit harness app names by @benedikt-bartscher in #3237
- do not access state
__subclasses__
, prevent issues with AppHarness by @benedikt-bartscher in #3143 - fix screenshot filenames by @benedikt-bartscher in #3241
- minor test exp_not_equal fixup by @benedikt-bartscher in #3256
New Contributors
- @nautics889 made their first contribution in #3141
- @Borda made their first contribution in #2837
- @Snaipergelka made their first contribution in #3146
- @Ifechukwu001 made their first contribution in #3035
- @JLDev-coder made their first contribution in #3127
- @khhan0130 made their first contribution in #3168
Full Changelog: v0.4.9...v0.5.0