Breaking Changes
- Lifespan tasks will now be passed an
rx.Appinstance instead of aStarletteinstance
New Features
Persistent Frontend Dep Locking
Projects should commit the new reflex.lock directory which includes package.json and bun.lock. This helps avoid accidentally introducing upstream changes and helps protect against supply chain attacks.
- Respect root bun.lock during frontend installs by @GautamBytes in #6289
- Move bun.lock under reflex.lock/bun.lock by @masenf in #6475
reflex cloud deploy --gcp
EmbedPlugin
With the EmbedPlugin, a Reflex frontend can now be mounted into an existing DOM element in a custom HTML page by simply including the entry point javascript.
- feat: support embedding Reflex apps into host pages via mount_target by @FarhanAliRaza in #6462
frontend_compression_formats
The build process now produces .gz sidecar files during export and serves them to supported clients for reflex run --env prod.
- feat: pre-compress frontend assets at build time by @FarhanAliRaza in #6497
Improvements
- fix(event): handle mixed rx.cond event/function returns in event lambdas by @BABTUNA in #6354
- fix(app): normalize subpath imports to install base npm package by @BABTUNA in https://github.com/reflex-dev/reflex/pull/6380\
- Remove redundant lost-and-found warning log by @masenf in #6527
- fix(state.js): drop deprecated unload listener, use pagehide (#6195) by @ChinmayShringi in #6479
Bug Fixes
Compiler
- fix(memo): skip {children} hole substitution when wrapped component h… by @carlosabadia in #6466
- Allow overriding files with Plugins, just warn about it by @riebecj in #6476
- [codex] Fix memoized component hook prop rendering by @Alek99 in #6506
- [codex] fix foreach memo style cache by @Alek99 in #6513
- fix: use python truthiness for compiled
and/orVar operations by @adhami3310 in #6546
CLI
- fix(hosting-cli): exit deploy when --envfile requires missing python-dotenv by @BABTUNA in #6414
- ENG-9522: Fix CLI: Lists projects as "Unknown" by @carlosabadia in #6530
Other Areas
- fix: Textarea enter_key_submit uses add_custom_code instead of _get_all_custom_code by @algojogacor in #6485
- fix(component): compare field values in BaseComponent.eq by @FarhanAliRaza in #6493
- fix: REFLEX_FRONTEND_PATH without leading slash duplicates path in logged URL by @qubydev in #6364
- fix: make Markdown a MemoizationLeaf so Var children stay inlined by @FarhanAliRaza in #6532
- Expose rx.Plugin hook contexts by @masenf in #6537
- ENG-9553: prepend
frontend_pathto RouterData.url and RouterData.page.raw_path by @masenf in #6535
Doc / Web
- add otp field to reflex components internal by @carlosabadia in #6467
- ENG-9435: add .md files to deal with AI blindly adding .md by @adhami3310 in #6460
- Update router documentation for new URL API by @masenf in #6371
- OPS-1430: Add what are you interested in option in demo form by @carlosabadia in #6459
- Update shared components for new web design by @carlosabadia in #6474
- internal: Make the Demo Form Accept Extra on_submit Handlers by @amsraman in #6486
- Update customers link in marketing navbar by @carlosabadia in #6487
- Small updates to footer and mobile navbar for web by @carlosabadia in #6492
- ENG-9484: update docs for auto setters by @adhami3310 in #6496
- Show up to two lines per toc sidebar item by @carlosabadia in #6502
- Update internal drawer component by @carlosabadia in #6523
- Remove accidental whitelist changes by @masenf in #6524
- Update docs whitelist workflow path and naming by @adhami3310 in #6525
- reflex-site-shared: canonical override + Try-for-free primary CTA by @PalashAwasthi05 in #6521
- Fix docs breadcrumb overview routes by @Alek99 in #6441
- [codex] update README example sections by @Alek99 in #6511
- AgentFilesPlugin writes md files to frontend_path subdir by @masenf in #6536
- Fix feedback popover bg color by @carlosabadia in #6540
- Bump base ui version for internal components by @carlosabadia in #6541
- Fix mobile drawer internal links in marketing navbar by @carlosabadia in #6539
- Refactor sidebar to use reactive Var operations instead of Python conditionals by @masenf in #6528
- Increase case study click area in navbar by @carlosabadia in #6529
- update docs/app/reflex.lock by @masenf in #6543
Telemetry Improvements
- feat(telemetry): emit compile events with page/component/state breakdown by @FarhanAliRaza in #6507
- feat(telemetry): report export status, duration, and phase timings by @FarhanAliRaza in #6509
- feat(telemetry): track per-feature usage counters on compile events by @FarhanAliRaza in #6519
- feat: capture pre-init Python environment in init telemetry by @FarhanAliRaza in #6534
- Display ToS / privacy warning on console with logging in by @masenf in #6547
- add doc page for telemetry info and opt-out by @masenf in #6548
Other Changes
- ENG-9447: add agents md instructions by @adhami3310 in #6461
- fix rx-shout integration test for new uv project structure by @masenf in #6470
- added the missing tests (and verified they pass) by @patrizzzz in #6170
- use
uv run --no-syncin pre-commit commands by @masenf in #6472 - fix(test): make tailwind integration test rerun-safe by @masenf in #6473
- test(perf): add Lighthouse benchmark suite and CI job by @FarhanAliRaza in #6494
- pin action commits by @adhami3310 in #6498
- security hygiene on actions by @adhami3310 in #6499
- Pin some docs app components by @carlosabadia in #6501
- [codex] Loosen enterprise docs alert copy by @Alek99 in #6505
- Embed README example video by @Alek99 in #6508
- Update select docs by @tgberkeley in #6503
- bump backend deps by @adhami3310 in #6488
- bump frontend deps 093 by @adhami3310 in #6489
- fix(make_pyi): also diff staged changes when scanning for pyi updates by @FarhanAliRaza in #6544
New Contributors
- @patrizzzz made their first contribution in #6170
- @amsraman made their first contribution in #6486
- @algojogacor made their first contribution in #6485
- @PalashAwasthi05 made their first contribution in #6521
Full Changelog: v0.9.2.post1...v0.9.3