v0.2.5
πͺ Thanks to our amazing users and contributors!! π π
Known Regressions
- non-sqlite database access is not working #1661
Breaking Changes
Chained event handlers from return
/ yield
must always be referenced from the State class, NOT the instance
class State(rx.State):
def handlerA(self):
...
def handlerB(self):
return self.handlerA() # β Will raise TypeError now!
def handlerC(self):
return State.handlerA() # β
Always reference chained handlers by class
The exception will look like TypeError: Your handler State.handlerB must only return/yield: None, Events or other EventHandlers referenced by their class (not using self)
and will occur when the handler is called, not at compile time.
Removal of Config
knobs
admin_dash
- configure the admin dashboard viarx.App
insteadbackend_transports
- all connections will use websocketcors_credentials
db_config
- usedb_url
insteadenv
- specify the run environment via CLI flags toreflex run --env dev|prod
env_path
- reading environment variables from a file is no longer supported (suggest use ofdocker-compose
or simplysource
the env file before runningreflex
)override_os_envs
- os environment variables will always take precedencepolling_max_http_buffer_size
- all connections will use websocket
New Features
Support f-string formatting of State vars
Frontend rendering functions can now make use of f"built in {State.value}"
style formatting, instead of +
concatenation.
Node.js is automatically installed on Windows (non-WSL)
Using the cross-platform fnm
tool to facilitate automatic installation of node runtime on native windows platform, where previously a manual install was needed.
POSIX support for fnm
to replace nvm
is coming soon.
Display system and environment information with --loglevel debug
For easier bug reporting and investigations, all relevant platform info, config, and tools used by Reflex will be logged in debug mode.
rx.selected_files
Var exposes files selected by the rx.upload
component
This new Var can be rendered as a frontend component:
rx.foreach(
rx.selected_files,
rx.text,
)
Improvements
Frontend performance boost
Refactoring the main frontend event loop reduces event handling and rendering time by 3x.
Refactored Config
class
Simplify configuration knobs and recognize all configuration values set as environment variables.
rx.form
now works with more form components
Including rx.pin_input
, rx.number_input
, and rx.range_slider
More flexible container serialization inside State classes
set
is now supported as aVar
type- Recursive serialization now allows for
list
,tuple
, andset
of PIL image, plotly plots, and pandas dataframes.
Use βtrailingSlashβ mode to better support static site hosting
When exporting a site via reflex export
, an index.html
file will be created inside a directory for each static route, which makes hosting via s3, github pages, netlify, and others simpler by not requiring a βtry_filesβ rule or rewrites.
docker-example
is simplified and extended
The main Dockerfile
is simpler and there is now a compose.yaml
and Caddy.Dockerfile
which can be used to deploy a reflex app with automatic TLS support.
Other Improvements
- Expose
debounce_timeout
prop onrx.input
andrx.text_area
for tuning fully-controlled input behavior on large sites. - Ignore
*.db
and files in default.gitignore
template NoSSRComponent
supports components using either named or default exports.
Bug Fixes
- Flex
wrap
anddirection
props accept list of values, for use at different responsive breakpoints. - Can specify
on_load
when defining a custom 404 page. - Raise useful exception when a user-defined State var shadows an internal name.
BUN_PATH
is respected again (regression from 0.2.3)- Var operations like
to_string
,and
, andor
return a new Var with the correcttype_
set. - Passing a
dict
as a prop where the values contain double quotes is no longer an error. (Fixrx.html
component where content contains double quotes)
Other Changes
- For show file on PyPI correctly, to use the full-path hyperlink to indicate the raw file by @milochen0418 in #1559
- PR zh/zh_tw readme update by @milochen0418 in #1557
- Add windows warning message. by @Alek99 in #1570
- Change fixture scope to be run per session rather than per function by @mat-mil in #1569
- App harness use new_process by @picklelo in #1573
- Update urls to reflex.dev by @picklelo in #1572
- Update CONTRIBUTING.md by @Alek99 in #1580
- Add AppHarness for form submit by @Lendemor in #1571
- FIXED #1598: pyproject.toml: Wrong repository URL by @jenisys in #1602
- test_dynamic_routes: fix flakyness in test_dynamic_routes by @masenf in #1603
- Fix rx.link href prop and Var.to_string type by @picklelo in #1600
- integration tests: don't shadow real error when screenshot fails by @masenf in #1608
- link: fix link with no href by @masenf in #1612
- Update .gitignore to ignore coverage.* files by @martinxu9 in #1623
- Remove unused
full_control
related code by @martinxu9 in #1624 - test_form_submit: poll for backend_state to be updated by @masenf in #1625
New Contributors
- @Smit-Parmar made their first contribution in #1535
- @mat-mil made their first contribution in #1568
- @jenisys made their first contribution in #1602
- @martinxu9 made their first contribution in #1614
- @danik292 made their first contribution in #1645
Full Changelog: v0.2.4...v0.2.5