Environment Variables
Complete reference for all Quackback configuration options.
Complete reference for all Quackback configuration options. Copy .env.example to .env and fill in your values.
Required Variables
Warning: These variables must be set for Quackback to run.
Variable | Description | Example |
|---|---|---|
| PostgreSQL connection string |
|
| Secret key for authentication and encryption (32+ chars). Used for session signing and deriving encryption keys. |
|
| Public URL for your instance (used for auth, emails, and OAuth callbacks) |
|
| Redis/Dragonfly connection for background job queue (BullMQ). Dragonfly is included in docker-compose. |
|
Email Configuration
Configure email delivery for OTP codes, notifications, and invitations.
Tip: If email is not configured, OTP codes and other emails are printed to the console. This is useful for local development.
Priority order: SMTP (if configured) > Resend (if configured) > Console logging.
SMTP
Variable | Description | Example |
|---|---|---|
| SMTP server hostname |
|
| SMTP port |
|
| SMTP username |
|
| SMTP password |
|
| Use TLS (for port 465) |
|
| Sender email address |
|
Resend
Variable | Description | Example |
|---|---|---|
| Resend API key |
|
| Sender email address |
|
OAuth Providers
Enable social login for portal users and team members.
GitHub
Variable | Description |
|---|---|
| GitHub OAuth App client ID |
| GitHub OAuth App client secret |
Create at: GitHub Developer Settings
Callback URL: https://your-domain.com/api/auth/callback/github
Variable | Description |
|---|---|
| Google OAuth client ID |
| Google OAuth client secret |
Create at: Google Cloud Console
Callback URL: https://your-domain.com/api/auth/callback/google
Note: Integration credentials (Slack, Microsoft Teams, Linear, etc.) are configured through the admin UI and stored securely in the database, not as environment variables.
AI
Enable AI features: post summaries, duplicate detection, feedback extraction, and help center semantic search. AI is off unless you set the key, the endpoint, and a model for each role -- Quackback works with any OpenAI-compatible endpoint but never assumes one.
Variable | Description | Example |
|---|---|---|
| API key for your AI endpoint |
|
| OpenAI-compatible endpoint. Required -- there is no default |
|
| Default model for chat features (summaries, suggestions, merge verification) |
|
| Model for embeddings (duplicate detection, semantic search) |
|
| Per-feature override of |
|
| Per-feature override for sentiment analysis |
|
| Per-feature override for suggestion extraction |
|
| Per-feature override for the suggestion quality gate |
|
| Per-feature override for feedback interpretation |
|
| Per-feature override for merge verification |
|
Per-feature overrides fall back to AI_CHAT_MODEL when unset. Set an override to off to disable just that feature. Use model ids your endpoint accepts -- gateways typically want provider-prefixed ids like google/gemini-3.1-flash-lite-preview.
Note: Before v0.12.0,
OPENAI_API_KEYalone enabled AI with an implicit OpenAI endpoint and built-in model names. If you upgraded and AI features turned off, addOPENAI_BASE_URL,AI_CHAT_MODEL, andAI_EMBEDDING_MODEL.
File Storage
S3-compatible storage for image uploads in changelogs and rich text content. Supports AWS S3, Cloudflare R2, Backblaze B2, MinIO, and other S3-compatible services.
Note: If not configured, image upload is disabled in the rich text editor. For local development, MinIO is included in
docker-composeand configured by default. Runbun run setupto start it.
Variable | Description | Example |
|---|---|---|
| S3 endpoint URL (leave empty for AWS S3) |
|
| S3 bucket name |
|
| S3 region |
|
| S3 access key |
|
| S3 secret key |
|
| Use path-style URLs (required for MinIO, R2) |
|
| Public URL for uploaded files (optional) |
|
Telemetry
Anonymous usage statistics help improve Quackback. Telemetry is enabled by default and can be disabled via environment variable.
Variable | Description | Example |
|---|---|---|
| Set to |
|
Complete Example
# ===================
# Required
# ===================
DATABASE_URL="postgresql://postgres:password@localhost:5432/quackback"
SECRET_KEY="your-32-character-minimum-secret-key-here"
BASE_URL="https://feedback.yourcompany.com"
REDIS_URL="redis://localhost:6379"
# ===================
# Email (choose one)
# ===================
# SMTP
EMAIL_SMTP_HOST="smtp.sendgrid.net"
EMAIL_SMTP_PORT="587"
EMAIL_SMTP_USER="apikey"
EMAIL_SMTP_PASS="SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
EMAIL_FROM="Quackback <[email protected]>"
# Or Resend
# EMAIL_RESEND_API_KEY="re_xxxxxxxxxxxx"
# EMAIL_FROM="Quackback <[email protected]>"
# ===================
# OAuth (optional)
# ===================
GITHUB_CLIENT_ID="your-github-client-id"
GITHUB_CLIENT_SECRET="your-github-client-secret"
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
# ===================
# Telemetry (optional)
# ===================
# DISABLE_TELEMETRY="true"
Validation
Note: Quackback validates required variables on startup. Missing variables will cause the application to fail with a clear error message indicating which variables are missing.
Was this helpful?
Your feedback shapes what we write next.
