Skip to main content

Documentation Index

Fetch the complete documentation index at: https://manifest.build/docs/llms.txt

Use this file to discover all available pages before exploring further.

Manifest reads its configuration from environment variables. In the bundled Docker setup these come from ~/manifest/.env. For docker run, pass them with -e. For non-Docker installs, export them in the shell before launching the backend.

Core

VariableRequiredDefaultDescription
DATABASE_URLYesPostgreSQL connection string. Format: postgresql://user:pass@host:5432/dbname
BETTER_AUTH_SECRETYesSession signing secret. Min 32 chars. Generate with openssl rand -hex 32
BETTER_AUTH_URLNohttp://localhost:2099Public URL the dashboard is reachable on. Must match the browser URL
PORTNo2099Internal server port
NODE_ENVNoproductionNode environment. Telemetry is disabled when this isn’t production

Network & security

VariableDefaultDescription
BIND_ADDRESS127.0.0.1Interface the server binds to. Set to 0.0.0.0 for LAN access
CORS_ORIGINhttp://localhost:3000Allowed CORS origin for browser-based dashboard requests
API_KEYInternal API key for system endpoints
THROTTLE_TTL60000Rate-limit window in milliseconds
THROTTLE_LIMIT100Max requests per window per agent
DB_POOL_MAX20Max PostgreSQL connections in the pool
SEED_DATAfalseSeed demo data on first boot

Email

Used for both Better Auth transactional emails (signup verification, password reset) and threshold alerts. Set one provider block.
VariableDescription
EMAIL_PROVIDERresend, mailgun, or sendgrid
EMAIL_API_KEYAPI key for the chosen provider
EMAIL_DOMAINSending domain (Mailgun only)
EMAIL_FROMFrom-address for outbound mail
Without an email provider, signup verification is waived (users are created as unverified-but-usable) and password reset silently no-ops. Hard-limit blocks still work; alerts just don’t email.

Legacy Mailgun-only

Older deployments used these. Kept for backward compatibility; new installs should use EMAIL_* instead.
VariableDescription
MAILGUN_API_KEYMailgun API key
MAILGUN_DOMAINMailgun domain
NOTIFICATION_FROM_EMAILSender address for alerts

OAuth logins

Each provider activates automatically when both *_CLIENT_ID and *_CLIENT_SECRET are set. Configure the callback URL in the provider’s console as ${BETTER_AUTH_URL}/api/auth/callback/<provider>.
VariableProvider
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRETGitHub
DISCORD_CLIENT_ID / DISCORD_CLIENT_SECRETDiscord
Subscription OAuth (ChatGPT, Claude, MiniMax) uses Manifest-side client IDs by default. Override only if you’ve registered your own app:
VariableDescription
OPENAI_OAUTH_CLIENT_IDCustom OpenAI OAuth client ID
MINIMAX_OAUTH_CLIENT_IDCustom MiniMax OAuth client ID

Telemetry

VariableDefaultDescription
MANIFEST_TELEMETRY_DISABLEDunsetSet to 1 to disable anonymous telemetry
TELEMETRY_ENDPOINThttps://telemetry.manifest.build/...Send reports to your own endpoint
MANIFEST_PUBLIC_STATSfalseExpose /api/v1/public/* aggregate stats without auth (Cloud only)

Postgres bundled volume

When you run the bundled compose file, Manifest brings up its own Postgres container. To use a stronger password than the default, set both of these. They must agree, and special characters in the password must be percent-encoded in DATABASE_URL:
VariableDescription
POSTGRES_PASSWORDPassword for the bundled Postgres user
DATABASE_URLConnection string with the matching password
Special-char encoding: @%40, :%3A, /%2F.