Environment Variables
This is the minimum env baseline for local and server deployments.
Backend core
| Variable | Default | Purpose |
|---|---|---|
PORT | 4000 | Backend HTTP port |
JWT_SECRET | change-me-super-secret | JWT signing secret |
JWT_EXPIRES_IN | 30d | JWT expiration |
APP_URL | http://localhost:3000 | Public app URL |
FRONTEND_ORIGIN | http://localhost:3000 | CORS allowed frontend origin |
DATA_DIR | /app/data in Docker | SQLite data directory |
UPLOADS_DIR | /app/uploads in Docker | Attachments directory |
SQLITE_PATH | /app/data/data.sqlite | SQLite file path |
Outbox worker
| Variable | Default | Purpose |
|---|---|---|
OUTBOX_WORKER_ENABLED | false | Enable outbox worker loop |
OUTBOX_WORKER_POLL_MS | 5000 | Poll interval |
OUTBOX_WORKER_BATCH_SIZE | 20 | Max items per loop |
OUTBOX_WORKER_MAX_ATTEMPTS | 5 | Retry cap |
OUTBOX_WORKER_PROCESSING_TIMEOUT_MS | 300000 | Recover stale processing |
OUTBOX_WORKER_RETRY_BASE_MS | 10000 | Retry backoff base |
OUTBOX_WORKER_RETRY_MAX_MS | 300000 | Retry backoff max |
OUTBOX_WORKER_ALERT_PENDING_THRESHOLD | 100 | Pending alert threshold |
OUTBOX_WORKER_ALERT_OLDEST_PENDING_AGE_SECONDS | 900 | Oldest pending age threshold |
OUTBOX_WORKER_ALERT_STUCK_PROCESSING_THRESHOLD | 1 | Stuck processing threshold |
OUTBOX_WORKER_ALERT_FAILED_THRESHOLD | 1 | Failed events threshold |
Frontend
| Variable | Default | Purpose |
|---|---|---|
VITE_API_URL | http://localhost:4000 | API base URL |
Extensions layer (Open Core override hook)
| Variable | Default | Purpose |
|---|---|---|
EXTENSIONS_DIR | backend/extensions | Extensions root |
EXTENSIONS_OVERRIDES_FILE | extensions/service-overrides.js | Service override registry |