reflex-dev/reflex · error · ValueError

Missing value for environment variable

Error message

Missing value for environment variable {field.name} and no default value found

What it means

Thrown when building a dataclass-driven config/state from environment variables and a required field has neither an environment value nor a declared default or default_factory. The fallback lookup in get_default_value_for_field finds dataclasses.MISSING for both, so it raises ValueError naming the field.

Solutions

  1. Set the missing environment variable named in the message (export it or add it to .env)
  2. Give the dataclass field a default or default_factory if it's optional
  3. Add a startup check listing required env vars before the app boots

Example fix

# before
@dataclasses.dataclass
class Settings:
    api_key: str  # no default
# shell: API_KEY unset -> ValueError
# after (option 1)
export API_KEY=...
# after (option 2)
@dataclasses.dataclass
class Settings:
    api_key: str = ""
Defensive patterns

Strategy: validation

Validate before calling

import os
required = [f.name for f in dataclasses.fields(Settings)
            if f.default is dataclasses.MISSING and f.default_factory is dataclasses.MISSING]
missing = [n for n in required if os.environ.get(n) is None]
if missing:
    raise SystemExit(f"Missing env vars: {missing}")

Type guard

null

Try / catch

try:
    Settings.from_env()
except ValueError as e:
    if "Missing value for environment variable" in str(e):
        # prompt or apply defaults
        ...

Prevention

When it happens

Trigger: A dataclass field without a default whose environment variable is unset, passed to the env-parsing machinery (e.g. update_from_env / get_default_value_for_field on fields like a required API key).

Common situations: Deploying without setting required env vars (DATABASE_URL, API keys), renaming env vars between versions, or missing .env files in CI/production.

Understand the failure class

Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.

Related errors


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

Appendix: source

Thrown at packages/reflex-base/src/reflex_base/environment.py:51

def get_default_value_for_field(field: dataclasses.Field) -> Any:
    """Get the default value for a field.

    Args:
        field: The field.

    Returns:
        The default value.

    Raises:
        ValueError: If no default value is found.
    """
    if field.default != dataclasses.MISSING:
        return field.default
    if field.default_factory != dataclasses.MISSING:
        return field.default_factory()
    msg = f"Missing value for environment variable {field.name} and no default value found"
    raise ValueError(msg)


# TODO: Change all interpret_.* signatures to value: str, field: dataclasses.Field once we migrate rx.Config to dataclasses
def interpret_boolean_env(value: str, field_name: str) -> bool:
    """Interpret a boolean environment variable value.

    Args:
        value: The environment variable value.
        field_name: The field name.

    Returns:
        The interpreted value.

    Raises:
        EnvironmentVarValueError: If the value is invalid.
    """
    true_values = ["true", "1", "yes", "y"]
    false_values = ["false", "0", "no", "n"]

View on GitHub (pinned to 45b8ed5ab7)