Skip to content

Variables Reference

This page is the complete reference of all available environment variables in tabular format.

Detailed documentation:


ElyOS uses Varlock for typesafe environment variable management. Varlock validates all configuration values at application startup, so configuration errors are caught immediately.

Only bootstrap credentials remain in the .env file:

INFISICAL_CLIENT_ID=machine-identity-client-id
INFISICAL_CLIENT_SECRET=machine-identity-client-secret

All other secrets (database URL, auth secret, SMTP password, etc.) come from Infisical at runtime.

Details: Infisical Integration →

For offline development or without Infisical:

VARLOCK_FALLBACK=local
NODE_ENV=development
DATABASE_URL=postgresql://elyos:elyos123@localhost:5432/elyos
BETTER_AUTH_SECRET=local-secret
BETTER_AUTH_URL=http://localhost:3000
ORIGIN=http://localhost:5173
# ... all other variables

Terminál
cp .env.example .env

With Varlock + Infisical (recommended):

INFISICAL_CLIENT_ID=machine-identity-client-id
INFISICAL_CLIENT_SECRET=machine-identity-client-secret

Without Infisical (local fallback mode):

VARLOCK_FALLBACK=local
NODE_ENV=development
DATABASE_URL=postgresql://elyos:elyos123@localhost:5432/elyos
BETTER_AUTH_SECRET=generated-random-secret
BETTER_AUTH_URL=http://localhost:3000
ORIGIN=http://localhost:5173

VariableRequiredDefaultDescription
NODE_ENVYesdevelopment, production, or test
BODY_SIZE_LIMITNo10485760Maximum request size in bytes (10 MB)
ELYOS_PORTNo3000Application port (Docker host port mapping)
APP_URLProdBase URL (e.g., https://elyos.example.com)
ORIGINYesCSRF protection — must match application URL
VariableRequiredDefaultDescription
DATABASE_URLYesPostgreSQL connection string: postgresql://USER:PASS@HOST:PORT/DB
POSTGRES_USERYesPostgreSQL username
POSTGRES_PASSWORDYesPostgreSQL password
POSTGRES_HOSTYeslocalhostPostgreSQL server address
POSTGRES_DBYesPostgreSQL database name
POSTGRES_PORTYes5432PostgreSQL port

Note: DATABASE_URL is automatically built from POSTGRES_* variables in the schema. When using Docker Compose, POSTGRES_HOST should be postgres (the service name).

VariableRequiredDefaultDescription
APP_NAMENoElyOSDisplayed application name
APP_LOGO_URLNoLogo URL — absolute or relative
EMAIL_USE_LOGONofalseUse logo image in emails instead of text
VariableRequiredDefaultDescription
BETTER_AUTH_SECRETProdToken signing secret (openssl rand -base64 32)
BETTER_AUTH_URLYesAuth callback base URL
REGISTRATION_ENABLEDNotrueEnable registration
SOCIAL_LOGIN_ENABLEDNotrueEnable Google sign-in
GOOGLE_CLIENT_IDNoGoogle OAuth client ID
GOOGLE_CLIENT_SECRETNoGoogle OAuth client secret
VariableRequiredDefaultDescription
EMAIL_PROVIDERNoresendsmtp, resend, sendgrid, or ses
EMAIL_TEST_MODENofalseLog emails to console instead of sending
EMAIL_OTP_EXPIRES_INNo10OTP expiration time in minutes (1–20)
Terminál
EMAIL_PROVIDER=smtp
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USERNAME=noreply@example.com
SMTP_PASSWORD=password
Terminál
EMAIL_PROVIDER=resend
RESEND_API_KEY=re_...
RESEND_FROM_EMAIL=noreply@example.com
Terminál
EMAIL_PROVIDER=sendgrid
SENDGRID_API_KEY=SG....
SENDGRID_FROM_EMAIL=noreply@example.com
Terminál
EMAIL_PROVIDER=ses
AWS_REGION=eu-central-1
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
VariableDefaultDescription
SUPPORTED_LOCALEShu,enComma-separated supported languages
DEFAULT_LOCALEhuDefault language
VariableDefaultDescription
LOG_TARGETSconsoleconsole, file, database (comma-separated)
LOG_LEVELerrordebug, info, warn, error, fatal
LOG_DIR./logsLog files directory
VariableRequiredDefaultDescription
ADMIN_USER_EMAILYesFirst admin user email (used during db:init / db:reset)
VariableDefaultDescription
DEV_MODEfalseEnable plugin loading from localhost URLs
VariableDefaultDescription
DEMO_MODEfalseEnable demo mode (indicates to users they’re in demo environment)
DEMO_RESET_HOUR4Hour (UTC, 0–23) when demo database resets daily
DEMO_RESET_UPLOADS_KEEPComma-separated upload subdirectories to preserve during reset
VariableDefaultDescription
PLUGIN_PACKAGE_EXTENSIONelyospkgPlugin package file extension
PLUGIN_MAX_SIZE10485760Maximum plugin size in bytes (max: 100 MB)
PLUGIN_STORAGE_DIR/var/webos/pluginsInstalled plugin files directory

Terminál
# Start full stack
bun docker:up
# Database only
bun docker:db
# Stop
bun docker:down
# Logs
bun docker:logs

PostgreSQL data is stored in the elyos-data Docker volume. For complete reset:

Terminál
docker compose -f docker/docker-compose.yml down -v

Section titled “Production Deployment Recommended Settings”
NODE_ENV=production
DEV_MODE=false
PUBLIC_SITE_ENABLED=false
REQUIRE_EMAIL_VERIFICATION=true
BETTER_AUTH_SECRET=<strong-random-value>
POSTGRES_PASSWORD=<strong-random-value>
ADMIN_USER_EMAIL=admin@example.com
LOG_TARGETS=console,database
LOG_LEVEL=info