reflex-dev/reflex · error · TypeError
`@rx.memo` does not support `**kwargs` in `{fn_name}`.
Error message
`@rx.memo` does not support `**kwargs` in `{fn_name}`. What it means
`@rx.memo` rejects `**kwargs` (VAR_KEYWORD) parameters because it needs a static, known set of props to generate the compiled component definition. Arbitrary keyword arguments cannot be mapped to typed props or rest props.
Source
Thrown at packages/reflex-base/src/reflex_base/components/memo.py:1362
def _check_parameter_kind(parameter: inspect.Parameter, fn_name: str) -> None:
"""Reject Python parameter kinds (``*args`` / ``**kwargs`` / positional-only)
that memo does not support.
Args:
parameter: The parameter to check.
fn_name: The function name for error messages.
Raises:
TypeError: If the parameter uses an unsupported kind.
"""
if parameter.kind is inspect.Parameter.VAR_POSITIONAL:
msg = f"`@rx.memo` does not support `*args` in `{fn_name}`."
raise TypeError(msg)
if parameter.kind is inspect.Parameter.VAR_KEYWORD:
msg = f"`@rx.memo` does not support `**kwargs` in `{fn_name}`."
raise TypeError(msg)
if parameter.kind is inspect.Parameter.POSITIONAL_ONLY:
msg = f"`@rx.memo` does not support positional-only parameters in `{fn_name}`."
raise TypeError(msg)
def _classify_parameter(
annotation: Any, param_name: str, fn_name: str
) -> tuple[MemoParamKind, Any]:
"""Walk ``_CLASSIFICATION_ORDER`` and return the first matching kind.
Args:
annotation: The parameter annotation.
param_name: The parameter name (some kinds care, e.g. ``children``).
fn_name: The function name for error messages.
Returns:
The matched ``(kind, kind_data)``.
View on GitHub (pinned to 45b8ed5ab7)
Solutions
- Replace `**kwargs` with an `rx.RestProp` parameter, which is the supported way to capture extra props in a memo.
- Declare every prop you actually pass explicitly with `rx.Var[...]` annotations.
- Drop `**kwargs` entirely if all inputs are known.
Example fix
# before
@rx.memo
def card(title: rx.Var[str], **kwargs):
...
# after
@rx.memo
def card(title: rx.Var[str], extra: rx.RestProp):
... Defensive patterns
Strategy: validation
Validate before calling
import inspect
def memo_signature_ok(fn) -> bool:
return all(
p.kind is not inspect.Parameter.VAR_KEYWORD
for p in inspect.signature(fn).parameters.values()
) Prevention
- Use rx.RestProp for prop spreading instead of **kwargs.
- Keep plain **kwargs helpers outside @rx.memo.
- Annotate all props with rx.Var[...].
When it happens
Trigger: Decorating a function with `@rx.memo` whose signature includes `**kwargs`, e.g. `@rx.memo def card(title: rx.Var[str], **kwargs): ...`. Raised at decoration time during parameter analysis.
Common situations: Porting a component factory that accepted flexible props via `**kwargs`; combining a typed prop list with a catch-all for extras; generated code that appends `**kwargs` for forward compatibility.
Related errors
- `@rx.memo` does not support `*args` in `{fn_name}`.
- `@rx.memo` does not support positional-only parameters in `{
- `{definition.python_name}` captures rest props from extra ke
- All parameters of `{fn_name}` must be annotated as `rx.Var[.
- Component-returning `@rx.memo` `{fn.__name__}` must return a
AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28).
Data as JSON: /api/errors/a7318d5efc1a7e0e.
Report an issue: GitHub.