Environment Variables

Bodhi App reads its configuration from environment variables, a settings.yaml file under $BODHI_HOME, the SQLite database (bodhi.sqlite), and built-in defaults. This page is the alphabetical lookup table — for the order in which those sources are merged, see Settings precedence.

A handful of variables can be edited from the running app's /ui/settings/ page. The vast majority must be set before the process starts (typically via docker run -e ..., a Docker Compose file, or a shell export). Variables marked as Editable at runtime survive process restarts via the database; everything else is re-read from the environment on every boot.

Multi-tenant deployment is out of scope for these docs — the BODHI_MULTITENANT_* entries are listed for completeness only.

Quick jump

Core

Variable Type Default Description Editable at runtime
BODHI_APP_TYPE string set by build Application form factor — native (Tauri desktop) or container (Docker / standalone server). Resolved at build time, not user-editable. —
BODHI_COMMIT_SHA string set by build Git commit the binary was built from. Surfaced in the UI footer for support. —
BODHI_DEPLOYMENT string standalone Deployment mode. standalone (default) for desktop and single-tenant Docker. multi_tenant exists for hosted deployments and is out of scope here. —
BODHI_ENV_TYPE string set by build production or development. Affects log-source selection and debug helpers. —
BODHI_HOME path ~/.bodhi (desktop), /data/bodhi (Docker images) Root directory for all Bodhi state — settings, DBs, logs, secrets. Must be writable. —
BODHI_VERSION string set by build App version string. —

Network

The BODHI_HOST / BODHI_PORT / BODHI_SCHEME triple controls where the server binds. The BODHI_PUBLIC_* triple controls how the server identifies itself in OAuth redirect URLs, generated callback links, and the embedded Swagger spec — useful when Bodhi sits behind a reverse proxy.

Variable Type Default Description Editable at runtime
BODHI_CANONICAL_REDIRECT bool true When true, requests that arrive on a non-canonical host are redirected to the public URL. Disable when fronting Bodhi with a load balancer that already canonicalizes. —
BODHI_HOST string 0.0.0.0 Bind address for the HTTP listener. —
BODHI_PORT u16 1135 Port the HTTP listener binds to. —
BODHI_PUBLIC_HOST string falls back to BODHI_HOST The hostname clients use to reach Bodhi (e.g. bodhi.example.com behind a proxy). Used to build OAuth callback URLs. —
BODHI_PUBLIC_PORT u16 falls back to BODHI_PORT Public-facing port. Set to 443 when terminating TLS at a proxy. —
BODHI_PUBLIC_SCHEME string falls back to BODHI_SCHEME Public-facing scheme — set to https when behind a TLS-terminating proxy. —
BODHI_SCHEME string http Bind scheme. The server itself currently serves plain HTTP and expects TLS to be terminated upstream. —

Auth

Variable Type Default Description Editable at runtime
BODHI_AUTH_REALM string bodhi (production), bodhi-dev (development) Keycloak realm under the auth provider hosting Bodhi's identity. —
BODHI_AUTH_URL string https://id.getbodhi.app Base URL of the OAuth2 / OIDC provider. Bodhi composes the issuer, login, and token URLs from this plus BODHI_AUTH_REALM. —
BODHI_ENCRYPTION_KEY string derived from OS keychain (desktop) Master key used to encrypt secrets at rest (API model keys, MCP credentials). On Docker you must set this explicitly; rotating it invalidates all stored secrets. —
BODHI_MULTITENANT_CLIENT_ID string — OAuth client ID for multi-tenant deployments. Multi-tenant is out of scope for these docs. —
BODHI_MULTITENANT_CLIENT_SECRET string — OAuth client secret for multi-tenant deployments. Multi-tenant is out of scope for these docs. —

Database

Variable Type Default Description Editable at runtime
BODHI_APP_DB_URL string sqlite://$BODHI_HOME/bodhi.sqlite Connection URL for the application DB (users, tokens, models, MCPs, settings). Set to a postgres://... URL to use PostgreSQL. —
BODHI_SESSION_DB_URL string sqlite://$BODHI_HOME/session.sqlite Connection URL for the session store. —

llama.cpp / inference

These control the local inference subsystem. See Inference Stack for the variant matrix and per-hardware tuning notes.

Variable Type Default Description Editable at runtime
BODHI_EXEC_LOOKUP_PATH path bundled (desktop) / /app/bin (Docker) Directory tree that contains the target/<variant>/<exec> binaries. —
BODHI_EXEC_NAME string platform-default Filename of the llama.cpp server binary (e.g. llama-server). —
BODHI_EXEC_TARGET string platform-default Build target sub-directory (e.g. aarch64-apple-darwin). —
BODHI_EXEC_VARIANT option image-default (cpu, cuda, etc.) Active inference variant. Choose from BODHI_EXEC_VARIANTS. The Docker tag implies a default; override only if the image bundles multiple. ✓
BODHI_EXEC_VARIANTS csv image-default Comma-separated list of variants the binary bundle supports. Read-only; emitted by the build. —
BODHI_KEEP_ALIVE_SECS i64 300 Seconds the loaded model stays warm in VRAM after the last request. Lower it on small GPUs; raise it for bursty workloads. ✓
BODHI_LLAMACPP_ARGS string — Extra CLI args forwarded to every spawn of the llama.cpp server (e.g. --n-gpu-layers 999). Variant-specific overrides via BODHI_LLAMACPP_ARGS_<VARIANT> (e.g. BODHI_LLAMACPP_ARGS_CUDA). —

Logging

Variable Type Default Description Editable at runtime
BODHI_LOGS path $BODHI_HOME/logs Directory for daily-rotated log files. —
BODHI_LOG_LEVEL option warn Log threshold. One of error, warn, info, debug, trace. —
BODHI_LOG_STDOUT bool false Mirror logs to stdout in addition to BODHI_LOGS. Recommended for Docker so docker logs shows output. —

See Observability for log routing patterns.

HuggingFace

Variable Type Default Description Editable at runtime
HF_HOME path $BODHI_HOME/huggingface HuggingFace cache root. Bodhi reads $HF_HOME/hub for downloaded GGUF models. —
HF_TOKEN string — HuggingFace access token used for gated repos and to lift download rate limits. —

Platform

Variable Type Default Description Editable at runtime
BODHI_ON_RUNPOD bool false Enables RunPod-aware behavior — BODHI_PUBLIC_SCHEME defaults to https, BODHI_PUBLIC_HOST becomes <pod-id>-<port>.proxy.runpod.net, and BODHI_PUBLIC_PORT becomes 443. Requires RUNPOD_POD_ID to also be present. —
RUNPOD_POD_ID string injected by RunPod Pod identifier surfaced by the RunPod runtime. —

Editable at runtime

Only two settings are writable from the running app:

  • BODHI_EXEC_VARIANT
  • BODHI_KEEP_ALIVE_SECS

The /ui/settings/ page surfaces these alongside their current value and the source the active value came from. PUT/DELETE on any other key returns an error. Read Settings precedence for the gotcha around saving from the UI when a higher-priority source already wins.

Where to set them

  • Tauri desktop — set in your shell environment before launching, or edit ~/.bodhi/settings.yaml. The two editable-at-runtime settings can be changed from the in-app settings page.
  • Docker — pass with -e on docker run or list under environment: in Compose. See Docker deployment.
  • Reverse proxy — set the BODHI_PUBLIC_* triple to your external hostname/scheme/port. See Reverse proxy.