diff --git a/CHANGELOG.md b/CHANGELOG.md index bfb571c5289..0f94c930af2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,63 @@ +## v0.10.1a2 (2026-10-26) + +No significant changes. + + +## v0.10.1a1 (2026-10-23) + +### Breaking Changes + +- `router.session.client_ip` now ignores untrusted `X-Forwarded-For` headers by default. Configure `trusted_proxy_hops` to use forwarded client addresses from a trusted proxy chain. ([#7614](https://github.com/reflex-dev/reflex/issues/7614)) + +### Features + +- Add an experimental, default-off `react_compiler` configuration flag to enable React Compiler memoization for generated components in development and production. ([#7234](https://github.com/reflex-dev/reflex/issues/7234)) +- Form `on_submit` handlers can annotate their form data as `rx.form.FormData` to receive every value of fields that share a name, in submission order; a `dict` annotation still keeps each name's last value. In a `TypedDict` annotation, a `list[str]` field collects every value of its name and a `bool` field is `False` when nothing was submitted, such as for an unchecked checkbox, or when the value is false-like, such as `"false"`, `"off"` or `"0"`; for `list[str] | None` and `bool | None` fields an unsubmitted value is `None`, and an unsubmitted `NotRequired` field is left out. In a `TypedDict`, a list field `range` also collects the `range[]` values a two-thumb `rx.slider(name="range")` submits. + + ```python + @rx.event + def handle_submit(self, form_data: rx.form.FormData[str, str]): + self.toppings = form_data.getlist("topping") + ``` ([#7386](https://github.com/reflex-dev/reflex/issues/7386)) +- A page's `on_load` accepts any sequence of events, e.g. a tuple, like a list of them. ([#7402](https://github.com/reflex-dev/reflex/issues/7402)) +- Detect a frontend built for another version of the app when it connects to the backend. The compiled frontend now carries a hash of the state tree (state names, frontend vars and event handler names) and sends it on every socket connect. On a mismatch, a production page reloads once (sharing the `REFLEX_AUTO_RELOAD_COOLDOWN` with the reload on frontend errors) and otherwise shows a "new version available" banner with a reload button; in dev mode it only logs a console warning. Load balancers serving several backend versions still need sticky sessions. ([#7553](https://github.com/reflex-dev/reflex/issues/7553)) +- Expose `rx.moment_provider` for sharing locale, timezone, formatting, and timer defaults across Moment components. ([#7591](https://github.com/reflex-dev/reflex/issues/7591)) + +### Bug Fixes + +- Use atomic writes and OS locks to protect shared JSON metadata from concurrent Reflex processes. When locks are unavailable (for example, with a read-only `REFLEX_DIR`), writes remain atomic but concurrent updates may overwrite each other. ([#7052](https://github.com/reflex-dev/reflex/issues/7052)) +- Load backend apps by their configured module name so state updates work even when the app package has no `__init__.py`. ([#7258](https://github.com/reflex-dev/reflex/issues/7258)) +- A `stateful_pages.json` marker that is not valid UTF-8 is now treated as corrupt and rebuilt, instead of raising `UnicodeDecodeError` on every backend start. ([#7404](https://github.com/reflex-dev/reflex/issues/7404)) +- Type checkers see the database helpers of `reflex.model` (`rx.session`, `rx.asession`, `rx.Model`, `ModelRegistry`, ...) as defined, rather than as unions with the stand-ins used when the db extra is missing. ([#7406](https://github.com/reflex-dev/reflex/issues/7406)) +- Fix a global `rx._x.client_state` reader that mounts after the value was set, such as one behind an `rx.cond`, keeping the stale value when the value is later set back to its default. ([#7407](https://github.com/reflex-dev/reflex/issues/7407)) +- Fix `TypeError: refs._client_state_set... is not a function` when the backend pushes a global `rx._x.client_state` value before any component using it has mounted, such as one behind an `rx.cond` or a page that waits for hydration. The value is now kept for the first component that mounts. ([#7407](https://github.com/reflex-dev/reflex/issues/7407)) +- Fix unawaited coroutine warnings when a state delta filter withholds an async uncached computed variable. ([#7410](https://github.com/reflex-dev/reflex/issues/7410)) +- Fix installing Reflex source distributions with uv by excluding references to workspace packages that are not included in the archive. ([#7411](https://github.com/reflex-dev/reflex/issues/7411)) +- Cancel unfinished page-load event chains when the client disconnects, including hydration that has not yet started. Independent background events continue running. ([#7415](https://github.com/reflex-dev/reflex/issues/7415)) +- The backend log for an unknown frontend substate now says the substate was skipped instead of reporting a failed state update. The frontend exception handler docs describe how to resolve the mismatch. ([#7435](https://github.com/reflex-dev/reflex/issues/7435)) +- `reflex.model` (and `rx.ModelRegistry`, `rx.session`, `rx.Model`) can be imported without `greenlet`, which SQLAlchemy 2.1 only installs with its `asyncio` extra; only `rx.asession` and `get_async_engine` require it now. ([#7440](https://github.com/reflex-dev/reflex/issues/7440)) +- Detect state reads from the new shared state store when checking that an app that reads state defines an `rx.State` subclass. ([#7441](https://github.com/reflex-dev/reflex/issues/7441)) +- Raise an actionable error when a legacy string passed to `App.modify_state()` has a missing or unknown state path. Use `rx.BaseStateToken(ident=client_token, cls=StateClass)` to select the state explicitly. ([#7443](https://github.com/reflex-dev/reflex/issues/7443)) +- Production exports, `reflex run --env prod`, and preview startup that share a `.web` directory now wait for one another instead of overwriting each other's compiled frontend and archives. ([#7453](https://github.com/reflex-dev/reflex/issues/7453)) +- Mutating a nested value reached through `dict.values()` or `dict.items()` on a state var now marks the var dirty, so the UI and cached vars depending on it update. ([#7500](https://github.com/reflex-dev/reflex/issues/7500)) +- `reflex run` no longer logs "Unexpected exit from worker-1" when the dev backend is stopped with SIGTERM or SIGINT. ([#7538](https://github.com/reflex-dev/reflex/issues/7538)) +- Cap the automatically selected number of Redis-backed backend workers at eight. Set `GRANIAN_WORKERS` to override the default. ([#7542](https://github.com/reflex-dev/reflex/issues/7542)) +- `reflex init` no longer refuses to reinitialize an existing app just because its project directory is named `reflex`; the check now applies to the `app_name` set in `rxconfig.py`. ([#7554](https://github.com/reflex-dev/reflex/issues/7554)) +- Add development frontend packages with `-D`, so npm saves them under `devDependencies` and source-only hot reloads no longer reinstall frontend packages. ([#7566](https://github.com/reflex-dev/reflex/issues/7566)) +- Cached computed vars that depend on client storage (`rx.LocalStorage`, `rx.SessionStorage`, `rx.Cookie`) are now evaluated once per page load instead of twice. ([#7568](https://github.com/reflex-dev/reflex/issues/7568)) +- A background task that re-enters an expired session now rehydrates the loaded state tree, so the browser no longer shows stale values for those states. ([#7585](https://github.com/reflex-dev/reflex/issues/7585)) +- Repeated request headers are no longer collapsed to their last value: repeated `cookie` fields are joined with `"; "` and any other repeated field with `", "`, so `router.headers.cookie` keeps every cookie. ([#7588](https://github.com/reflex-dev/reflex/issues/7588)) +- Websocket connections now accept request header values containing bytes that are not valid UTF-8. ([#7602](https://github.com/reflex-dev/reflex/issues/7602)) +- Avoid false type errors when hydrating or assigning strings to vars annotated with `Cookie`, `LocalStorage`, or `SessionStorage`. ([#7603](https://github.com/reflex-dev/reflex/issues/7603)) +- Clarify the warning shown when Bun is below the minimum supported version. ([#7639](https://github.com/reflex-dev/reflex/issues/7639)) + +### Performance + +- Production backend workers on Linux are now forked from a supervisor that has already imported the app, so they share its memory instead of each importing the app again, which cuts memory use and startup time. Set `REFLEX_BACKEND_START_METHOD=spawn` for apps that are not fork-safe. ([#7079](https://github.com/reflex-dev/reflex/issues/7079)) +- The `reflex run` backend reload worker is now forked from the supervisor on Linux instead of started through a forkserver, so framework code is shared copy-on-write and the extra forkserver processes are gone. Set `REFLEX_BACKEND_START_METHOD=spawn` or `REFLEX_STRICT_HOT_RELOAD=1` for apps that are not fork-safe. ([#7113](https://github.com/reflex-dev/reflex/issues/7113)) +- Speed up deployment archive creation by reducing filesystem checks for excluded files and avoiding recompression of precompressed frontend assets. ([#7450](https://github.com/reflex-dev/reflex/issues/7450)) + + ## v0.10.0 (2026-10-08) ### Breaking Changes diff --git a/news/+7600-header-invalid-utf8.bugfix.md b/news/+7600-header-invalid-utf8.bugfix.md deleted file mode 100644 index cd4d6998c00..00000000000 --- a/news/+7600-header-invalid-utf8.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Websocket connections now accept request header values containing bytes that are not valid UTF-8. diff --git a/news/+7601-trusted-proxy-client-ip.breaking.md b/news/+7601-trusted-proxy-client-ip.breaking.md deleted file mode 100644 index 81c3936321c..00000000000 --- a/news/+7601-trusted-proxy-client-ip.breaking.md +++ /dev/null @@ -1 +0,0 @@ -`router.session.client_ip` now ignores untrusted `X-Forwarded-For` headers by default. Configure `trusted_proxy_hops` to use forwarded client addresses from a trusted proxy chain. diff --git a/news/+atomic-json-updates.bugfix.md b/news/+atomic-json-updates.bugfix.md deleted file mode 100644 index d8266a9c600..00000000000 --- a/news/+atomic-json-updates.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Use atomic writes and OS locks to protect shared JSON metadata from concurrent Reflex processes. When locks are unavailable (for example, with a read-only `REFLEX_DIR`), writes remain atomic but concurrent updates may overwrite each other. diff --git a/news/+background-task-expired-state-rehydrate.bugfix.md b/news/+background-task-expired-state-rehydrate.bugfix.md deleted file mode 100644 index 0f2042a7cac..00000000000 --- a/news/+background-task-expired-state-rehydrate.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -A background task that re-enters an expired session now rehydrates the loaded state tree, so the browser no longer shows stale values for those states. diff --git a/news/+bun-version-warning.bugfix.md b/news/+bun-version-warning.bugfix.md deleted file mode 100644 index 8de6329f2f6..00000000000 --- a/news/+bun-version-warning.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Clarify the warning shown when Bun is below the minimum supported version. diff --git a/news/+cancel-disconnected-page-loads.bugfix.md b/news/+cancel-disconnected-page-loads.bugfix.md deleted file mode 100644 index 816760396be..00000000000 --- a/news/+cancel-disconnected-page-loads.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Cancel unfinished page-load event chains when the client disconnects, including hydration that has not yet started. Independent background events continue running. diff --git a/news/+cap-default-backend-workers.bugfix.md b/news/+cap-default-backend-workers.bugfix.md deleted file mode 100644 index 89874b66ed1..00000000000 --- a/news/+cap-default-backend-workers.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Cap the automatically selected number of Redis-backed backend workers at eight. Set `GRANIAN_WORKERS` to override the default. \ No newline at end of file diff --git a/news/+client-state-late-mount.bugfix.md b/news/+client-state-late-mount.bugfix.md deleted file mode 100644 index 84e8d639a19..00000000000 --- a/news/+client-state-late-mount.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fix a global `rx._x.client_state` reader that mounts after the value was set, such as one behind an `rx.cond`, keeping the stale value when the value is later set back to its default. diff --git a/news/+client-state-push-before-mount.bugfix.md b/news/+client-state-push-before-mount.bugfix.md deleted file mode 100644 index 96a454cdfe8..00000000000 --- a/news/+client-state-push-before-mount.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fix `TypeError: refs._client_state_set... is not a function` when the backend pushes a global `rx._x.client_state` value before any component using it has mounted, such as one behind an `rx.cond` or a page that waits for hydration. The value is now kept for the first component that mounts. diff --git a/news/+dict-view-dirty-tracking.bugfix.md b/news/+dict-view-dirty-tracking.bugfix.md deleted file mode 100644 index 6d57845d457..00000000000 --- a/news/+dict-view-dirty-tracking.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Mutating a nested value reached through `dict.values()` or `dict.items()` on a state var now marks the var dirty, so the UI and cached vars depending on it update. diff --git a/news/+event-sequences.feature.md b/news/+event-sequences.feature.md deleted file mode 100644 index b028353a2b9..00000000000 --- a/news/+event-sequences.feature.md +++ /dev/null @@ -1 +0,0 @@ -A page's `on_load` accepts any sequence of events, e.g. a tuple, like a list of them. diff --git a/news/+export-workspace-lock.bugfix.md b/news/+export-workspace-lock.bugfix.md deleted file mode 100644 index 1b0b42e76ba..00000000000 --- a/news/+export-workspace-lock.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Production exports, `reflex run --env prod`, and preview startup that share a `.web` directory now wait for one another instead of overwriting each other's compiled frontend and archives. diff --git a/news/+faster-deploy-archives.performance.md b/news/+faster-deploy-archives.performance.md deleted file mode 100644 index 5b849a20ef0..00000000000 --- a/news/+faster-deploy-archives.performance.md +++ /dev/null @@ -1 +0,0 @@ -Speed up deployment archive creation by reducing filesystem checks for excluded files and avoiding recompression of precompressed frontend assets. diff --git a/news/+filtered-async-computed-vars.bugfix.md b/news/+filtered-async-computed-vars.bugfix.md deleted file mode 100644 index b0f1a7192bf..00000000000 --- a/news/+filtered-async-computed-vars.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fix unawaited coroutine warnings when a state delta filter withholds an async uncached computed variable. diff --git a/news/+form-data.feature.md b/news/+form-data.feature.md deleted file mode 100644 index 75ad8f915a2..00000000000 --- a/news/+form-data.feature.md +++ /dev/null @@ -1,7 +0,0 @@ -Form `on_submit` handlers can annotate their form data as `rx.form.FormData` to receive every value of fields that share a name, in submission order; a `dict` annotation still keeps each name's last value. In a `TypedDict` annotation, a `list[str]` field collects every value of its name and a `bool` field is `False` when nothing was submitted, such as for an unchecked checkbox, or when the value is false-like, such as `"false"`, `"off"` or `"0"`; for `list[str] | None` and `bool | None` fields an unsubmitted value is `None`, and an unsubmitted `NotRequired` field is left out. In a `TypedDict`, a list field `range` also collects the `range[]` values a two-thumb `rx.slider(name="range")` submits. - -```python -@rx.event -def handle_submit(self, form_data: rx.form.FormData[str, str]): - self.toppings = form_data.getlist("topping") -``` diff --git a/news/+granian-sigterm-shutdown.bugfix.md b/news/+granian-sigterm-shutdown.bugfix.md deleted file mode 100644 index 95d90cbbc7e..00000000000 --- a/news/+granian-sigterm-shutdown.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`reflex run` no longer logs "Unexpected exit from worker-1" when the dev backend is stopped with SIGTERM or SIGINT. diff --git a/news/+hydrate-storage-dependents.bugfix.md b/news/+hydrate-storage-dependents.bugfix.md deleted file mode 100644 index bd6d7246b2f..00000000000 --- a/news/+hydrate-storage-dependents.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Cached computed vars that depend on client storage (`rx.LocalStorage`, `rx.SessionStorage`, `rx.Cookie`) are now evaluated once per page load instead of twice. diff --git a/news/+lazy-sqlalchemy-asyncio.bugfix.md b/news/+lazy-sqlalchemy-asyncio.bugfix.md deleted file mode 100644 index 16221603b35..00000000000 --- a/news/+lazy-sqlalchemy-asyncio.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`reflex.model` (and `rx.ModelRegistry`, `rx.session`, `rx.Model`) can be imported without `greenlet`, which SQLAlchemy 2.1 only installs with its `asyncio` extra; only `rx.asession` and `get_async_engine` require it now. diff --git a/news/+legacy-state-token-error.bugfix.md b/news/+legacy-state-token-error.bugfix.md deleted file mode 100644 index 5cccc7d9840..00000000000 --- a/news/+legacy-state-token-error.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Raise an actionable error when a legacy string passed to `App.modify_state()` has a missing or unknown state path. Use `rx.BaseStateToken(ident=client_token, cls=StateClass)` to select the state explicitly. diff --git a/news/+model-db-type-checking.bugfix.md b/news/+model-db-type-checking.bugfix.md deleted file mode 100644 index e277c8e1f24..00000000000 --- a/news/+model-db-type-checking.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Type checkers see the database helpers of `reflex.model` (`rx.session`, `rx.asession`, `rx.Model`, `ModelRegistry`, ...) as defined, rather than as unions with the stand-ins used when the db extra is missing. diff --git a/news/+moment-provider.feature.md b/news/+moment-provider.feature.md deleted file mode 100644 index 63fad102ef3..00000000000 --- a/news/+moment-provider.feature.md +++ /dev/null @@ -1 +0,0 @@ -Expose `rx.moment_provider` for sharing locale, timezone, formatting, and timer defaults across Moment components. diff --git a/news/+prod-fork-preload.performance.md b/news/+prod-fork-preload.performance.md deleted file mode 100644 index f0bfcd0171f..00000000000 --- a/news/+prod-fork-preload.performance.md +++ /dev/null @@ -1 +0,0 @@ -Production backend workers on Linux are now forked from a supervisor that has already imported the app, so they share its memory instead of each importing the app again, which cuts memory use and startup time. Set `REFLEX_BACKEND_START_METHOD=spawn` for apps that are not fork-safe. diff --git a/news/+react-compiler-opt-in.feature.md b/news/+react-compiler-opt-in.feature.md deleted file mode 100644 index f8e451cf38a..00000000000 --- a/news/+react-compiler-opt-in.feature.md +++ /dev/null @@ -1 +0,0 @@ -Add an experimental, default-off `react_compiler` configuration flag to enable React Compiler memoization for generated components in development and production. diff --git a/news/+repeated-request-headers.bugfix.md b/news/+repeated-request-headers.bugfix.md deleted file mode 100644 index af8216fc2f5..00000000000 --- a/news/+repeated-request-headers.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Repeated request headers are no longer collapsed to their last value: repeated `cookie` fields are joined with `"; "` and any other repeated field with `", "`, so `router.headers.cookie` keeps every cookie. diff --git a/news/+sdist-workspace-metadata.bugfix.md b/news/+sdist-workspace-metadata.bugfix.md deleted file mode 100644 index 25c88cef932..00000000000 --- a/news/+sdist-workspace-metadata.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fix installing Reflex source distributions with uv by excluding references to workspace packages that are not included in the archive. diff --git a/news/+state-schema-mismatch.feature.md b/news/+state-schema-mismatch.feature.md deleted file mode 100644 index f9061f92cef..00000000000 --- a/news/+state-schema-mismatch.feature.md +++ /dev/null @@ -1 +0,0 @@ -Detect a frontend built for another version of the app when it connects to the backend. The compiled frontend now carries a hash of the state tree (state names, frontend vars and event handler names) and sends it on every socket connect. On a mismatch, a production page reloads once (sharing the `REFLEX_AUTO_RELOAD_COOLDOWN` with the reload on frontend errors) and otherwise shows a "new version available" banner with a reload button; in dev mode it only logs a console warning. Load balancers serving several backend versions still need sticky sessions. diff --git a/news/+stateful-pages-marker-decode.bugfix.md b/news/+stateful-pages-marker-decode.bugfix.md deleted file mode 100644 index 5cb5579a25e..00000000000 --- a/news/+stateful-pages-marker-decode.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -A `stateful_pages.json` marker that is not valid UTF-8 is now treated as corrupt and rebuilt, instead of raising `UnicodeDecodeError` on every backend start. diff --git a/news/+storage-annotation-hydration.bugfix.md b/news/+storage-annotation-hydration.bugfix.md deleted file mode 100644 index 5cb20613d46..00000000000 --- a/news/+storage-annotation-hydration.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Avoid false type errors when hydrating or assigning strings to vars annotated with `Cookie`, `LocalStorage`, or `SessionStorage`. diff --git a/news/+unknown-substate-log.bugfix.md b/news/+unknown-substate-log.bugfix.md deleted file mode 100644 index eb1a1b08ed1..00000000000 --- a/news/+unknown-substate-log.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -The backend log for an unknown frontend substate now says the substate was skipped instead of reporting a failed state update. The frontend exception handler docs describe how to resolve the mismatch. diff --git a/news/7113.performance.md b/news/7113.performance.md deleted file mode 100644 index 54d3bc5c3f2..00000000000 --- a/news/7113.performance.md +++ /dev/null @@ -1 +0,0 @@ -The `reflex run` backend reload worker is now forked from the supervisor on Linux instead of started through a forkserver, so framework code is shared copy-on-write and the extra forkserver processes are gone. Set `REFLEX_BACKEND_START_METHOD=spawn` or `REFLEX_STRICT_HOT_RELOAD=1` for apps that are not fork-safe. diff --git a/news/7258.bugfix.md b/news/7258.bugfix.md deleted file mode 100644 index e6ada15bc5e..00000000000 --- a/news/7258.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Load backend apps by their configured module name so state updates work even when the app package has no `__init__.py`. diff --git a/news/7441.bugfix.md b/news/7441.bugfix.md deleted file mode 100644 index 2a400a11684..00000000000 --- a/news/7441.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Detect state reads from the new shared state store when checking that an app that reads state defines an `rx.State` subclass. diff --git a/news/7554.bugfix.md b/news/7554.bugfix.md deleted file mode 100644 index d548c726a22..00000000000 --- a/news/7554.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`reflex init` no longer refuses to reinitialize an existing app just because its project directory is named `reflex`; the check now applies to the `app_name` set in `rxconfig.py`. diff --git a/news/7566.bugfix.md b/news/7566.bugfix.md deleted file mode 100644 index 6c1ca6b3287..00000000000 --- a/news/7566.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Add development frontend packages with `-D`, so npm saves them under `devDependencies` and source-only hot reloads no longer reinstall frontend packages. diff --git a/packages/reflex-base/CHANGELOG.md b/packages/reflex-base/CHANGELOG.md index eb7191119e4..97e71300cb3 100644 --- a/packages/reflex-base/CHANGELOG.md +++ b/packages/reflex-base/CHANGELOG.md @@ -1,3 +1,61 @@ +## v0.10.1 (2026-10-26) + +### Deprecations + +- `VarData(position=...)` and `Hooks.HookPosition` are deprecated and ignored: hooks render in declaration order. Remove the `position` argument; to place a hook after another one, put the one it reads in its `VarData(hooks=...)`. ([#7586](https://github.com/reflex-dev/reflex/issues/7586)) +- `reflex_base.utils.format.format_data_editor_column` is deprecated and will be removed in 1.0; `rx.data_editor` applies the column defaults itself. ([#7607](https://github.com/reflex-dev/reflex/issues/7607)) + +### Features + +- Add the experimental `react_compiler` configuration option, also available as `REFLEX_REACT_COMPILER`, to opt in to automatic React component memoization. ([#7234](https://github.com/reflex-dev/reflex/issues/7234)) +- Event props and the events an event handler returns accept any sequence of events, e.g. a tuple or a variable typed `list[EventSpec]`, not only a list literal. The new `reflex_base.event.event_sequence` helper returns such a value as a sequence of events, wrapping a single event in a list. ([#7402](https://github.com/reflex-dev/reflex/issues/7402)) +- The compiled context module exports `stateSchema`, a hash of the state tree the frontend was built for, and the frontend sends it in the socket.io CONNECT `auth` payload under the `state_schema` key. The backend answers a mismatch with the new `state_mismatch` socket event; in production, the frontend then reloads once per cooldown window or shows a "new version available" banner, while in development it only warns in the console. ([#7553](https://github.com/reflex-dev/reflex/issues/7553)) +- Add `reflex_base.vars.get_leaf_vars`, which returns the vars a var reads by unwrapping var operations, casts, literal containers and function bodies, for example to list a derived var's dependencies in a React hook's dependency array. ([#7606](https://github.com/reflex-dev/reflex/issues/7606)) +- Add the `trusted_proxy_hops` configuration option for safely resolving client IPs from trusted proxy headers. ([#7614](https://github.com/reflex-dev/reflex/issues/7614)) + +### Bug Fixes + +- `TypedDict` form data honors `Required` and `NotRequired`, including inside `Annotated`, in modules using `from __future__ import annotations`: a `NotRequired` field no longer needs a matching form control. ([#7386](https://github.com/reflex-dev/reflex/issues/7386)) +- An event handler stored outside a state, e.g. in a component or dataclass field, now type-checks as the handler instead of a bound function, and a handler read through a state instance is typed as a function returning `Any`. ([#7401](https://github.com/reflex-dev/reflex/issues/7401)) +- `LiteralObjectVar.create` is typed to take any value that serializes to a mapping, such as a dataclass, as it does at runtime, not only a mapping. ([#7403](https://github.com/reflex-dev/reflex/issues/7403)) +- The CDN fallback for an unbundled sub-path dynamic import now puts the sub-path before jsdelivr's `/+esm`, so it resolves instead of returning 404. ([#7405](https://github.com/reflex-dev/reflex/issues/7405)) +- ty now reads an optional model, dataclass or mapping field (`rx.Field[X | None]`) on the state class as `ObjectVar[X]`, as pyright already did, instead of `ObjectVar[X | None]`. ([#7413](https://github.com/reflex-dev/reflex/issues/7413)) +- Cancel pending hydration and page-load event chains when their client disconnects. ([#7415](https://github.com/reflex-dev/reflex/issues/7415)) +- Calling an upload handler with `rx.upload_files(...)` or `rx.upload_files_chunk(...)` as its only argument, as the upload docs show, now type-checks under pyright and ty, for a handler taking `list[rx.UploadFile]` or `rx.UploadChunkIterator`. ([#7419](https://github.com/reflex-dev/reflex/issues/7419)) +- Frontend updates and events now keep working when a backend update names a substate the compiled frontend does not know. Reflex skips that substate and reports it once per connection. ([#7435](https://github.com/reflex-dev/reflex/issues/7435)) +- Fix a blank page with `Maximum call stack size exceeded` in apps with thousands of state classes. State is now read from one shared store, so the React provider tree no longer grows with the number of states. ([#7441](https://github.com/reflex-dev/reflex/issues/7441)) +- Raise descriptive errors when page or compile contexts are accessed outside compilation. ([#7517](https://github.com/reflex-dev/reflex/issues/7517)) +- Make `StringVar` length, indexing, and slicing count Unicode code points so operations do not split valid surrogate pairs. On a `None` string these operations now behave as if it were empty. ([#7518](https://github.com/reflex-dev/reflex/issues/7518)) +- A frontend error event that carries no `Error` object, such as the benign `ResizeObserver loop` notification, no longer throws inside `window.onerror` and is now reported to `handle_frontend_exception`. ([#7544](https://github.com/reflex-dev/reflex/issues/7544)) +- Editing one tab no longer leaves other `sync=True` browser storage vars that share its storage `name` stale in other tabs; every such var is now synced, not only the last one declared. ([#7545](https://github.com/reflex-dev/reflex/issues/7545)) +- A state var annotation that names an undefined symbol, such as `items: list[Item] = []` under `from __future__ import annotations`, raises `NameError: name 'Item' is not defined` again instead of an unrelated `TypeError` or `AttributeError`. This also covers vars without a default, backend vars, and Python 3.14 annotations without the `__future__` import. ([#7547](https://github.com/reflex-dev/reflex/issues/7547)) +- Report a hydrate message that exceeds the server's message size limit, with its size and the limit, instead of sending it and retrying. Reduce browser storage data and reload to recover. ([#7551](https://github.com/reflex-dev/reflex/issues/7551)) +- On POSIX, `reflex run --json` forwards SIGINT to its child process, so supervisors that signal only the Reflex PID can stop the app cleanly. ([#7558](https://github.com/reflex-dev/reflex/issues/7558)) +- Raising a negative number or a negated var to a power, such as `(-State.x) ** 2`, now compiles to valid JavaScript instead of failing the frontend build with "A unary expression with the '-' operator cannot be used as the left operand of an exponentiation expression". ([#7565](https://github.com/reflex-dev/reflex/issues/7565)) +- Write the Tailwind `important` option to the generated `tailwind.config.js` under the `important` key. It was emitted as `importants`, so Tailwind ignored it. ([#7573](https://github.com/reflex-dev/reflex/issues/7573)) +- A background task that re-enters an expired session now rehydrates the loaded states. The browser drops their stale values and keeps its route and browser storage; its next event runs the current page's on_load. ([#7585](https://github.com/reflex-dev/reflex/issues/7585)) +- Component hooks render in the order they are declared and merged, so a hook always comes after the hooks it reads. Before, a component whose prop and `add_hooks` Var read the same state could render a hook before the state declaration it reads and fail with a `ReferenceError`. A hook that reads state must carry it: return `rx.Var(f"const x = {State.value}")` from `add_hooks`, not a plain string built with `str(State.value)`. ([#7586](https://github.com/reflex-dev/reflex/issues/7586)) +- Passing a plain `dict` to `format_prop` no longer raises `AttributeError`; the dict is JSON-encoded like any other literal. ([#7587](https://github.com/reflex-dev/reflex/issues/7587)) +- Resolve Pydantic v2 model field types without emitting deprecation warnings, while retaining Pydantic v1 compatibility. ([#7592](https://github.com/reflex-dev/reflex/issues/7592)) +- Retry with backoff and show the connection error when the server or a proxy closes the connection before it is established, for example when browser storage makes the hydrate message too large, instead of reconnecting in a tight loop. ([#7605](https://github.com/reflex-dev/reflex/issues/7605)) +- Event handler arguments hinted as an `rx.Model` no longer emit a `PydanticDeprecatedSince20` warning for every key of the payload. ([#7636](https://github.com/reflex-dev/reflex/issues/7636)) +- Upgrade the default Bun version to 1.4.4, which removes compromised emSign certificate authorities from its bundled trust store. ([#7639](https://github.com/reflex-dev/reflex/issues/7639)) + +### Performance + +- Add the `REFLEX_BACKEND_START_METHOD` environment variable to choose how production backend workers are started (`fork`, `spawn`, or `forkserver`). ([#7079](https://github.com/reflex-dev/reflex/issues/7079)) +- Unchanged objects and arrays in state updates now keep their previous identity on the frontend, so memoized components skip re-rendering them, and an update that changes nothing no longer re-renders at all. ([#7273](https://github.com/reflex-dev/reflex/issues/7273)) +- A running background event handler no longer keeps the state tree it was dispatched with alive once it has entered `async with self`. With the Redis state manager, every long-running background task used to hold an extra copy of the session's state. ([#7447](https://github.com/reflex-dev/reflex/issues/7447)) + +### Documentation + +- Document the supported `BaseStateMeta` contract for custom state metaclasses, including the `state_root` and `mixin` class keywords and the reserved `_reflex_state_root` attribute. ([#7626](https://github.com/reflex-dev/reflex/issues/7626)) + +### Miscellaneous + +- Update generated apps to React 19.3.1, Vite 8.3.4, PostCSS 8.5.30, and postcss-import 17.0.1. ([#7645](https://github.com/reflex-dev/reflex/issues/7645)) + + ## v0.10.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-base/news/+7481.bugfix.md b/packages/reflex-base/news/+7481.bugfix.md deleted file mode 100644 index 32f60042d11..00000000000 --- a/packages/reflex-base/news/+7481.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Make `StringVar` length, indexing, and slicing count Unicode code points so operations do not split valid surrogate pairs. On a `None` string these operations now behave as if it were empty. diff --git a/packages/reflex-base/news/+7489.bugfix.md b/packages/reflex-base/news/+7489.bugfix.md deleted file mode 100644 index 30950adc0f6..00000000000 --- a/packages/reflex-base/news/+7489.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Raise descriptive errors when page or compile contexts are accessed outside compilation. diff --git a/packages/reflex-base/news/+7601-trusted-proxy-client-ip.feature.md b/packages/reflex-base/news/+7601-trusted-proxy-client-ip.feature.md deleted file mode 100644 index c8550b8c858..00000000000 --- a/packages/reflex-base/news/+7601-trusted-proxy-client-ip.feature.md +++ /dev/null @@ -1 +0,0 @@ -Add the `trusted_proxy_hops` configuration option for safely resolving client IPs from trusted proxy headers. diff --git a/packages/reflex-base/news/+background-dispatch-tree.performance.md b/packages/reflex-base/news/+background-dispatch-tree.performance.md deleted file mode 100644 index f3637302cf8..00000000000 --- a/packages/reflex-base/news/+background-dispatch-tree.performance.md +++ /dev/null @@ -1 +0,0 @@ -A running background event handler no longer keeps the state tree it was dispatched with alive once it has entered `async with self`. With the Redis state manager, every long-running background task used to hold an extra copy of the session's state. diff --git a/packages/reflex-base/news/+background-task-expired-state-rehydrate.bugfix.md b/packages/reflex-base/news/+background-task-expired-state-rehydrate.bugfix.md deleted file mode 100644 index 329bd57cafe..00000000000 --- a/packages/reflex-base/news/+background-task-expired-state-rehydrate.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -A background task that re-enters an expired session now rehydrates the loaded states. The browser drops their stale values and keeps its route and browser storage; its next event runs the current page's on_load. diff --git a/packages/reflex-base/news/+bun-ca-removal.bugfix.md b/packages/reflex-base/news/+bun-ca-removal.bugfix.md deleted file mode 100644 index 2d2c7656601..00000000000 --- a/packages/reflex-base/news/+bun-ca-removal.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Upgrade the default Bun version to 1.4.4, which removes compromised emSign certificate authorities from its bundled trust store. diff --git a/packages/reflex-base/news/+cancel-disconnected-page-loads.bugfix.md b/packages/reflex-base/news/+cancel-disconnected-page-loads.bugfix.md deleted file mode 100644 index f5bbec43a14..00000000000 --- a/packages/reflex-base/news/+cancel-disconnected-page-loads.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Cancel pending hydration and page-load event chains when their client disconnects. diff --git a/packages/reflex-base/news/+dynamic-cdn-subpath-fallback.bugfix.md b/packages/reflex-base/news/+dynamic-cdn-subpath-fallback.bugfix.md deleted file mode 100644 index 02692e5bf78..00000000000 --- a/packages/reflex-base/news/+dynamic-cdn-subpath-fallback.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -The CDN fallback for an unbundled sub-path dynamic import now puts the sub-path before jsdelivr's `/+esm`, so it resolves instead of returning 404. diff --git a/packages/reflex-base/news/+event-callback-non-state-get.bugfix.md b/packages/reflex-base/news/+event-callback-non-state-get.bugfix.md deleted file mode 100644 index 2f516601b43..00000000000 --- a/packages/reflex-base/news/+event-callback-non-state-get.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -An event handler stored outside a state, e.g. in a component or dataclass field, now type-checks as the handler instead of a bound function, and a handler read through a state instance is typed as a function returning `Any`. diff --git a/packages/reflex-base/news/+event-callback-upload-spec.bugfix.md b/packages/reflex-base/news/+event-callback-upload-spec.bugfix.md deleted file mode 100644 index 22ff501a776..00000000000 --- a/packages/reflex-base/news/+event-callback-upload-spec.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Calling an upload handler with `rx.upload_files(...)` or `rx.upload_files_chunk(...)` as its only argument, as the upload docs show, now type-checks under pyright and ty, for a handler taking `list[rx.UploadFile]` or `rx.UploadChunkIterator`. diff --git a/packages/reflex-base/news/+event-sequences.feature.md b/packages/reflex-base/news/+event-sequences.feature.md deleted file mode 100644 index 0968c996c54..00000000000 --- a/packages/reflex-base/news/+event-sequences.feature.md +++ /dev/null @@ -1 +0,0 @@ -Event props and the events an event handler returns accept any sequence of events, e.g. a tuple or a variable typed `list[EventSpec]`, not only a list literal. The new `reflex_base.event.event_sequence` helper returns such a value as a sequence of events, wrapping a single event in a list. diff --git a/packages/reflex-base/news/+format-data-editor-column.deprecation.md b/packages/reflex-base/news/+format-data-editor-column.deprecation.md deleted file mode 100644 index b1d7eb4e489..00000000000 --- a/packages/reflex-base/news/+format-data-editor-column.deprecation.md +++ /dev/null @@ -1 +0,0 @@ -`reflex_base.utils.format.format_data_editor_column` is deprecated and will be removed in 1.0; `rx.data_editor` applies the column defaults itself. diff --git a/packages/reflex-base/news/+format-prop-dict.bugfix.md b/packages/reflex-base/news/+format-prop-dict.bugfix.md deleted file mode 100644 index 7fa0acaf0ef..00000000000 --- a/packages/reflex-base/news/+format-prop-dict.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Passing a plain `dict` to `format_prop` no longer raises `AttributeError`; the dict is JSON-encoded like any other literal. diff --git a/packages/reflex-base/news/+get-leaf-vars.feature.md b/packages/reflex-base/news/+get-leaf-vars.feature.md deleted file mode 100644 index 4da5308a176..00000000000 --- a/packages/reflex-base/news/+get-leaf-vars.feature.md +++ /dev/null @@ -1 +0,0 @@ -Add `reflex_base.vars.get_leaf_vars`, which returns the vars a var reads by unwrapping var operations, casts, literal containers and function bodies, for example to list a derived var's dependencies in a React hook's dependency array. diff --git a/packages/reflex-base/news/+hook-declaration-order.bugfix.md b/packages/reflex-base/news/+hook-declaration-order.bugfix.md deleted file mode 100644 index 92a15c5cea8..00000000000 --- a/packages/reflex-base/news/+hook-declaration-order.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Component hooks render in the order they are declared and merged, so a hook always comes after the hooks it reads. Before, a component whose prop and `add_hooks` Var read the same state could render a hook before the state declaration it reads and fail with a `ReferenceError`. A hook that reads state must carry it: return `rx.Var(f"const x = {State.value}")` from `add_hooks`, not a plain string built with `str(State.value)`. diff --git a/packages/reflex-base/news/+hook-position.deprecation.md b/packages/reflex-base/news/+hook-position.deprecation.md deleted file mode 100644 index 11a4d269c41..00000000000 --- a/packages/reflex-base/news/+hook-position.deprecation.md +++ /dev/null @@ -1 +0,0 @@ -`VarData(position=...)` and `Hooks.HookPosition` are deprecated and ignored: hooks render in declaration order. Remove the `position` argument; to place a hook after another one, put the one it reads in its `VarData(hooks=...)`. diff --git a/packages/reflex-base/news/+hydration-size-error.bugfix.md b/packages/reflex-base/news/+hydration-size-error.bugfix.md deleted file mode 100644 index c21087dc85f..00000000000 --- a/packages/reflex-base/news/+hydration-size-error.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Report a hydrate message that exceeds the server's message size limit, with its size and the limit, instead of sending it and retrying. Reduce browser storage data and reload to recover. diff --git a/packages/reflex-base/news/+large-state-provider-tree.bugfix.md b/packages/reflex-base/news/+large-state-provider-tree.bugfix.md deleted file mode 100644 index 2fd128f75e6..00000000000 --- a/packages/reflex-base/news/+large-state-provider-tree.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fix a blank page with `Maximum call stack size exceeded` in apps with thousands of state classes. State is now read from one shared store, so the React provider tree no longer grows with the number of states. diff --git a/packages/reflex-base/news/+literal-object-var-create.bugfix.md b/packages/reflex-base/news/+literal-object-var-create.bugfix.md deleted file mode 100644 index 7bf0aee5b70..00000000000 --- a/packages/reflex-base/news/+literal-object-var-create.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`LiteralObjectVar.create` is typed to take any value that serializes to a mapping, such as a dataclass, as it does at runtime, not only a mapping. diff --git a/packages/reflex-base/news/+model-event-arg-fields.bugfix.md b/packages/reflex-base/news/+model-event-arg-fields.bugfix.md deleted file mode 100644 index d8a48c53411..00000000000 --- a/packages/reflex-base/news/+model-event-arg-fields.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Event handler arguments hinted as an `rx.Model` no longer emit a `PydanticDeprecatedSince20` warning for every key of the payload. diff --git a/packages/reflex-base/news/+onerror-without-error-object.bugfix.md b/packages/reflex-base/news/+onerror-without-error-object.bugfix.md deleted file mode 100644 index 6d5faed0624..00000000000 --- a/packages/reflex-base/news/+onerror-without-error-object.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -A frontend error event that carries no `Error` object, such as the benign `ResizeObserver loop` notification, no longer throws inside `window.onerror` and is now reported to `handle_frontend_exception`. diff --git a/packages/reflex-base/news/+optional-object-field-var.bugfix.md b/packages/reflex-base/news/+optional-object-field-var.bugfix.md deleted file mode 100644 index 5f3515d9650..00000000000 --- a/packages/reflex-base/news/+optional-object-field-var.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -ty now reads an optional model, dataclass or mapping field (`rx.Field[X | None]`) on the state class as `ObjectVar[X]`, as pyright already did, instead of `ObjectVar[X | None]`. diff --git a/packages/reflex-base/news/+prod-fork-preload.performance.md b/packages/reflex-base/news/+prod-fork-preload.performance.md deleted file mode 100644 index 53d78489de8..00000000000 --- a/packages/reflex-base/news/+prod-fork-preload.performance.md +++ /dev/null @@ -1 +0,0 @@ -Add the `REFLEX_BACKEND_START_METHOD` environment variable to choose how production backend workers are started (`fork`, `spawn`, or `forkserver`). diff --git a/packages/reflex-base/news/+pydantic-field-introspection.bugfix.md b/packages/reflex-base/news/+pydantic-field-introspection.bugfix.md deleted file mode 100644 index 06f4c195a6b..00000000000 --- a/packages/reflex-base/news/+pydantic-field-introspection.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Resolve Pydantic v2 model field types without emitting deprecation warnings, while retaining Pydantic v1 compatibility. diff --git a/packages/reflex-base/news/+react-compiler-opt-in.feature.md b/packages/reflex-base/news/+react-compiler-opt-in.feature.md deleted file mode 100644 index ecfee937737..00000000000 --- a/packages/reflex-base/news/+react-compiler-opt-in.feature.md +++ /dev/null @@ -1 +0,0 @@ -Add the experimental `react_compiler` configuration option, also available as `REFLEX_REACT_COMPILER`, to opt in to automatic React component memoization. diff --git a/packages/reflex-base/news/+reconnect-backoff.bugfix.md b/packages/reflex-base/news/+reconnect-backoff.bugfix.md deleted file mode 100644 index d45093006e5..00000000000 --- a/packages/reflex-base/news/+reconnect-backoff.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Retry with backoff and show the connection error when the server or a proxy closes the connection before it is established, for example when browser storage makes the hydrate message too large, instead of reconnecting in a tight loop. diff --git a/packages/reflex-base/news/+refresh-dependencies.misc.md b/packages/reflex-base/news/+refresh-dependencies.misc.md deleted file mode 100644 index 22324445e7d..00000000000 --- a/packages/reflex-base/news/+refresh-dependencies.misc.md +++ /dev/null @@ -1 +0,0 @@ -Update generated apps to React 19.3.1, Vite 8.3.4, PostCSS 8.5.30, and postcss-import 17.0.1. diff --git a/packages/reflex-base/news/+state-annotation-name-error.bugfix.md b/packages/reflex-base/news/+state-annotation-name-error.bugfix.md deleted file mode 100644 index f20918bcd47..00000000000 --- a/packages/reflex-base/news/+state-annotation-name-error.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -A state var annotation that names an undefined symbol, such as `items: list[Item] = []` under `from __future__ import annotations`, raises `NameError: name 'Item' is not defined` again instead of an unrelated `TypeError` or `AttributeError`. This also covers vars without a default, backend vars, and Python 3.14 annotations without the `__future__` import. diff --git a/packages/reflex-base/news/+state-metaclass-contract.docs.md b/packages/reflex-base/news/+state-metaclass-contract.docs.md deleted file mode 100644 index 2ec7dd586b8..00000000000 --- a/packages/reflex-base/news/+state-metaclass-contract.docs.md +++ /dev/null @@ -1 +0,0 @@ -Document the supported `BaseStateMeta` contract for custom state metaclasses, including the `state_root` and `mixin` class keywords and the reserved `_reflex_state_root` attribute. diff --git a/packages/reflex-base/news/+state-schema-mismatch.feature.md b/packages/reflex-base/news/+state-schema-mismatch.feature.md deleted file mode 100644 index 2d20a8d146d..00000000000 --- a/packages/reflex-base/news/+state-schema-mismatch.feature.md +++ /dev/null @@ -1 +0,0 @@ -The compiled context module exports `stateSchema`, a hash of the state tree the frontend was built for, and the frontend sends it in the socket.io CONNECT `auth` payload under the `state_schema` key. The backend answers a mismatch with the new `state_mismatch` socket event; in production, the frontend then reloads once per cooldown window or shows a "new version available" banner, while in development it only warns in the console. diff --git a/packages/reflex-base/news/+storage-sync-shared-name.bugfix.md b/packages/reflex-base/news/+storage-sync-shared-name.bugfix.md deleted file mode 100644 index 5b32a1d94ed..00000000000 --- a/packages/reflex-base/news/+storage-sync-shared-name.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Editing one tab no longer leaves other `sync=True` browser storage vars that share its storage `name` stale in other tabs; every such var is now synced, not only the last one declared. diff --git a/packages/reflex-base/news/+tailwind-important-key.bugfix.md b/packages/reflex-base/news/+tailwind-important-key.bugfix.md deleted file mode 100644 index fb04a4e7212..00000000000 --- a/packages/reflex-base/news/+tailwind-important-key.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Write the Tailwind `important` option to the generated `tailwind.config.js` under the `important` key. It was emitted as `importants`, so Tailwind ignored it. diff --git a/packages/reflex-base/news/+typed-dict-postponed-qualifiers.bugfix.md b/packages/reflex-base/news/+typed-dict-postponed-qualifiers.bugfix.md deleted file mode 100644 index 7193b69fc52..00000000000 --- a/packages/reflex-base/news/+typed-dict-postponed-qualifiers.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`TypedDict` form data honors `Required` and `NotRequired`, including inside `Annotated`, in modules using `from __future__ import annotations`: a `NotRequired` field no longer needs a matching form control. diff --git a/packages/reflex-base/news/+unknown-substate-recovery.bugfix.md b/packages/reflex-base/news/+unknown-substate-recovery.bugfix.md deleted file mode 100644 index 1a8bc917c76..00000000000 --- a/packages/reflex-base/news/+unknown-substate-recovery.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Frontend updates and events now keep working when a backend update names a substate the compiled frontend does not know. Reflex skips that substate and reports it once per connection. diff --git a/packages/reflex-base/news/7273.performance.md b/packages/reflex-base/news/7273.performance.md deleted file mode 100644 index 4093d008ea7..00000000000 --- a/packages/reflex-base/news/7273.performance.md +++ /dev/null @@ -1 +0,0 @@ -Unchanged objects and arrays in state updates now keep their previous identity on the frontend, so memoized components skip re-rendering them, and an update that changes nothing no longer re-renders at all. diff --git a/packages/reflex-base/news/7558.bugfix.md b/packages/reflex-base/news/7558.bugfix.md deleted file mode 100644 index 6e6053f0c27..00000000000 --- a/packages/reflex-base/news/7558.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -On POSIX, `reflex run --json` forwards SIGINT to its child process, so supervisors that signal only the Reflex PID can stop the app cleanly. diff --git a/packages/reflex-base/news/7565.bugfix.md b/packages/reflex-base/news/7565.bugfix.md deleted file mode 100644 index cf1cdad5078..00000000000 --- a/packages/reflex-base/news/7565.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Raising a negative number or a negated var to a power, such as `(-State.x) ** 2`, now compiles to valid JavaScript instead of failing the frontend build with "A unary expression with the '-' operator cannot be used as the left operand of an exponentiation expression". diff --git a/packages/reflex-build-sdk/CHANGELOG.md b/packages/reflex-build-sdk/CHANGELOG.md index 9fdbf3e3bb3..437352fe50a 100644 --- a/packages/reflex-build-sdk/CHANGELOG.md +++ b/packages/reflex-build-sdk/CHANGELOG.md @@ -2,6 +2,13 @@ +## v0.1.1 (2026-10-26) + +### Features + +- Expose `reflex_build_sdk.transports.default_transport()` so transport wrappers can preserve the SDK's choice of HTTP library. ([#7463](https://github.com/reflex-dev/reflex/issues/7463)) + + ## v0.1.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-build-sdk/news/+default-transport-factory.feature.md b/packages/reflex-build-sdk/news/+default-transport-factory.feature.md deleted file mode 100644 index ac028c35e12..00000000000 --- a/packages/reflex-build-sdk/news/+default-transport-factory.feature.md +++ /dev/null @@ -1 +0,0 @@ -Expose `reflex_build_sdk.transports.default_transport()` so transport wrappers can preserve the SDK's choice of HTTP library. diff --git a/packages/reflex-components-code/CHANGELOG.md b/packages/reflex-components-code/CHANGELOG.md index ea552eb4c3e..c96ab7f0b09 100644 --- a/packages/reflex-components-code/CHANGELOG.md +++ b/packages/reflex-components-code/CHANGELOG.md @@ -1,3 +1,14 @@ +## v0.10.1 (2026-10-26) + +### Bug Fixes + +- Fix `use_transformers=True` on the Shiki code block rendering no transformers: the default shikijs transformers and their styles are now applied again. ([#7437](https://github.com/reflex-dev/reflex/issues/7437)) + +### Miscellaneous + +- Update react-syntax-highlighter to 16.1.2. ([#7645](https://github.com/reflex-dev/reflex/issues/7645)) + + ## v0.10.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-components-code/news/+refresh-dependencies.misc.md b/packages/reflex-components-code/news/+refresh-dependencies.misc.md deleted file mode 100644 index c6aa9228b13..00000000000 --- a/packages/reflex-components-code/news/+refresh-dependencies.misc.md +++ /dev/null @@ -1 +0,0 @@ -Update react-syntax-highlighter to 16.1.2. diff --git a/packages/reflex-components-code/news/+shiki-use-transformers.bugfix.md b/packages/reflex-components-code/news/+shiki-use-transformers.bugfix.md deleted file mode 100644 index fe234db4bc9..00000000000 --- a/packages/reflex-components-code/news/+shiki-use-transformers.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Fix `use_transformers=True` on the Shiki code block rendering no transformers: the default shikijs transformers and their styles are now applied again. diff --git a/packages/reflex-components-core/CHANGELOG.md b/packages/reflex-components-core/CHANGELOG.md index 7596bcd0213..30bc187f332 100644 --- a/packages/reflex-components-core/CHANGELOG.md +++ b/packages/reflex-components-core/CHANGELOG.md @@ -1,3 +1,16 @@ +## v0.10.1a1 (2026-10-23) + +### Deprecations + +- Submitting a form control's value under its `id` is deprecated and will be removed in 0.11; form data will then hold only what each control submits under its `name`. Compiling a form whose `on_submit` handler takes the form data now warns about each value-bearing control that has a static `id` but no `name`; give it a `name`, e.g. `rx.input(id="email")` becomes `rx.input(id="email", name="email")`. A control whose `id` differs from its `name` also stops adding a field keyed by its `id`, and a checkbox or switch whose `id` equals its `name` submits `"on"` or nothing instead of `True` or `False`; read it as a `bool` field of a `TypedDict` to keep a bool. See the [form docs](https://reflex.dev/docs/library/forms/form/) for details. ([#7386](https://github.com/reflex-dev/reflex/issues/7386)) + +### Bug Fixes + +- Forms now see the `name` of a controlled input (one with `value` and `on_change`), so a `TypedDict` submit handler requiring that field no longer fails to compile. ([#7386](https://github.com/reflex-dev/reflex/issues/7386)) +- The default connection toast shows a hydration size error at once and keeps it open until the user closes it. ([#7551](https://github.com/reflex-dev/reflex/issues/7551)) +- `window_event_listener` and `clipboard` hooks now render in declaration order with the rest of the component's hooks instead of being moved after them. ([#7586](https://github.com/reflex-dev/reflex/issues/7586)) + + ## v0.10.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-components-core/news/+debounced-form-control-name.bugfix.md b/packages/reflex-components-core/news/+debounced-form-control-name.bugfix.md deleted file mode 100644 index a35c71a539f..00000000000 --- a/packages/reflex-components-core/news/+debounced-form-control-name.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Forms now see the `name` of a controlled input (one with `value` and `on_change`), so a `TypedDict` submit handler requiring that field no longer fails to compile. diff --git a/packages/reflex-components-core/news/+form-data-by-id.deprecation.md b/packages/reflex-components-core/news/+form-data-by-id.deprecation.md deleted file mode 100644 index c0b2c60cc8d..00000000000 --- a/packages/reflex-components-core/news/+form-data-by-id.deprecation.md +++ /dev/null @@ -1 +0,0 @@ -Submitting a form control's value under its `id` is deprecated and will be removed in 0.11; form data will then hold only what each control submits under its `name`. Compiling a form whose `on_submit` handler takes the form data now warns about each value-bearing control that has a static `id` but no `name`; give it a `name`, e.g. `rx.input(id="email")` becomes `rx.input(id="email", name="email")`. A control whose `id` differs from its `name` also stops adding a field keyed by its `id`, and a checkbox or switch whose `id` equals its `name` submits `"on"` or nothing instead of `True` or `False`; read it as a `bool` field of a `TypedDict` to keep a bool. See the [form docs](https://reflex.dev/docs/library/forms/form/) for details. diff --git a/packages/reflex-components-core/news/+hook-declaration-order.bugfix.md b/packages/reflex-components-core/news/+hook-declaration-order.bugfix.md deleted file mode 100644 index d05d5cf4cef..00000000000 --- a/packages/reflex-components-core/news/+hook-declaration-order.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`window_event_listener` and `clipboard` hooks now render in declaration order with the rest of the component's hooks instead of being moved after them. diff --git a/packages/reflex-components-core/news/+hydration-size-error.bugfix.md b/packages/reflex-components-core/news/+hydration-size-error.bugfix.md deleted file mode 100644 index 2d3ee6ff221..00000000000 --- a/packages/reflex-components-core/news/+hydration-size-error.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -The default connection toast shows a hydration size error at once and keeps it open until the user closes it. diff --git a/packages/reflex-components-core/pyproject.toml b/packages/reflex-components-core/pyproject.toml index e2564258405..520743a09fe 100644 --- a/packages/reflex-components-core/pyproject.toml +++ b/packages/reflex-components-core/pyproject.toml @@ -16,7 +16,7 @@ classifiers = [ "Programming Language :: Python :: 3.15", ] dependencies = [ - "reflex-base >= 0.10.1.dev0", + "reflex-base >= 0.10.1a1", "reflex-components-lucide >= 1.1.0", "reflex-components-sonner >= 0.10.0", "python_multipart >= 0.0.21", diff --git a/packages/reflex-components-dataeditor/CHANGELOG.md b/packages/reflex-components-dataeditor/CHANGELOG.md index 0a4a1a55f6b..4b8d3301f9b 100644 --- a/packages/reflex-components-dataeditor/CHANGELOG.md +++ b/packages/reflex-components-dataeditor/CHANGELOG.md @@ -1,3 +1,14 @@ +## v0.10.1a1 (2026-10-23) + +### Bug Fixes + +- `rx.data_editor` columns backed by state now get the same defaults as literal columns: `type` defaults to `"str"`, `id` to the lowercased `title`, and a column may be given as just its title string. The column dicts passed to `columns` are no longer modified in place. ([#7607](https://github.com/reflex-dev/reflex/issues/7607)) + +### Performance + +- Faster redraws for `rx.data_editor` grids whose `columns` or `data` come from state. ([#7607](https://github.com/reflex-dev/reflex/issues/7607)) + + ## v0.10.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-components-dataeditor/news/+memoized-cell-content.performance.md b/packages/reflex-components-dataeditor/news/+memoized-cell-content.performance.md deleted file mode 100644 index 28c64b52955..00000000000 --- a/packages/reflex-components-dataeditor/news/+memoized-cell-content.performance.md +++ /dev/null @@ -1 +0,0 @@ -Faster redraws for `rx.data_editor` grids whose `columns` or `data` come from state. diff --git a/packages/reflex-components-dataeditor/news/+reactive-columns-defaults.bugfix.md b/packages/reflex-components-dataeditor/news/+reactive-columns-defaults.bugfix.md deleted file mode 100644 index 56864fbebc1..00000000000 --- a/packages/reflex-components-dataeditor/news/+reactive-columns-defaults.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`rx.data_editor` columns backed by state now get the same defaults as literal columns: `type` defaults to `"str"`, `id` to the lowercased `title`, and a column may be given as just its title string. The column dicts passed to `columns` are no longer modified in place. diff --git a/packages/reflex-components-dataeditor/pyproject.toml b/packages/reflex-components-dataeditor/pyproject.toml index 1a37821a85b..07db0f214d2 100644 --- a/packages/reflex-components-dataeditor/pyproject.toml +++ b/packages/reflex-components-dataeditor/pyproject.toml @@ -16,7 +16,7 @@ classifiers = [ "Programming Language :: Python :: 3.15", ] dependencies = [ - "reflex-base >= 0.10.1.dev0", + "reflex-base >= 0.10.1a1", "reflex-components-core >= 0.10.0", ] diff --git a/packages/reflex-components-lucide/CHANGELOG.md b/packages/reflex-components-lucide/CHANGELOG.md index f4c7426e465..2d28ba5f982 100644 --- a/packages/reflex-components-lucide/CHANGELOG.md +++ b/packages/reflex-components-lucide/CHANGELOG.md @@ -1,3 +1,10 @@ +## v1.1.1 (2026-10-26) + +### Bug Fixes + +- Preserve imports required by icon props and expose the correct Lucide module through `import_var`. ([#7604](https://github.com/reflex-dev/reflex/issues/7604)) + + ## v1.1.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-components-lucide/news/+deep-import-metadata.bugfix.md b/packages/reflex-components-lucide/news/+deep-import-metadata.bugfix.md deleted file mode 100644 index f92e112c6a9..00000000000 --- a/packages/reflex-components-lucide/news/+deep-import-metadata.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Preserve imports required by icon props and expose the correct Lucide module through `import_var`. diff --git a/packages/reflex-components-moment/CHANGELOG.md b/packages/reflex-components-moment/CHANGELOG.md index 9e17223dc6d..cab022cb048 100644 --- a/packages/reflex-components-moment/CHANGELOG.md +++ b/packages/reflex-components-moment/CHANGELOG.md @@ -1,3 +1,10 @@ +## v0.10.1 (2026-10-26) + +### Bug Fixes + +- Expose the `utc`, `calendar`, `from_`, `to`, `ago`, `element`, `fallback`, `filters`, and `renderers` options of `react-moment` 2.x, which previously rendered as CSS, and add `moment_provider` for shared defaults and pooled timers. ([#7591](https://github.com/reflex-dev/reflex/issues/7591)) + + ## v0.10.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-components-moment/news/+7100.bugfix.md b/packages/reflex-components-moment/news/+7100.bugfix.md deleted file mode 100644 index 9f27b68ca6e..00000000000 --- a/packages/reflex-components-moment/news/+7100.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Expose the `utc`, `calendar`, `from_`, `to`, `ago`, `element`, `fallback`, `filters`, and `renderers` options of `react-moment` 2.x, which previously rendered as CSS, and add `moment_provider` for shared defaults and pooled timers. diff --git a/packages/reflex-components-radix/CHANGELOG.md b/packages/reflex-components-radix/CHANGELOG.md index 3fedc2e4040..0a022ef9230 100644 --- a/packages/reflex-components-radix/CHANGELOG.md +++ b/packages/reflex-components-radix/CHANGELOG.md @@ -1,3 +1,22 @@ +## v0.10.1a1 (2026-10-23) + +### Features + +- `checkbox_group` and `checkbox_cards` now support a controlled `value` with `on_value_change`, and the native form props that `radio_group` and `radio_cards` already have. ([#7345](https://github.com/reflex-dev/reflex/issues/7345)) +- Expose `FormData` on the form namespace as `rx.form.FormData`. The `rx.form` stub now declares the namespace as a class, so `rx.form.FormData[str, str]` works in type annotations; calls such as `rx.form(...)` and `rx.form.root(...)` type the same as before. ([#7386](https://github.com/reflex-dev/reflex/issues/7386)) + +### Bug Fixes + +- Avoid Emotion's unsafe `:first-child` SSR warning for Radix Accordion items in development mode. ([#7098](https://github.com/reflex-dev/reflex/issues/7098)) +- `rx.input`'s `auto_complete` now takes the HTML autocomplete value, such as `"off"` or `"email"`, which used to raise a `TypeError`. A bool still works and now becomes `"on"` or `"off"`; before, React dropped it and browser autocomplete stayed on. ([#7418](https://github.com/reflex-dev/reflex/issues/7418)) +- Forward progress values to the Radix Root so its state and ARIA attributes reflect the displayed progress. ([#7431](https://github.com/reflex-dev/reflex/issues/7431)) +- Remove the `as_child` prop from `rx.radio_cards.root` and `rx.radio_cards.item`. Radix Themes does not accept `asChild` on either component: on the root it crashed the page or dropped the grid container, and on the item it did nothing. ([#7555](https://github.com/reflex-dev/reflex/issues/7555)) + +### Miscellaneous + +- Update the Radix primitives to the versions bundled with the current `radix-ui` release that Radix Themes depends on (accordion 1.3.1, dialog 1.3.1, form 0.3.0, progress 1.2.1, slider 1.6.1), so apps load a single copy of each primitive. ([#7645](https://github.com/reflex-dev/reflex/issues/7645)) + + ## v0.10.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-components-radix/news/+checkbox-group-cards-prop-parity.feature.md b/packages/reflex-components-radix/news/+checkbox-group-cards-prop-parity.feature.md deleted file mode 100644 index 0b063eb7537..00000000000 --- a/packages/reflex-components-radix/news/+checkbox-group-cards-prop-parity.feature.md +++ /dev/null @@ -1 +0,0 @@ -`checkbox_group` and `checkbox_cards` now support a controlled `value` with `on_value_change`, and the native form props that `radio_group` and `radio_cards` already have. diff --git a/packages/reflex-components-radix/news/+form-data.feature.md b/packages/reflex-components-radix/news/+form-data.feature.md deleted file mode 100644 index 3c476a63cc8..00000000000 --- a/packages/reflex-components-radix/news/+form-data.feature.md +++ /dev/null @@ -1 +0,0 @@ -Expose `FormData` on the form namespace as `rx.form.FormData`. The `rx.form` stub now declares the namespace as a class, so `rx.form.FormData[str, str]` works in type annotations; calls such as `rx.form(...)` and `rx.form.root(...)` type the same as before. diff --git a/packages/reflex-components-radix/news/+refresh-dependencies.misc.md b/packages/reflex-components-radix/news/+refresh-dependencies.misc.md deleted file mode 100644 index 07af2d75853..00000000000 --- a/packages/reflex-components-radix/news/+refresh-dependencies.misc.md +++ /dev/null @@ -1 +0,0 @@ -Update the Radix primitives to the versions bundled with the current `radix-ui` release that Radix Themes depends on (accordion 1.3.1, dialog 1.3.1, form 0.3.0, progress 1.2.1, slider 1.6.1), so apps load a single copy of each primitive. diff --git a/packages/reflex-components-radix/news/+text-field-auto-complete.bugfix.md b/packages/reflex-components-radix/news/+text-field-auto-complete.bugfix.md deleted file mode 100644 index cd90176b20c..00000000000 --- a/packages/reflex-components-radix/news/+text-field-auto-complete.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`rx.input`'s `auto_complete` now takes the HTML autocomplete value, such as `"off"` or `"email"`, which used to raise a `TypeError`. A bool still works and now becomes `"on"` or `"off"`; before, React dropped it and browser autocomplete stayed on. diff --git a/packages/reflex-components-radix/news/7098.bugfix.md b/packages/reflex-components-radix/news/7098.bugfix.md deleted file mode 100644 index 7229513c9ec..00000000000 --- a/packages/reflex-components-radix/news/7098.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Avoid Emotion's unsafe `:first-child` SSR warning for Radix Accordion items in development mode. diff --git a/packages/reflex-components-radix/news/7431.bugfix.md b/packages/reflex-components-radix/news/7431.bugfix.md deleted file mode 100644 index 0bb699c57d2..00000000000 --- a/packages/reflex-components-radix/news/7431.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Forward progress values to the Radix Root so its state and ARIA attributes reflect the displayed progress. diff --git a/packages/reflex-components-radix/news/7555.bugfix.md b/packages/reflex-components-radix/news/7555.bugfix.md deleted file mode 100644 index a7e20e7142a..00000000000 --- a/packages/reflex-components-radix/news/7555.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Remove the `as_child` prop from `rx.radio_cards.root` and `rx.radio_cards.item`. Radix Themes does not accept `asChild` on either component: on the root it crashed the page or dropped the grid container, and on the item it did nothing. diff --git a/packages/reflex-components-radix/pyproject.toml b/packages/reflex-components-radix/pyproject.toml index efdc3e6a465..a9b7d20f7bf 100644 --- a/packages/reflex-components-radix/pyproject.toml +++ b/packages/reflex-components-radix/pyproject.toml @@ -16,8 +16,8 @@ classifiers = [ "Programming Language :: Python :: 3.15", ] dependencies = [ - "reflex-base >= 0.10.1.dev0", - "reflex-components-core >= 0.10.1.dev0", + "reflex-base >= 0.10.1a1", + "reflex-components-core >= 0.10.1a1", "reflex-components-lucide >= 1.1.0", ] diff --git a/packages/reflex-hosting-cli/CHANGELOG.md b/packages/reflex-hosting-cli/CHANGELOG.md index e67ab446b28..5e11bab4e88 100644 --- a/packages/reflex-hosting-cli/CHANGELOG.md +++ b/packages/reflex-hosting-cli/CHANGELOG.md @@ -1,3 +1,19 @@ +## v0.2.1a1 (2026-10-23) + +### Bug Fixes + +- The `reflex cloud project list` table shows the project tier name instead of the full tier object. Use `--json` to get the full tier. ([#7340](https://github.com/reflex-dev/reflex/issues/7340)) +- Print `reflex cloud apps logs` lines as readable `timestamp [LEVEL] message` text instead of Python dicts. `--json` still prints the structured records, and `--loglevel` no longer hides the log lines. ([#7390](https://github.com/reflex-dev/reflex/issues/7390)) +- Show `reflex login` guidance when initial authentication rejects an access token, including instructions to replace or remove an explicit `REFLEX_ACCESS_TOKEN` or `--token` override. + When `reflex cloud whoami` or a noninteractive cloud command cannot validate a token due to a temporary service or connection failure, suggest retrying instead of replacing credentials. ([#7434](https://github.com/reflex-dev/reflex/issues/7434)) +- `reflex deploy` now waits and retries confirmed scaling conflicts with progress messages, reusing the uploaded build and preserving support for custom backend URL prefixes. It stops on unrelated failures and uncertain writes, and warns when bounds may remain changed after a failed deployment, including server errors and unreadable success responses. ([#7463](https://github.com/reflex-dev/reflex/issues/7463)) +- Authentication validation now reports the HTTP status when the control plane refuses the request, and only suggests trying again later for failures that may succeed on retry (timeouts, HTTP 429 and server errors). ([#7546](https://github.com/reflex-dev/reflex/issues/7546)) + +### Performance + +- Speed up non-interactive deploys by skipping the provider availability request used only for the interactive provider prompt. ([#7452](https://github.com/reflex-dev/reflex/issues/7452)) + + ## v0.2.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-hosting-cli/news/+initial-token-recovery.bugfix.md b/packages/reflex-hosting-cli/news/+initial-token-recovery.bugfix.md deleted file mode 100644 index 8c7cfcc3be5..00000000000 --- a/packages/reflex-hosting-cli/news/+initial-token-recovery.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Show `reflex login` guidance when initial authentication rejects an access token, including instructions to replace or remove an explicit `REFLEX_ACCESS_TOKEN` or `--token` override. -When `reflex cloud whoami` or a noninteractive cloud command cannot validate a token due to a temporary service or connection failure, suggest retrying instead of replacing credentials. diff --git a/packages/reflex-hosting-cli/news/+retry-scaling-conflicts.bugfix.md b/packages/reflex-hosting-cli/news/+retry-scaling-conflicts.bugfix.md deleted file mode 100644 index 479cfbaa946..00000000000 --- a/packages/reflex-hosting-cli/news/+retry-scaling-conflicts.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -`reflex deploy` now waits and retries confirmed scaling conflicts with progress messages, reusing the uploaded build and preserving support for custom backend URL prefixes. It stops on unrelated failures and uncertain writes, and warns when bounds may remain changed after a failed deployment, including server errors and unreadable success responses. diff --git a/packages/reflex-hosting-cli/news/+skip-unused-deploy-provider-check.performance.md b/packages/reflex-hosting-cli/news/+skip-unused-deploy-provider-check.performance.md deleted file mode 100644 index 21f5a0aa644..00000000000 --- a/packages/reflex-hosting-cli/news/+skip-unused-deploy-provider-check.performance.md +++ /dev/null @@ -1 +0,0 @@ -Speed up non-interactive deploys by skipping the provider availability request used only for the interactive provider prompt. diff --git a/packages/reflex-hosting-cli/news/+token-validation-status.bugfix.md b/packages/reflex-hosting-cli/news/+token-validation-status.bugfix.md deleted file mode 100644 index 72e9f5a4531..00000000000 --- a/packages/reflex-hosting-cli/news/+token-validation-status.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Authentication validation now reports the HTTP status when the control plane refuses the request, and only suggests trying again later for failures that may succeed on retry (timeouts, HTTP 429 and server errors). diff --git a/packages/reflex-hosting-cli/news/7340.bugfix.md b/packages/reflex-hosting-cli/news/7340.bugfix.md deleted file mode 100644 index 0743c655c8f..00000000000 --- a/packages/reflex-hosting-cli/news/7340.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -The `reflex cloud project list` table shows the project tier name instead of the full tier object. Use `--json` to get the full tier. diff --git a/packages/reflex-hosting-cli/news/7390.bugfix.md b/packages/reflex-hosting-cli/news/7390.bugfix.md deleted file mode 100644 index 8773f77f201..00000000000 --- a/packages/reflex-hosting-cli/news/7390.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Print `reflex cloud apps logs` lines as readable `timestamp [LEVEL] message` text instead of Python dicts. `--json` still prints the structured records, and `--loglevel` no longer hides the log lines. diff --git a/packages/reflex-hosting-cli/pyproject.toml b/packages/reflex-hosting-cli/pyproject.toml index 7dba1d7d3d6..743ff60ffd2 100644 --- a/packages/reflex-hosting-cli/pyproject.toml +++ b/packages/reflex-hosting-cli/pyproject.toml @@ -34,7 +34,7 @@ dependencies = [ # and raise all three bounds when adopting a new one. The default transport # factory requires the next SDK release; materialization lifts this dev # floor when it publishes. The cap also admits the following dev builds. - "reflex-build-sdk[httpx] >=0.1.1.dev0,<0.1.2.post,!=0.1.2", + "reflex-build-sdk[httpx] >=0.1.1a1,<0.1.2.post,!=0.1.2", "rich >=13,<16", ] diff --git a/packages/reflex-release/CHANGELOG.md b/packages/reflex-release/CHANGELOG.md index 8694f62d3cc..86f23ad134a 100644 --- a/packages/reflex-release/CHANGELOG.md +++ b/packages/reflex-release/CHANGELOG.md @@ -1,3 +1,10 @@ +## v0.2.1 (2026-10-26) + +### Miscellaneous + +- Allow towncrier 26. ([#7645](https://github.com/reflex-dev/reflex/issues/7645)) + + ## v0.2.0 (2026-10-08) ### Breaking Changes diff --git a/packages/reflex-release/news/+refresh-dependencies.misc.md b/packages/reflex-release/news/+refresh-dependencies.misc.md deleted file mode 100644 index 35c0648eb37..00000000000 --- a/packages/reflex-release/news/+refresh-dependencies.misc.md +++ /dev/null @@ -1 +0,0 @@ -Allow towncrier 26. diff --git a/pyproject.toml b/pyproject.toml index ef9d65bb1a3..5b96cff8a22 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,19 +33,19 @@ dependencies = [ "typing_extensions >=4.13.0", "wrapt >=1.17.0,<2.6", "reflex-base >= 0.10.1.dev0", - "reflex-components-code >= 0.10.1.dev0", + "reflex-components-code >= 0.10.1a1", "reflex-components-core >= 0.10.0", - "reflex-components-dataeditor >= 0.10.1.dev0", + "reflex-components-dataeditor >= 0.10.1a1", "reflex-components-gridjs >= 0.10.0", - "reflex-components-lucide >= 1.1.1.dev0", + "reflex-components-lucide >= 1.1.1a1", "reflex-components-markdown >= 0.10.0", - "reflex-components-moment >= 0.10.1.dev0", + "reflex-components-moment >= 0.10.1a1", "reflex-components-plotly >= 0.10.0", - "reflex-components-radix >= 0.10.1.dev0", + "reflex-components-radix >= 0.10.1a1", "reflex-components-react-player >= 0.10.0", "reflex-components-recharts >= 0.10.0", "reflex-components-sonner >= 0.10.0", - "reflex-hosting-cli >= 0.2.1.dev0", + "reflex-hosting-cli >= 0.2.1a1", ] classifiers = [