From 34b0147c1bbdbef2a661942d3e0d06f6228cba61 Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 3 Jun 2026 16:32:37 -0700 Subject: [PATCH 1/2] Publish changelogs for reflex v0.9.4 release --- CHANGELOG.md | 18 ++++++++++++++++++ CONTRIBUTING.md | 17 ++++++++++++----- news/3806.feature.md | 1 - news/6350.misc.md | 1 - news/6517.deprecation.md | 1 - news/6517.feature.md | 1 - news/6592.misc.md | 1 - news/6598.deprecation.md | 1 - news/6598.feature.1.md | 1 - news/6598.feature.md | 1 - packages/reflex-base/CHANGELOG.md | 19 +++++++++++++++++++ ...+memo-base-prop-passthrough.deprecation.md | 1 - packages/reflex-base/news/3806.feature.md | 1 - packages/reflex-base/news/6517.feature.md | 1 - packages/reflex-base/news/6570.bugfix.md | 1 - packages/reflex-base/news/6571.bugfix.md | 2 -- packages/reflex-base/news/6592.misc.md | 1 - .../reflex-components-markdown/CHANGELOG.md | 5 +++++ .../news/6517.misc.md | 1 - packages/reflex-components-radix/CHANGELOG.md | 3 +++ packages/reflex-docgen/CHANGELOG.md | 3 +++ 21 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 news/3806.feature.md delete mode 100644 news/6350.misc.md delete mode 100644 news/6517.deprecation.md delete mode 100644 news/6517.feature.md delete mode 100644 news/6592.misc.md delete mode 100644 news/6598.deprecation.md delete mode 100644 news/6598.feature.1.md delete mode 100644 news/6598.feature.md create mode 100644 packages/reflex-base/CHANGELOG.md delete mode 100644 packages/reflex-base/news/+memo-base-prop-passthrough.deprecation.md delete mode 100644 packages/reflex-base/news/3806.feature.md delete mode 100644 packages/reflex-base/news/6517.feature.md delete mode 100644 packages/reflex-base/news/6570.bugfix.md delete mode 100644 packages/reflex-base/news/6571.bugfix.md delete mode 100644 packages/reflex-base/news/6592.misc.md create mode 100644 packages/reflex-components-markdown/CHANGELOG.md delete mode 100644 packages/reflex-components-markdown/news/6517.misc.md create mode 100644 packages/reflex-components-radix/CHANGELOG.md create mode 100644 packages/reflex-docgen/CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000000..6ca57661d30 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +## v0.9.4 (2026-06-03) + +### Deprecations + +- `rx._x.memo` is deprecated in favor of `rx.memo`. The old name remains a working alias for now; update imports to use `rx.memo` directly. ([#6517](https://github.com/reflex-dev/reflex/issues/6517)) +- `@rx.memo` now expects each parameter to be annotated as `rx.Var[...]` (or `rx.RestProp`/`rx.EventHandler`) and the function to declare an `rx.Component` or `rx.Var[...]` return type. Memos that still use bare Python types (e.g. `name: str`) or omit the return annotation keep working — the values are coerced to `rx.Var[...]`/`rx.Component` and a deprecation warning points at the parameters and return type that need explicit annotations — but this fallback will be removed in 1.0. ([#6598](https://github.com/reflex-dev/reflex/issues/6598)) + +### Features + +- Added `rx._x.hybrid_property`, a property decorator usable on State classes that works like a normal Python property for backend access while also rendering on the frontend at class level. Use the same method for both, or register a separate frontend implementation with `@.var`. ([#3806](https://github.com/reflex-dev/reflex/issues/3806)) +- Promoted the component memo system to a first-class `rx.memo` API. Memo-decorated components now accept `rx.EventHandler` parameters and carry annotated return types so they type-check correctly at call sites. ([#6517](https://github.com/reflex-dev/reflex/issues/6517)) +- Added `rx.EMPTY_VAR_COMPONENT`, an empty-component `rx.Var[rx.Component]` sentinel for use as a default on `@rx.memo` `children` slots (and any `rx.Var[rx.Component]` prop) — the component counterpart to `rx.EMPTY_VAR_STR` and `rx.EMPTY_VAR_INT`. ([#6598](https://github.com/reflex-dev/reflex/issues/6598)) +- `@rx.memo` now evaluates the decorated function body lazily — on first use (component instantiation) or at compile time — instead of at import time. This speeds up startup and lets a memo reference modules that aren't fully imported yet, sidestepping circular-import errors during decoration. Body-dependent errors (e.g. a var-returning memo that uses hooks or non-bundled imports) now surface when the memo is first used or compiled rather than at import. ([#6598](https://github.com/reflex-dev/reflex/issues/6598)) + +### Miscellaneous + +- Introduced towncrier-based changelog management. Each PR that changes package source now adds a fragment under the affected package's `news/` directory; fragments are assembled into `CHANGELOG.md` at release time. See CONTRIBUTING.md for the full workflow. ([#6350](https://github.com/reflex-dev/reflex/issues/6350)) +- Removed the "choose templates" option from `reflex init`. The interactive prompt now offers only a blank app or the AI builder, and no longer opens the open-source templates page. ([#6592](https://github.com/reflex-dev/reflex/issues/6592)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 613d16f752d..290f5bfaded 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -88,6 +88,17 @@ If you don't yet know the PR number, use an [orphan fragment](https://towncrier. **Skipping the fragment check:** for PRs that are genuinely not user-facing (CI-only tweaks, script fixes, test-only changes), apply the `skip-changelog` label on the PR to bypass the changelog CI check. +**Publishing CHANGELOG.md**: This step should be completed by maintainers during the release process. If you have access to publish a release, you can run the following command to generate the `CHANGELOG.md` file. + +```bash +for package in . packages/*; do + if ls $package/news/*.md > /dev/null 2>&1; then + echo "Generating changelog for $package..." + uv run towncrier build --config pyproject.toml --draft --dir "$package" + fi +done +``` + ## ✅ Making a PR Once you solve a current issue or improvement to Reflex, you can make a PR, and we will review the changes. @@ -163,11 +174,7 @@ Paths must start with `/`, have no trailing slash, and are prefix-matched. An em ## Editing Templates -To edit the templates in Reflex you can do so in two way. - -Change to the basic `blank` template can be done in the `reflex/.templates/apps/blank` directory. - -Others templates can be edited in their own repository. For example the `sidebar` template can be found in the [`reflex-sidebar`](https://github.com/reflex-dev/sidebar-template) repository. +Changes to the basic `blank` template can be done in the `reflex/.templates/apps/blank` directory. ## Other Notes diff --git a/news/3806.feature.md b/news/3806.feature.md deleted file mode 100644 index 6033859a10b..00000000000 --- a/news/3806.feature.md +++ /dev/null @@ -1 +0,0 @@ -Added `rx._x.hybrid_property`, a property decorator usable on State classes that works like a normal Python property for backend access while also rendering on the frontend at class level. Use the same method for both, or register a separate frontend implementation with `@.var`. diff --git a/news/6350.misc.md b/news/6350.misc.md deleted file mode 100644 index 81d7c7c9941..00000000000 --- a/news/6350.misc.md +++ /dev/null @@ -1 +0,0 @@ -Introduced towncrier-based changelog management. Each PR that changes package source now adds a fragment under the affected package's `news/` directory; fragments are assembled into `CHANGELOG.md` at release time. See CONTRIBUTING.md for the full workflow. diff --git a/news/6517.deprecation.md b/news/6517.deprecation.md deleted file mode 100644 index f1dc80e0562..00000000000 --- a/news/6517.deprecation.md +++ /dev/null @@ -1 +0,0 @@ -`rx._x.memo` is deprecated in favor of `rx.memo`. The old name remains a working alias for now; update imports to use `rx.memo` directly. diff --git a/news/6517.feature.md b/news/6517.feature.md deleted file mode 100644 index 60075751573..00000000000 --- a/news/6517.feature.md +++ /dev/null @@ -1 +0,0 @@ -Promoted the component memo system to a first-class `rx.memo` API. Memo-decorated components now accept `rx.EventHandler` parameters and carry annotated return types so they type-check correctly at call sites. diff --git a/news/6592.misc.md b/news/6592.misc.md deleted file mode 100644 index ab18e878ab1..00000000000 --- a/news/6592.misc.md +++ /dev/null @@ -1 +0,0 @@ -Removed the "choose templates" option from `reflex init`. The interactive prompt now offers only a blank app or the AI builder, and no longer opens the open-source templates page. diff --git a/news/6598.deprecation.md b/news/6598.deprecation.md deleted file mode 100644 index e967f0216ce..00000000000 --- a/news/6598.deprecation.md +++ /dev/null @@ -1 +0,0 @@ -`@rx.memo` now expects each parameter to be annotated as `rx.Var[...]` (or `rx.RestProp`/`rx.EventHandler`) and the function to declare an `rx.Component` or `rx.Var[...]` return type. Memos that still use bare Python types (e.g. `name: str`) or omit the return annotation keep working — the values are coerced to `rx.Var[...]`/`rx.Component` and a deprecation warning points at the parameters and return type that need explicit annotations — but this fallback will be removed in 1.0. diff --git a/news/6598.feature.1.md b/news/6598.feature.1.md deleted file mode 100644 index 4e5a5038549..00000000000 --- a/news/6598.feature.1.md +++ /dev/null @@ -1 +0,0 @@ -Added `rx.EMPTY_VAR_COMPONENT`, an empty-component `rx.Var[rx.Component]` sentinel for use as a default on `@rx.memo` `children` slots (and any `rx.Var[rx.Component]` prop) — the component counterpart to `rx.EMPTY_VAR_STR` and `rx.EMPTY_VAR_INT`. diff --git a/news/6598.feature.md b/news/6598.feature.md deleted file mode 100644 index b9e67fb847b..00000000000 --- a/news/6598.feature.md +++ /dev/null @@ -1 +0,0 @@ -`@rx.memo` now evaluates the decorated function body lazily — on first use (component instantiation) or at compile time — instead of at import time. This speeds up startup and lets a memo reference modules that aren't fully imported yet, sidestepping circular-import errors during decoration. Body-dependent errors (e.g. a var-returning memo that uses hooks or non-bundled imports) now surface when the memo is first used or compiled rather than at import. diff --git a/packages/reflex-base/CHANGELOG.md b/packages/reflex-base/CHANGELOG.md new file mode 100644 index 00000000000..ed87900f922 --- /dev/null +++ b/packages/reflex-base/CHANGELOG.md @@ -0,0 +1,19 @@ +## v0.9.4 (2026-06-03) + +### Deprecations + +- Component-returning `@rx.memo` again accepts `key` without an `rx.RestProp` (with a deprecation warning), so `rx.foreach` call sites that set the react `key` keep working; this fallback is removed in 1.0. Other base props (`id`, `class_name`, `style`, `custom_attrs`, `ref`) and identity fields like `tag`/`library` still raise — declare an `rx.RestProp` to forward them. + +### Features + +- Dependency tracking now follows through hybrid properties, so computed vars that read a `hybrid_property` correctly recompute when the underlying state vars change. ([#3806](https://github.com/reflex-dev/reflex/issues/3806)) +- The component memo implementation now lives in `reflex_base.components.memo` and is exported as `rx.memo`. Added `EMPTY_VAR_STR` and `EMPTY_VAR_INT` sentinel vars as memo-friendly defaults. ([#6517](https://github.com/reflex-dev/reflex/issues/6517)) + +### Bug Fixes + +- Pin `es-toolkit@1.46.1` via package overrides to work around upstream breakage in recharts and es-toolkit. ([#6570](https://github.com/reflex-dev/reflex/issues/6570)) +- Unpin `es-toolkit@1.46.1` via package overrides and bump vite to 8.0.14 to work around upstream breakage in recharts and es-toolkit. ([#6571](https://github.com/reflex-dev/reflex/issues/6571)) + +### Miscellaneous + +- Removed the `Templates.CHOOSE_TEMPLATES` and `Templates.REFLEX_TEMPLATES_URL` constants, which supported the now-removed open-source templates `reflex init` option. ([#6592](https://github.com/reflex-dev/reflex/issues/6592)) diff --git a/packages/reflex-base/news/+memo-base-prop-passthrough.deprecation.md b/packages/reflex-base/news/+memo-base-prop-passthrough.deprecation.md deleted file mode 100644 index 3c667d9a940..00000000000 --- a/packages/reflex-base/news/+memo-base-prop-passthrough.deprecation.md +++ /dev/null @@ -1 +0,0 @@ -Component-returning `@rx.memo` again accepts `key` without an `rx.RestProp` (with a deprecation warning), so `rx.foreach` call sites that set the react `key` keep working; this fallback is removed in 1.0. Other base props (`id`, `class_name`, `style`, `custom_attrs`, `ref`) and identity fields like `tag`/`library` still raise — declare an `rx.RestProp` to forward them. diff --git a/packages/reflex-base/news/3806.feature.md b/packages/reflex-base/news/3806.feature.md deleted file mode 100644 index e75253bccca..00000000000 --- a/packages/reflex-base/news/3806.feature.md +++ /dev/null @@ -1 +0,0 @@ -Dependency tracking now follows through hybrid properties, so computed vars that read a `hybrid_property` correctly recompute when the underlying state vars change. diff --git a/packages/reflex-base/news/6517.feature.md b/packages/reflex-base/news/6517.feature.md deleted file mode 100644 index def10f89484..00000000000 --- a/packages/reflex-base/news/6517.feature.md +++ /dev/null @@ -1 +0,0 @@ -The component memo implementation now lives in `reflex_base.components.memo` and is exported as `rx.memo`. Added `EMPTY_VAR_STR` and `EMPTY_VAR_INT` sentinel vars as memo-friendly defaults. diff --git a/packages/reflex-base/news/6570.bugfix.md b/packages/reflex-base/news/6570.bugfix.md deleted file mode 100644 index 2b114322b49..00000000000 --- a/packages/reflex-base/news/6570.bugfix.md +++ /dev/null @@ -1 +0,0 @@ -Pin `es-toolkit@1.46.1` via package overrides to work around upstream breakage in recharts and es-toolkit. diff --git a/packages/reflex-base/news/6571.bugfix.md b/packages/reflex-base/news/6571.bugfix.md deleted file mode 100644 index 0a4c14d0b5f..00000000000 --- a/packages/reflex-base/news/6571.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Unpin `es-toolkit@1.46.1` via package overrides and bump vite to 8.0.14 to work around upstream breakage in recharts and es-toolkit. - diff --git a/packages/reflex-base/news/6592.misc.md b/packages/reflex-base/news/6592.misc.md deleted file mode 100644 index ba3c4c18eca..00000000000 --- a/packages/reflex-base/news/6592.misc.md +++ /dev/null @@ -1 +0,0 @@ -Removed the `Templates.CHOOSE_TEMPLATES` and `Templates.REFLEX_TEMPLATES_URL` constants, which supported the now-removed open-source templates `reflex init` option. diff --git a/packages/reflex-components-markdown/CHANGELOG.md b/packages/reflex-components-markdown/CHANGELOG.md new file mode 100644 index 00000000000..2e3cf3f0193 --- /dev/null +++ b/packages/reflex-components-markdown/CHANGELOG.md @@ -0,0 +1,5 @@ +## v0.9.3 (2026-06-03) + +### Miscellaneous + +- Updated markdown custom-code collection to use the new `rx.memo` component API instead of the removed `CustomComponent` handling. ([#6517](https://github.com/reflex-dev/reflex/issues/6517)) diff --git a/packages/reflex-components-markdown/news/6517.misc.md b/packages/reflex-components-markdown/news/6517.misc.md deleted file mode 100644 index 44bf84b1215..00000000000 --- a/packages/reflex-components-markdown/news/6517.misc.md +++ /dev/null @@ -1 +0,0 @@ -Updated markdown custom-code collection to use the new `rx.memo` component API instead of the removed `CustomComponent` handling. diff --git a/packages/reflex-components-radix/CHANGELOG.md b/packages/reflex-components-radix/CHANGELOG.md new file mode 100644 index 00000000000..c0587ee025e --- /dev/null +++ b/packages/reflex-components-radix/CHANGELOG.md @@ -0,0 +1,3 @@ +## v0.9.4 (2026-06-03) + +No significant changes. diff --git a/packages/reflex-docgen/CHANGELOG.md b/packages/reflex-docgen/CHANGELOG.md new file mode 100644 index 00000000000..9d2cf88e357 --- /dev/null +++ b/packages/reflex-docgen/CHANGELOG.md @@ -0,0 +1,3 @@ +## v0.9.2 (2026-06-03) + +No significant changes. From d53a90a134ea01458ac8fde61be2d4726bd5ec85 Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 3 Jun 2026 16:35:25 -0700 Subject: [PATCH 2/2] missed this change in previous commit --- CONTRIBUTING.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 290f5bfaded..178f15ade49 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -88,15 +88,12 @@ If you don't yet know the PR number, use an [orphan fragment](https://towncrier. **Skipping the fragment check:** for PRs that are genuinely not user-facing (CI-only tweaks, script fixes, test-only changes), apply the `skip-changelog` label on the PR to bypass the changelog CI check. -**Publishing CHANGELOG.md**: This step should be completed by maintainers during the release process. If you have access to publish a release, you can run the following command to generate the `CHANGELOG.md` file. +**Publishing CHANGELOG.md**: This step should be completed by maintainers during +the release process. If you have access to publish a release, you can run the +following command to generate the `CHANGELOG.md` file in each subpackage. ```bash -for package in . packages/*; do - if ls $package/news/*.md > /dev/null 2>&1; then - echo "Generating changelog for $package..." - uv run towncrier build --config pyproject.toml --draft --dir "$package" - fi -done +uv run towncrier build --config pyproject.toml --version v0.9.4 ``` ## ✅ Making a PR