Skip to main content

Configuration

HappyView is configured via environment variables. A .env file in the project root is loaded automatically on startup. See Deployment for local setup or Production Deployment for production setup.

Environment variables

VariableRequiredDefaultDescription
DATABASE_URLyes---Database connection string. SQLite (sqlite://path/to/db?mode=rwc) or Postgres (postgres://user:pass@host/db)
DATABASE_BACKENDnoauto-detectedForce sqlite or postgres. Auto-detected from DATABASE_URL scheme if not set
PUBLIC_URLyes---Public-facing URL for HappyView (used for OAuth callbacks, e.g. https://happyview.example.com)
SESSION_SECRETnodev defaultSecret key for signing session cookies (at least 64 characters). Must be set in production
HOSTno0.0.0.0Bind host
PORTno3000Bind port
JETSTREAM_URLnowss://jetstream1.us-east.bsky.networkJetstream WebSocket URL for real-time record streaming
RELAY_URLnohttps://bsky.networkRelay URL for backfill repo discovery
PLC_URLnohttps://plc.directoryPLC directory URL for DID resolution
STATIC_DIRno./web/outDirectory containing the built dashboard static assets
EVENT_LOG_RETENTION_DAYSno30Number of days to keep event logs before automatic cleanup. Set to 0 to disable cleanup
TOKEN_ENCRYPTION_KEYno---Base64-encoded 32-byte key for encrypting stored OAuth tokens. Strongly recommended in production
DEFAULT_RATE_LIMIT_CAPACITYno100Default token bucket capacity used when registering a new API client
DEFAULT_RATE_LIMIT_REFILL_RATEno2.0Default token bucket refill rate (tokens/second) for new API clients
RUST_LOGnohappyview=debug,tower_http=debugLog filter (uses tracing_subscriber::EnvFilter)
APP_NAMEno---Application name shown on OAuth authorization screens. Overridden by database setting if set via admin API
LOGO_URIno---URL to application logo for OAuth screens. Overridden by database setting or logo upload
TOS_URIno---URL to terms of service. Overridden by database setting if set via admin API
POLICY_URIno---URL to privacy policy. Overridden by database setting if set via admin API

Example .env

# SQLite (default — zero setup required)
DATABASE_URL=sqlite://data/happyview.db?mode=rwc
PUBLIC_URL=http://localhost:3000
SESSION_SECRET=change-me-in-production

# Or use Postgres instead:
# DATABASE_URL=postgres://happyview:happyview@localhost/happyview

# Optional overrides
# HOST=0.0.0.0
# PORT=3000
# JETSTREAM_URL=wss://jetstream1.us-east.bsky.network
# RELAY_URL=https://bsky.network
# PLC_URL=https://plc.directory
# STATIC_DIR=./web/out
# EVENT_LOG_RETENTION_DAYS=30
# TOKEN_ENCRYPTION_KEY=base64-encoded-32-byte-key
# DEFAULT_RATE_LIMIT_CAPACITY=100
# DEFAULT_RATE_LIMIT_REFILL_RATE=2.0
# RUST_LOG=happyview=debug,tower_http=debug
# APP_NAME=My App
# LOGO_URI=https://example.com/logo.png
# TOS_URI=https://example.com/tos
# POLICY_URI=https://example.com/privacy

Next steps