Skip to content

Environment Variables

Complete reference for all Quackback configuration options. Copy .env.example to .env and fill in your values.

Required Variables

These variables must be set for Quackback to run.

VariableDescriptionExample
DATABASE_URLPostgreSQL connection stringpostgresql://postgres:password@localhost:5432/quackback
SECRET_KEYSecret key for authentication and encryption (32+ chars). Used for session signing and deriving encryption keys.openssl rand -base64 32
BASE_URLPublic URL for your instance (used for auth, emails, and OAuth callbacks)https://feedback.example.com
REDIS_URLRedis/Dragonfly connection for background job queue (BullMQ). Dragonfly is included in docker-compose.redis://localhost:6379

Email Configuration

Configure email delivery for OTP codes, notifications, and invitations.

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

VariableDescriptionExample
EMAIL_SMTP_HOSTSMTP server hostnamesmtp.sendgrid.net
EMAIL_SMTP_PORTSMTP port587
EMAIL_SMTP_USERSMTP usernameapikey
EMAIL_SMTP_PASSSMTP passwordSG.xxxx
EMAIL_SMTP_SECUREUse TLS (for port 465)true
EMAIL_FROMSender email addressQuackback <feedback@example.com>

Resend

VariableDescriptionExample
EMAIL_RESEND_API_KEYResend API keyre_xxxxxxxxxxxx
EMAIL_FROMSender email addressQuackback <feedback@example.com>

OAuth Providers

Enable social login for portal users and team members.

GitHub

VariableDescription
GITHUB_CLIENT_IDGitHub OAuth App client ID
GITHUB_CLIENT_SECRETGitHub OAuth App client secret

Create at: GitHub Developer Settings

Callback URL: https://your-domain.com/api/auth/callback/github

Google

VariableDescription
GOOGLE_CLIENT_IDGoogle OAuth client ID
GOOGLE_CLIENT_SECRETGoogle OAuth client secret

Create at: Google Cloud Console

Callback URL: https://your-domain.com/api/auth/callback/google

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.

VariableDescriptionExample
OPENAI_API_KEYAPI key for your AI endpointsk-...
OPENAI_BASE_URLOpenAI-compatible endpoint. Required -- there is no defaulthttps://api.openai.com/v1
AI_CHAT_MODELDefault model for chat features (summaries, suggestions, merge verification)gpt-4o-mini
AI_EMBEDDING_MODELModel for embeddings (duplicate detection, semantic search)text-embedding-3-small
AI_SUMMARY_MODELPer-feature override of AI_CHAT_MODEL for post summariesoff
AI_SENTIMENT_MODELPer-feature override for sentiment analysisgpt-4o-mini
AI_EXTRACTION_MODELPer-feature override for suggestion extractiongpt-4o-mini
AI_QUALITY_GATE_MODELPer-feature override for the suggestion quality gategpt-4o-mini
AI_INTERPRETATION_MODELPer-feature override for feedback interpretationgpt-4o-mini
AI_MERGE_MODELPer-feature override for merge verificationgpt-4o

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.

Before v0.12.0, OPENAI_API_KEY alone enabled AI with an implicit OpenAI endpoint and built-in model names. If you upgraded and AI features turned off, add OPENAI_BASE_URL, AI_CHAT_MODEL, and AI_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.

If not configured, image upload is disabled in the rich text editor. For local development, MinIO is included in docker-compose and configured by default. Run bun run setup to start it.

VariableDescriptionExample
S3_ENDPOINTS3 endpoint URL (leave empty for AWS S3)http://localhost:9000
S3_BUCKETS3 bucket namequackback
S3_REGIONS3 regionus-east-1
S3_ACCESS_KEY_IDS3 access keyminioadmin
S3_SECRET_ACCESS_KEYS3 secret keyminioadmin
S3_FORCE_PATH_STYLEUse path-style URLs (required for MinIO, R2)true
S3_PUBLIC_URLPublic URL for uploaded files (optional)https://cdn.example.com

Telemetry

Anonymous usage statistics help improve Quackback. Telemetry is enabled by default and can be disabled via environment variable.

VariableDescriptionExample
DISABLE_TELEMETRYSet to "true" to disable anonymous usage statisticstrue

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 <feedback@yourcompany.com>"
 
# Or Resend
# EMAIL_RESEND_API_KEY="re_xxxxxxxxxxxx"
# EMAIL_FROM="Quackback <feedback@yourcompany.com>"
 
# ===================
# 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

Quackback validates required variables on startup. Missing variables will cause the application to fail with a clear error message indicating which variables are missing.