Skip to content

Configuration Reference

SeeSee is configured entirely through environment variables. All variables use the SEESEE_ prefix.

Copy .env.example from the repository as a starting template.

Server

VariableTypeDefaultDescription
SEESEE_PORTint8080HTTP server port
SEESEE_BASE_URLstringhttp://localhost:8080Public base URL of the service

Authentication

VariableTypeDefaultDescription
SEESEE_ADMIN_USERNAMEstringadminAdmin username for Web UI and API basic auth
SEESEE_ADMIN_PASSWORDstring(required)Admin password — must be set, no default

Database

VariableTypeDefaultDescription
SEESEE_DB_PATHstring/data/seesee.dbPath to the SQLite database file

The database directory must be writable. In Docker, mount a volume at /data for persistence.

SMTP Ingest

VariableTypeDefaultDescription
SEESEE_SMTP_ENABLEDbooltrueEnable the built-in SMTP server
SEESEE_SMTP_PORTint2525SMTP server listen port

Retention

Settings page showing retention configuration and storage usage

Retention rules control automatic cleanup. The most restrictive rule wins.

VariableTypeDefaultDescription
SEESEE_RETENTION_MAX_COUNTint1000Maximum emails to keep per app. Oldest are deleted first
SEESEE_RETENTION_MAX_AGE_DAYSint90Delete emails older than this many days
SEESEE_RETENTION_MAX_STORAGE_MBint500Global storage cap in MB. Oldest emails deleted first when exceeded
SEESEE_RETENTION_CLEANUP_INTERVAL_MINUTESint60How often the retention scheduler runs (in minutes)
SEESEE_RETENTION_DEGRADE_TO_TEXT_DAYSint0Strip HTML body after N days, keeping text + preview. 0 = never degrade
SEESEE_RETENTION_DEGRADE_TO_PREVIEW_DAYSint0Strip text body after N days, keeping preview only. 0 = never degrade

Apps can override max_count, max_age_days, degrade_to_text_days, and degrade_to_preview_days with per-app values set during app creation or update. For retention limits, the effective value is the minimum of the per-app and global value. For degradation thresholds, a per-app override can enable degradation even if the global setting is disabled.

Session

VariableTypeDefaultDescription
SEESEE_SECRET_KEYstring(falls back to admin password)Secret key for signing session cookies. Set a unique value in production
SEESEE_SESSION_MAX_AGE_DAYSint7Session cookie expiry in days

UI

VariableTypeDefaultDescription
SEESEE_THEMEstringsystemDefault theme: light, dark, or system (follows OS preference)
SEESEE_DISPLAY_TIMEZONEstringUTCIANA timezone string for admin date display (e.g. America/Chicago, Europe/London). Controls how dates appear in admin views only — does not affect storage (always UTC) or API responses (always UTC ISO 8601)

Webhook Secrets

Optional secrets for verifying webhook payloads from email providers. If not set, signature verification is skipped (a warning is logged).

VariableTypeDefaultDescription
SEESEE_WEBHOOK_SECRET_RESENDstring(empty)Svix signing secret from the Resend dashboard (starts with whsec_)
SEESEE_WEBHOOK_SECRET_SENDGRIDstring(empty)Shared secret for SendGrid webhook token verification

Logging

VariableTypeDefaultDescription
SEESEE_LOG_LEVELstringinfoLog level: debug, info, warning, error, critical

Example .env file

Terminal window
# Required
SEESEE_ADMIN_PASSWORD=change-me-to-something-secure
# Server
SEESEE_PORT=8080
SEESEE_BASE_URL=https://seesee.example.com
# Database (default is fine for Docker)
SEESEE_DB_PATH=/data/seesee.db
# SMTP
SEESEE_SMTP_ENABLED=true
SEESEE_SMTP_PORT=2525
# Retention
SEESEE_RETENTION_MAX_COUNT=1000
SEESEE_RETENTION_MAX_AGE_DAYS=90
SEESEE_RETENTION_MAX_STORAGE_MB=500
SEESEE_RETENTION_DEGRADE_TO_TEXT_DAYS=0
SEESEE_RETENTION_DEGRADE_TO_PREVIEW_DAYS=0
# UI
SEESEE_DISPLAY_TIMEZONE=UTC # e.g. "America/Chicago", "Europe/London"
# Session
SEESEE_SECRET_KEY=your-random-secret-key
SEESEE_SESSION_MAX_AGE_DAYS=7
# Webhook secrets (optional)
SEESEE_WEBHOOK_SECRET_RESEND=whsec_your_resend_signing_secret
SEESEE_WEBHOOK_SECRET_SENDGRID=your-sendgrid-shared-secret
# Logging
SEESEE_LOG_LEVEL=info