For the complete documentation index, see /developers/llms.txt Markdown versions: append .md to any /developers/{slug} URL. Browse structure: /developers/sitemap.md This page: /developers/environment-variables.md

New here? Start with What is Eigen Mesh? for a plain-language introduction.

Environment variables

In plain terms: These settings tell a self-hosted Eigen Mesh deployment how to connect to its database, encrypt data, and call the LLM gateway — set them in .env before starting Docker.

Set these in .env at the root of the eigen repository or in your hosting dashboard (Coolify, etc.). Compose passes DATABASE_URL, AGE_GRAPH_NAME, HOST, and PORT to the app container automatically.

Variables marked as secrets (BETTER_AUTH_SECRET, TENANT_MASTER_KEY, API keys, OAuth client secrets) must not be committed to version control. Change default passwords before production.

Who this is for

  • Operators configuring a self-hosted Docker deployment
  • Contributors looking up canonical variable names and defaults

Non-negotiable (app fails without these)

Variable Purpose How to set
BETTER_AUTH_SECRET Session encryption openssl rand -base64 32
TENANT_MASTER_KEY Per-tenant envelope encryption openssl rand -base64 32 — see Tenant envelope encryption
AGE_GRAPH_NAME Apache AGE graph name (must match Postgres init) eigen_graph (default)
ORIGIN Public URL for users and OAuth callbacks e.g. https://eigen.example.com

Database

Variable Default Purpose
DATABASE_URL postgres://eigen:eigen@db:5432/eigen App connection string
DATABASE_ADMIN_URL Same as above Migrations, RLS, pg_cron (superuser)
POSTGRES_PASSWORD eigen DB password — change in production
EIGEN_APP_DB_PASSWORD Password for RLS role eigen_app

LLM gateway — platform credits path

Users top up via PayPal; the app uses operator service keys.

Variable Purpose
SERVICE_API_KEY_EUROUTER EUrouter service key
LLM_BASE_URL EUrouter API origin (no trailing slash), e.g. https://api.eurouter.ai/v1
LLM_RULE_CHAT EUrouter routing rule UUID for chat
LLM_RULE_EMBEDDING EUrouter routing rule UUID for embeddings
SERVICE_API_KEY_OPENROUTER OpenRouter service key (if using OpenRouter)
OPENROUTER_BASE_URL e.g. https://openrouter.ai/api/v1

LLM gateway — BYOK fallback

Used when users supply keys in Settings → LLM → BYOK, or as env fallbacks:

Variable Purpose
LLM_API_KEY EUrouter API key fallback
OPENROUTER_API_KEY OpenRouter API key fallback

PayPal (platform credits)

Variable Purpose
PAYPAL_API_BASE https://api-m.sandbox.paypal.com (sandbox) or https://api-m.paypal.com (live)
PAYPAL_CLIENT_ID PayPal REST app client ID
PAYPAL_CLIENT_SECRET PayPal REST app secret

Omit PayPal vars if all users use BYOK only.

Consolidation (nightly sleep)

Variable Required Purpose
ADMIN_CONSOLIDATION_KEY Yes (for cron) X-Admin-Key on consolidate endpoint — openssl rand -hex 32
CONSOLIDATION_INTERNAL_URL Yes (compose) App URL from DB network, e.g. http://app:3000
CONSOLIDATION_CRON_SCHEDULE No Cron expression (default 0 2 * * *)
CONSOLIDATION_CRON_TZ No Timezone (default UTC)

OAuth (optional)

Variable Purpose
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET Google sign-in — callback {ORIGIN}/api/auth/callback/google
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET GitHub sign-in — callback {ORIGIN}/api/auth/callback/github

Push notifications (optional)

Variable Purpose
VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT Web push — npx web-push generate-vapid-keys

Admin bootstrap (optional)

Variable Purpose
ADMIN_NAME, ADMIN_EMAIL, ADMIN_PASSWORD Create first admin on container start

Tuning (optional)

Variable Default Purpose
LLM_MIN_REQUEST_INTERVAL_MS 1000 Global LLM throttle
EMBEDDING_COMPRESS_INTENSITY lite | full | ultra

Next steps

Agent Instructions

This documentation is published for humans and AI agents. Prefer .md URLs for structured content.

  • Index: /developers/llms.txt
  • Full export: /developers/llms-full.txt
  • Sitemap: /developers/sitemap.md
  • Raw page: append `.md` to any /developers/{slug} URL
  • Example: GET /developers/mcp-overview.md

Dynamic `?ask=` and `?goal=` query on markdown URLs is planned — see docs/planning/10-docs-query-api-design.md.