Avatar for the reflex-dev user
reflex-dev
reflex
BlogDocsChangelog

Performance History

Latest Results

Merge branch 'main' into claude/modest-hypatia-lm4kG
claude/modest-hypatia-lm4kG
8 hours ago
refactor(memo): promote memo out of `rx._x.memo` into `rx.memo` (#6517) * refactor: promote memo out of experimental into rx.memo Move the memo/custom-component machinery from ``reflex/experimental/memo.py`` and ``reflex_base.components.component`` into a dedicated ``reflex_base.components.memo`` module and expose it as ``rx.memo``. ``rx.experimental.memo`` becomes a deprecated alias, and the legacy ``CustomComponent`` index path in the compiler is dropped now that all memos declare their library per-file. * feat(memo): support rx.EventHandler params in component memos Component-returning `@rx._x.memo` functions can now declare `rx.EventHandler[...]` (and bare `rx.EventHandler`) parameters, which compile to destructured JSX prop callbacks and are wired through `EventChain` at the call site. Var-returning memos still reject event handlers. Refactors per-parameter behavior into a `_MemoParamSpec` table keyed by a new `MemoParamKind` enum (VALUE / CHILDREN / REST / EVENT_TRIGGER), so each kind owns its classification, validation, placeholder construction, call-site binding, and JSX signature emission. Adds a `_MemoCallBinding` accumulator so `_post_init` no longer special-cases prop vs. rest vs. event routing. * chore(memo): annotate rx.memo return types and tighten arrow_svg sig Add explicit rx.Component return annotations to memoized helpers across docs and internal packages, and narrow arrow_svg_component's class_name to Var[str] now that rx.memo handles the conversion. * chore(memo): re-add experimental memo shim as deprecated alias Restore reflex/experimental/memo.py as a thin module redirect to reflex_base.components.memo so existing rx.experimental.memo imports keep working with a deprecation warning. * refactor(memo): drop Experimental prefix from memo registry and types Rename ExperimentalMemo* classes, EXPERIMENTAL_MEMOS registry, and related helpers/tests to plain Memo*/MEMOS now that memo is no longer experimental. Move integration and unit tests out of experimental/ to mirror the new module location. * spellfix * feat(vars): expose EMPTY_VAR_STR and EMPTY_VAR_INT as memo-friendly defaults Reusable Var-typed empty-value constants so memo signatures can spell strict defaults without per-call-site `Var.create(...)` (which trips B008) or bespoke module-level singletons. Updates the memo doc and the in-tree memos that previously rolled their own empty Var. * chore(memo): tidy compile_app splats and inline-import cleanup Drop redundant tuple() wraps around dict.values() splats in compile_app, and hoist `import inspect` to module scope in the memo unit tests. Refresh stale "experimental memo" wording in the memo test docstrings now that the rename has landed. * feat(memo): support self-referencing memos via name binding during eval Bind the memo wrapper to the function's name (in both module globals and any matching free-variable cell) while the body is eagerly evaluated, so a memo can recursively call itself — e.g. a tree node component that renders its children through `rx.foreach`. Also refresh remaining `@rx._x.memo` references in error messages and docstrings now that the public name is `@rx.memo`. * chore: update pyi hash for experimental memo * feat(memo): soft-deprecate missing rx.memo annotations instead of erroring Missing return annotations default to `rx.Component`, and unannotated parameters default to `rx.Var[Any]` (or `rx.Var[Component]` for `children`), emitting a deprecation warning slated for removal in 1.0. Lets downstream users keep compiling while they migrate to explicit annotations. * feat(memo): suggest concrete return type in soft-deprecation warning Infer the body's return type during memo eval and surface the public `rx`/`rxe` qualname (e.g. `rxe.dnd.Draggable`) in the deprecation message so users get a copy-pasteable annotation instead of the generic hint. Update docs to use the inferred annotations. * chore: update pyi hash for experimental memo * refactor(memo): drop empty $/utils/components index file Per-memo wrappers import from `$/utils/components/<name>` directly, so the empty top-level index module had no callers. Remove the emission and the now-unused `memo_index_template` and `get_components_path` helpers. * fix(memo): drop $/utils/components from window bundle The bundled `$/utils/components` specifier emitted a root.jsx import from the now-removed index module, breaking the production build with `Could not load utils/components (Is a directory)`. The bare path no longer resolves — each memo lives at `$/utils/components/<name>` — so remove it from the default window bundle. * add news fragments --------- Co-authored-by: Masen Furer <m_github@0x26.net>
main
10 hours ago
Merge branch 'main' into fix-foreach-docs
fix-foreach-docs
10 hours ago
Update shared banner for Agent Toolkit launch
agent-toolkit-launch-banner
10 hours ago
add news fragments
FarhanAliRaza:non-exp-memo
11 hours ago

Latest Branches

CodSpeed Performance Gauge
0%
fix(recharts): bundle es-toolkit/compat as ESM (#6561)#6567
8 hours ago
9772e5e
claude/modest-hypatia-lm4kG
CodSpeed Performance Gauge
0%
10 hours ago
7fd5c91
fix-foreach-docs
CodSpeed Performance Gauge
0%
Update shared banner for Agent Toolkit launch#6566
10 hours ago
ebb80f6
agent-toolkit-launch-banner
© 2026 CodSpeed Technology
Home Terms Privacy Docs