OpenBB-finance/OpenBB · error · ValueError
HOME or USERPROFILE environment variable not set.
Error message
HOME or USERPROFILE environment variable not set.
What it means
ValueError raised at import time of openbb_platform_api.main when neither HOME nor USERPROFILE is set in the environment. The module needs a home directory to locate ~/.openbb_platform/user_settings.json and widget_settings.json, so it refuses to start without one.
Source
Thrown at openbb_platform/extensions/platform_api/openbb_platform_api/main.py:43
from .utils.merge_agents import get_additional_agents, has_additional_agents
from .utils.merge_apps import get_additional_apps, has_additional_apps
logger = logging.getLogger("openbb_platform_api")
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
formatter = logging.Formatter("\n%(message)s\n")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
# Adds the OpenBB Environment variables to the script process.
Env()
HOME = os.environ.get("HOME") or os.environ.get("USERPROFILE")
if not HOME:
raise ValueError("HOME or USERPROFILE environment variable not set.")
CURRENT_USER_SETTINGS = os.path.join(HOME, ".openbb_platform", "user_settings.json")
# Widget filtering is optional and can be used to exclude widgets from the widgets.json file
# Alternatively, you can supply a JSON-encoded list of API paths to ignore.
WIDGET_SETTINGS = os.path.join(HOME, ".openbb_platform", "widget_settings.json")
kwargs = parse_args()
_app = kwargs.pop("app", None)
if _app:
app = _app
WIDGETS_PATH = kwargs.pop("widgets-json", None)
APPS_PATH = kwargs.pop("apps-json", None)
EDITABLE = kwargs.pop("editable", None) is True or WIDGETS_PATH is not None
DEFAULT_APPS_PATH = (
Path(__file__).absolute().parent.joinpath("assets").joinpath("default_apps.json")
)
AGENTS_PATH = kwargs.pop("agents-json", None)View on GitHub (pinned to 3e071fcc2c)
Solutions
- Set HOME in the environment: docker run -e HOME=/root ... or ENV HOME=/root in the Dockerfile
- For systemd services add Environment=HOME=/var/lib/myapp (and create that directory)
- If launching via subprocess, pass env={**os.environ, "HOME": os.path.expanduser("~")} instead of env={}
Example fix
# before
subprocess.run([sys.executable, "-m", "openbb_platform_api"], env={})
# after
subprocess.run([sys.executable, "-m", "openbb_platform_api"], env={**os.environ, "HOME": "/home/user"}) Defensive patterns
Strategy: validation
Validate before calling
import os
if not (os.environ.get("HOME") or os.environ.get("USERPROFILE")):
os.environ["HOME"] = os.path.expanduser("~") or "/tmp"
# only then import
import openbb_platform_api.main # noqa: E402 Type guard
def home_env_available() -> bool:
import os
return bool(os.environ.get("HOME") or os.environ.get("USERPROFILE")) Try / catch
try:
import openbb_platform_api.main as main
except ValueError as e:
if "HOME or USERPROFILE" in str(e):
import os
os.environ.setdefault("HOME", "/tmp")
import openbb_platform_api.main as main # retry once
else:
raise Prevention
- Set ENV HOME in Dockerfiles that run the platform API
- For systemd services add Environment=HOME=... and create the directory
- Never pass env={} to subprocess without re-injecting HOME
When it happens
Trigger: Running under a minimal Docker image, a cron job, a systemd service, or a CI runner where the user has no home directory env (common with UserDirective=nobody or unset *clear_environment* settings). Importing openbb_platform_api.main in such an environment fails immediately.
Common situations: Docker containers with an empty env, scratch/distroless images, CI containers running as uid without HOME, Kubernetes pods with env.value clearing, subprocess calls passing a scrubbed env (env={}).
Related errors
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/b44cab5cb550a72b.
Report an issue: GitHub.