Skip to main content
A self-hosted instance needs only a handful of environment variables. The AI provider (Anthropic API or AWS Bedrock), the GitHub App, file storage and Slack are configured in the app after first login, not through environment variables.

Required

string
required
PostgreSQL connection string, in the form postgresql://user:password@host:port/database. The database must be PostgreSQL 16 or later, and the user must be able to create tables and the pg_trgm extension.
string
required
A 32-byte key as 64 hex characters, used to encrypt stored credentials. Generate one with:
If this key is lost, every stored credential (GitHub App key, AI provider keys, connectors) has to be entered again.
string
required
Redis 7 or later connection string, such as redis://localhost:6379. Use rediss:// for TLS. The app refuses to start without it. Redis holds resumable stream state, so a client can reconnect to an in-progress response, and run leases.
string
The public address your instance is reached on, such as https://compiler.yourdomain.com. Needed for the MCP server, for Slack, and for SSO/SAML behind a reverse proxy or custom domain.

Optional

boolean
default:"false"
Set to true when your database requires SSL, as Amazon RDS and Heroku Postgres do. Compiler then appends ?sslmode=require to the connection string.
string
default:"/repos"
A writable directory where Compiler clones repositories. On hosts with ephemeral disks, such as Heroku, set it to /tmp/repos. Compiler re-clones missing repositories when needed.
number
default:"3000"
The port the app listens on. Without it, the app uses 3000 when that port is free and picks another when it isn’t, so set it explicitly on platforms that route to a fixed container port.
boolean
default:"false"
Set to true to let MCP connectors reach private and loopback addresses, for MCP servers on your intranet.
string
When a free trial ends, as a date or ISO timestamp (for example 2026-10-26). Shows the days left above the message box. Leave unset for no trial.

Docker Compose

The Docker deployment reads these from .env and passes the ones above to the app container.