Skip to main content

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

VariablePurpose
SELFHOST_NETWORK_MODESet true when binding beyond loopback. Promotes weak/default-secret warnings to hard boot failures (see Auth). Default false.
JWT_SECRETSigns API access and refresh tokens. Use at least 32 random characters.
MCP_SECRET_KEYSigns MCP session and CSRF state. Use at least 32 random characters.
CRON_SECRETProtects internal cron endpoints. Use at least 32 random characters.
DB_PASSWORDDatabase password. Replace the default engram_dev_password and update DATABASE_URL / DATABASE_MIGRATION_URL to match.
APP_BASE_URLPublic dashboard URL. Local default is http://localhost:3000.
MCP_ISSUER_URLPublic MCP issuer URL. Local default is http://localhost:8001.
CORS_ALLOWED_ORIGINSBrowser origins allowed to call the API.

Database and Redis

VariableLocal default
DATABASE_URLpostgresql://engram:engram_dev_password@db:5432/engram
DATABASE_MIGRATION_URLSame as DATABASE_URL
DB_REQUIRE_TLSfalse for Docker internal networking
REDIS_URLredis://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:
VariableModuleDefault
STRIPE_WEBHOOK_SECRETBilling (STRIPE_ENABLED)unset / disabled
TELEGRAM_WEBHOOK_SECRETBot (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.