Documentation Index
Fetch the complete documentation index at: https://docs.3ngram.ai/llms.txt
Use this file to discover all available pages before exploring further.
Docker Compose includes local defaults so docker compose up works from a
fresh clone. For any network-accessible deployment, copy the template and set
real secrets first:
cp .env.selfhost.example .env
Required for network deployments
| Variable | Purpose |
|---|
SELFHOST_NETWORK_MODE | Set true when binding beyond loopback. Promotes weak/default-secret warnings to hard boot failures (see Auth). Default false. |
JWT_SECRET | Signs API access and refresh tokens. Use at least 32 random characters. |
MCP_SECRET_KEY | Signs MCP session and CSRF state. Use at least 32 random characters. |
CRON_SECRET | Protects internal cron endpoints. Use at least 32 random characters. |
DB_PASSWORD | Database password. Replace the default engram_dev_password and update DATABASE_URL / DATABASE_MIGRATION_URL to match. |
APP_BASE_URL | Public dashboard URL. Local default is http://localhost:3000. |
MCP_ISSUER_URL | Public MCP issuer URL. Local default is http://localhost:8001. |
CORS_ALLOWED_ORIGINS | Browser origins allowed to call the API. |
Database and Redis
| Variable | Local default |
|---|
DATABASE_URL | postgresql://engram:engram_dev_password@db:5432/engram |
DATABASE_MIGRATION_URL | Same as DATABASE_URL |
DB_REQUIRE_TLS | false for Docker internal networking |
REDIS_URL | redis://redis:6379/0 |
If you change DB_PASSWORD, also set DATABASE_URL and
DATABASE_MIGRATION_URL to match.
Disabled hosted modules
These stay disabled in the self-host default:
STRIPE_ENABLED=false
NOTIFICATION_ENABLED=false
INTEGRATIONS_ENABLED=false
CONTENT_INDEXING_ENABLED=false
WAITLIST_ENABLED=false
BOT_ENABLED=false
Enable optional modules only after configuring the required provider secrets and
understanding the hosted/commercial licensing boundary in LICENSING.md.
Webhook settings
The self-host core does not require any webhook secrets. The webhook-related
environment variables ship disabled because they belong to the hosted modules
above:
| Variable | Module | Default |
|---|
STRIPE_WEBHOOK_SECRET | Billing (STRIPE_ENABLED) | unset / disabled |
TELEGRAM_WEBHOOK_SECRET | Bot (BOT_ENABLED) | unset / disabled |
Outbound webhooks (the dashboard webhooks feature) sign each delivery with a
per-webhook secret created in the UI, so they need no global environment
variable. Set STRIPE_WEBHOOK_SECRET or TELEGRAM_WEBHOOK_SECRET only when you
deliberately enable the matching hosted module.
Optional LLM features
Semantic embeddings and LLM-backed classification require provider keys:
OPENAI_API_KEY=...
LLM_CONSOLIDATION=false
LLM_CLASSIFY=false
Without an LLM provider key, the stack still boots and stores structured memory,
but embedding-backed search and synthesis features are limited.