langchain-ai/langgraph · error · ValueError

Invalid http.app format

Error message

Invalid http.app format: '{http_conf['app']}'. Must be in format './path/to/file.py:attribute_name'

What it means

Config validation in the CLI's validate_config: the http.app entry lacks a ':' separator, so it cannot be parsed into a module path plus a FastAPI/ASGI app attribute. The langgraph server mounts your custom HTTP app by importing exactly that attribute, hence the strict './path/to/file.py:attribute_name' format requirement.

Solutions

  1. Use "http": {"app": "./src/http_app.py:app"} — file path, colon, then the ASGI app variable
  2. Make sure the attribute is a FastAPI/Starlette app object importable at module level
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at libs/cli/langgraph_cli/config.py:540 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of langchain-ai/langgraph@38031739e5 (2026-08-26). Data as JSON: /api/errors/c217a9ae46fe4d62. Report an issue: GitHub.

Appendix: source

Thrown at libs/cli/langgraph_cli/config.py:540

    if auth_conf := config.get("auth"):
        if "path" in auth_conf:
            if ":" not in auth_conf["path"]:
                raise ValueError(
                    f"Invalid auth.path format: '{auth_conf['path']}'. "
                    "Must be in format './path/to/file.py:attribute_name'"
                )
    # Validate encryption config
    if encryption_conf := config.get("encryption"):
        if "path" in encryption_conf:
            if ":" not in encryption_conf["path"]:
                raise ValueError(
                    f"Invalid encryption.path format: '{encryption_conf['path']}'. "
                    "Must be in format './path/to/file.py:attribute_name'"
                )
    if http_conf := config.get("http"):
        if "app" in http_conf:
            if ":" not in http_conf["app"]:
                raise ValueError(
                    f"Invalid http.app format: '{http_conf['app']}'. "
                    "Must be in format './path/to/file.py:attribute_name'"
                )
    if keep_pkg_tools := config.get("keep_pkg_tools"):
        if isinstance(keep_pkg_tools, list):
            for tool in keep_pkg_tools:
                if tool not in _BUILD_TOOLS:
                    raise ValueError(
                        f"Invalid keep_pkg_tools: '{tool}'. "
                        "Must be one of 'pip', 'setuptools', 'wheel'."
                    )
        elif keep_pkg_tools is True:
            pass
        else:
            raise ValueError(
                f"Invalid keep_pkg_tools: '{keep_pkg_tools}'. "
                "Must be bool or list[str] (with values"
                " 'pip', 'setuptools', and/or 'wheel')."

View on GitHub (pinned to 38031739e5)