Configuration

Trelay is configured via environment variables. Use a .env file in the project root (or set variables in your shell or Docker). The app loads .env automatically when present.

Required variables

VariableDescription
API_KEYSecret used to authenticate API requests and dashboard login. Use a long random string (e.g. openssl rand -hex 32).
JWT_SECRETSecret used to sign JWT tokens. Use a long random string. Keep it private.

Server

VariableDescriptionDefault
SERVER_HOSTBind address0.0.0.0
SERVER_PORTHTTP port8080
SERVER_READ_TIMEOUTRead timeout (e.g. 10s)10s
SERVER_WRITE_TIMEOUTWrite timeout (e.g. 30s)30s
SERVER_SHUTDOWN_TIMEOUTGraceful shutdown timeout10s

Database

VariableDescriptionDefault
DB_DRIVERsqlite3 or postgressqlite3
DB_PATHSQLite database file path (used when DB_DRIVER=sqlite3)trelay.db
DB_URLPostgreSQL connection string (when DB_DRIVER=postgres)
DB_MAX_CONNSMax DB connections (Postgres)10

Authentication

VariableDescriptionDefault
TOKEN_EXPIRYJWT token lifetime (e.g. 24h)24h

Application

VariableDescriptionDefault
BASE_URLPublic URL for short links (e.g. https://links.example.com)http://localhost:8080
DEFAULT_DOMAINDefault domain for new links (optional)
CUSTOM_DOMAINSComma-separated list of allowed custom domains
STATIC_DIRPath to frontend build output (serve SPA from server)
ANALYTICS_ENABLEDEnable click trackingtrue
IP_ANONYMIZATIONAnonymize IP addresses in analyticstrue
SLUG_LENGTHDefault length for auto-generated slugs (4–32)6
MAX_URL_LENGTHMaximum length of original URLs2048
RATE_LIMIT_PER_MINAPI rate limit (requests per minute per client)100

Example .env

# Required
API_KEY=your_secure_api_key_here
JWT_SECRET=your_secure_jwt_secret_here

# Server
SERVER_PORT=8080

# Database (SQLite)
DB_DRIVER=sqlite3
DB_PATH=trelay.db

# Public URL for short links
BASE_URL=https://links.example.com

# Optional
ANALYTICS_ENABLED=true
IP_ANONYMIZATION=true
RATE_LIMIT_PER_MIN=100