Variables Reference
This page is the complete reference of all available environment variables in tabular format.
Detailed documentation:
- Environment Variables Overview → — Varlock, Infisical, architecture
- Varlock Schema Format → — annotations, types
- Adding a New Variable → — step-by-step
Environment Management
Section titled “Environment Management”ElyOS uses Varlock for typesafe environment variable management. Varlock validates all configuration values at application startup, so configuration errors are caught immediately.
Bootstrap Credentials
Section titled “Bootstrap Credentials”Only bootstrap credentials remain in the .env file:
INFISICAL_CLIENT_ID=machine-identity-client-idINFISICAL_CLIENT_SECRET=machine-identity-client-secretAll other secrets (database URL, auth secret, SMTP password, etc.) come from Infisical at runtime.
Details: Infisical Integration →
Local Fallback Mode
Section titled “Local Fallback Mode”For offline development or without Infisical:
VARLOCK_FALLBACK=localNODE_ENV=developmentDATABASE_URL=postgresql://elyos:elyos123@localhost:5432/elyosBETTER_AUTH_SECRET=local-secretBETTER_AUTH_URL=http://localhost:3000ORIGIN=http://localhost:5173# ... all other variablesQuick Start
Section titled “Quick Start”cp .env.example .envWith Varlock + Infisical (recommended):
INFISICAL_CLIENT_ID=machine-identity-client-idINFISICAL_CLIENT_SECRET=machine-identity-client-secretWithout Infisical (local fallback mode):
VARLOCK_FALLBACK=localNODE_ENV=developmentDATABASE_URL=postgresql://elyos:elyos123@localhost:5432/elyosBETTER_AUTH_SECRET=generated-random-secretBETTER_AUTH_URL=http://localhost:3000ORIGIN=http://localhost:5173Server Configuration
Section titled “Server Configuration”| Variable | Required | Default | Description |
|---|---|---|---|
NODE_ENV | Yes | — | development, production, or test |
BODY_SIZE_LIMIT | No | 10485760 | Maximum request size in bytes (10 MB) |
ELYOS_PORT | No | 3000 | Application port (Docker host port mapping) |
APP_URL | Prod | — | Base URL (e.g., https://elyos.example.com) |
ORIGIN | Yes | — | CSRF protection — must match application URL |
Database
Section titled “Database”| Variable | Required | Default | Description |
|---|---|---|---|
DATABASE_URL | Yes | — | PostgreSQL connection string: postgresql://USER:PASS@HOST:PORT/DB |
POSTGRES_USER | Yes | — | PostgreSQL username |
POSTGRES_PASSWORD | Yes | — | PostgreSQL password |
POSTGRES_HOST | Yes | localhost | PostgreSQL server address |
POSTGRES_DB | Yes | — | PostgreSQL database name |
POSTGRES_PORT | Yes | 5432 | PostgreSQL port |
Note:
DATABASE_URLis automatically built fromPOSTGRES_*variables in the schema. When using Docker Compose,POSTGRES_HOSTshould bepostgres(the service name).
Application Branding
Section titled “Application Branding”| Variable | Required | Default | Description |
|---|---|---|---|
APP_NAME | No | ElyOS | Displayed application name |
APP_LOGO_URL | No | — | Logo URL — absolute or relative |
EMAIL_USE_LOGO | No | false | Use logo image in emails instead of text |
Authentication
Section titled “Authentication”| Variable | Required | Default | Description |
|---|---|---|---|
BETTER_AUTH_SECRET | Prod | — | Token signing secret (openssl rand -base64 32) |
BETTER_AUTH_URL | Yes | — | Auth callback base URL |
REGISTRATION_ENABLED | No | true | Enable registration |
SOCIAL_LOGIN_ENABLED | No | true | Enable Google sign-in |
GOOGLE_CLIENT_ID | No | — | Google OAuth client ID |
GOOGLE_CLIENT_SECRET | No | — | Google OAuth client secret |
| Variable | Required | Default | Description |
|---|---|---|---|
EMAIL_PROVIDER | No | resend | smtp, resend, sendgrid, or ses |
EMAIL_TEST_MODE | No | false | Log emails to console instead of sending |
EMAIL_OTP_EXPIRES_IN | No | 10 | OTP expiration time in minutes (1–20) |
EMAIL_PROVIDER=smtpSMTP_HOST=smtp.example.comSMTP_PORT=587SMTP_SECURE=falseSMTP_USERNAME=noreply@example.comSMTP_PASSWORD=passwordResend
Section titled “Resend”EMAIL_PROVIDER=resendRESEND_API_KEY=re_...RESEND_FROM_EMAIL=noreply@example.comSendGrid
Section titled “SendGrid”EMAIL_PROVIDER=sendgridSENDGRID_API_KEY=SG....SENDGRID_FROM_EMAIL=noreply@example.comAWS SES
Section titled “AWS SES”EMAIL_PROVIDER=sesAWS_REGION=eu-central-1AWS_ACCESS_KEY_ID=...AWS_SECRET_ACCESS_KEY=...Internationalization
Section titled “Internationalization”| Variable | Default | Description |
|---|---|---|
SUPPORTED_LOCALES | hu,en | Comma-separated supported languages |
DEFAULT_LOCALE | hu | Default language |
Logging
Section titled “Logging”| Variable | Default | Description |
|---|---|---|
LOG_TARGETS | console | console, file, database (comma-separated) |
LOG_LEVEL | error | debug, info, warn, error, fatal |
LOG_DIR | ./logs | Log files directory |
Initial Administrator
Section titled “Initial Administrator”| Variable | Required | Default | Description |
|---|---|---|---|
ADMIN_USER_EMAIL | Yes | — | First admin user email (used during db:init / db:reset) |
Developer Mode
Section titled “Developer Mode”| Variable | Default | Description |
|---|---|---|
DEV_MODE | false | Enable plugin loading from localhost URLs |
Demo Mode
Section titled “Demo Mode”| Variable | Default | Description |
|---|---|---|
DEMO_MODE | false | Enable demo mode (indicates to users they’re in demo environment) |
DEMO_RESET_HOUR | 4 | Hour (UTC, 0–23) when demo database resets daily |
DEMO_RESET_UPLOADS_KEEP | — | Comma-separated upload subdirectories to preserve during reset |
Plugin System
Section titled “Plugin System”| Variable | Default | Description |
|---|---|---|
PLUGIN_PACKAGE_EXTENSION | elyospkg | Plugin package file extension |
PLUGIN_MAX_SIZE | 10485760 | Maximum plugin size in bytes (max: 100 MB) |
PLUGIN_STORAGE_DIR | /var/webos/plugins | Installed plugin files directory |
Docker Configuration
Section titled “Docker Configuration”# Start full stackbun docker:up
# Database onlybun docker:db
# Stopbun docker:down
# Logsbun docker:logsData Persistence
Section titled “Data Persistence”PostgreSQL data is stored in the elyos-data Docker volume. For complete reset:
docker compose -f docker/docker-compose.yml down -vProduction Deployment Recommended Settings
Section titled “Production Deployment Recommended Settings”NODE_ENV=productionDEV_MODE=falsePUBLIC_SITE_ENABLED=falseREQUIRE_EMAIL_VERIFICATION=trueBETTER_AUTH_SECRET=<strong-random-value>POSTGRES_PASSWORD=<strong-random-value>ADMIN_USER_EMAIL=admin@example.comLOG_TARGETS=console,databaseLOG_LEVEL=info