reflex-dev/reflex · error · TypeError

Unexpected keyword arguments: {tuple(kwargs)}

Error message

Unexpected keyword arguments: {tuple(kwargs)}

What it means

ComputedVar.__init__ accepts a fixed set of keyword arguments (fget, initial_value, cache, deps, auto_deps, interval, backend, plus internal Var kwargs). Any leftover keyword argument after the known ones are consumed raises this TypeError listing the unexpected names. It guards against typos and API drift when constructing ComputedVars directly or via rx.var(...).

Source

Thrown at packages/reflex-base/src/reflex_base/vars/base.py:2346

        if hint is Any:
            raise UntypedComputedVarError(var_name=fget.__name__)
        is_using_fget_name = "_js_expr" not in kwargs
        js_expr = kwargs.pop("_js_expr", fget.__name__ + FIELD_MARKER)
        kwargs.setdefault("_var_type", hint)

        Var.__init__(
            self,
            _js_expr=js_expr,
            _var_type=kwargs.pop("_var_type"),
            _var_data=kwargs.pop(
                "_var_data",
                VarData(field_name=fget.__name__) if is_using_fget_name else None,
            ),
        )

        if kwargs:
            msg = f"Unexpected keyword arguments: {tuple(kwargs)}"
            raise TypeError(msg)

        if backend is None:
            backend = fget.__name__.startswith("_")

        object.__setattr__(self, "_backend", backend)
        object.__setattr__(self, "_initial_value", initial_value)
        object.__setattr__(self, "_cache", cache)
        object.__setattr__(self, "_name", fget.__name__)

        if isinstance(interval, int):
            interval = datetime.timedelta(seconds=interval)

        object.__setattr__(self, "_update_interval", interval)

        object.__setattr__(
            self,
            "_static_deps",
            self._calculate_static_deps(deps),

View on GitHub (pinned to 45b8ed5ab7)

Solutions

  1. Check the signature: valid kwargs are initial_value, cache, deps, auto_deps, interval, backend (and return_type) — remove or rename the offending ones
  2. Compare against the current reflex docs/changelog for rx.var options after upgrading
  3. Use keyword names exactly as documented; let the error message's tuple guide which names to fix

Example fix

# before
@rx.var(cache=True, refresh_interval=1000)
def now(self) -> int: ...

# after
import datetime
@rx.var(cache=True, interval=datetime.timedelta(seconds=1))
def now(self) -> int: ...
Defensive patterns

Strategy: validation

Validate before calling

import inspect
import reflex.vars as rx_vars

VALID = set(inspect.signature(rx_vars.ComputedVar.__init__).parameters) | {'return_type', '_js_expr', '_var_type', '_var_data'}

def check_kwargs(kwargs: dict) -> None:
    bad = set(kwargs) - VALID
    if bad:
        raise ValueError(f'Unknown rx.var kwargs: {bad}')

Try / catch

try:
    decorated = rx.var(**opts)(fn)
except TypeError as e:
    if 'Unexpected keyword arguments' in str(e):
        opts = {k: v for k, v in opts.items() if k in VALID}
        decorated = rx.var(**opts)(fn)
    else:
        raise

Prevention

When it happens

Trigger: Calling rx.var(deps=[...], cache=True, interval=1000, some_typo=True) or ComputedVar(fget, retun_type=int) — any misspelled or removed kwarg; passing kwargs valid in an older Reflex version that were renamed/removed in the current one.

Common situations: Upgrading Reflex across versions where ComputedVar/rx.var kwargs were renamed (e.g. dep→deps, refresh_interval→interval); copy-pasting decorator options from old docs or examples; typos like initial_value= vs initial=.

Related errors


AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28). Data as JSON: /api/errors/6d1ed511d3fa0be3. Report an issue: GitHub.