Environment variables
Every variable lives in .env at the repo root. The installer generates random
secrets for everything sensitive on first run.
Core
| Variable | Required | Default | Notes |
|---|
APP_ENV | ✓ | development | production enables prod logging |
APP_PORT | ✓ | 8080 | Internal API port |
FRONTEND_URL | ✓ | http://localhost:4001 | Used in OAuth + email links |
INBOUND_SECRET | ✓ | random | Postfix hook shares it with Go |
Database / cache
| Variable | Default |
|---|
DB_URL | postgresql://koltrix:koltrix_dev@postgres:5432/koltrix |
DB_MAX_CONNS | 20 |
DB_MIN_CONNS | 5 |
DB_MIGRATIONS_PATH | ./migrations |
REDIS_URL | redis://redis:6379 |
REDIS_PASSWORD | random |
Storage
| Variable | Default |
|---|
MEILI_URL | http://meilisearch:7700 |
MEILI_MASTER_KEY | random |
MINIO_ENDPOINT | minio:9000 |
MINIO_ACCESS_KEY | koltrix |
MINIO_SECRET_KEY | random |
MINIO_BUCKET | koltrix |
MINIO_USE_SSL | false |
Auth (Clerk)
| Variable | Notes |
|---|
CLERK_SECRET_KEY | from clerk dashboard |
CLERK_PUBLISHABLE_KEY | exposed to the front-end |
CLERK_JWKS_URL | e.g. https://<your>.clerk.accounts.dev/.well-known/jwks.json |
CLERK_WEBHOOK_SECRET | required for /api/webhooks/clerk |
Billing (Stripe)
| Variable |
|---|
STRIPE_SECRET_KEY |
STRIPE_WEBHOOK_SECRET |
STRIPE_PRICE_ID_PRO |
STRIPE_PRICE_ID_BUSINESS |
AI (OpenRouter or OpenAI-compatible)
| Variable | Default |
|---|
AI_API_KEY | (empty disables AI features) |
AI_MODEL | openai/gpt-4o-mini |
AI_BASE_URL | https://openrouter.ai/api/v1 |
Mail
| Variable | Notes |
|---|
SMTP_HOST | postfix (internal hostname) |
SMTP_PORT | 587 |
SMTP_USERNAME | optional |
SMTP_PASSWORD | optional |
MAIL_HOSTNAME | mail.koltrix.com |
SMTP_RELAY_PORT | 2525 (used by koltrix-smtp) |
Cloudflare
| Variable | Notes |
|---|
CF_API_TOKEN | Used by certbot for DNS-01 challenges |