Skip to content

Variables Reference

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

Detailed documentation:


Racona 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://racona:racona123@localhost:5432/racona
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://racona:racona123@localhost:5432/racona
BETTER_AUTH_SECRET=generated-random-secret
BETTER_AUTH_URL=http://localhost:3000
ORIGIN=http://localhost:5173

VariableRequiredDefaultDescription
NODE_ENVYes—development, production, or test
BODY_SIZE_LIMITNo10485760Maximum request size in bytes (10 MB)
RACONA_PORTNo3000Application port (Docker host port mapping)
APP_URLProd—Base URL (e.g., https://racona.example.com)
ORIGINYes—CSRF protection — must match application URL
VariableRequiredDefaultDescription
DATABASE_URLYes—PostgreSQL connection string: postgresql://USER:PASS@HOST:PORT/DB
POSTGRES_USERYes—PostgreSQL username
POSTGRES_PASSWORDYes—PostgreSQL password
POSTGRES_HOSTYeslocalhostPostgreSQL server address
POSTGRES_DBYes—PostgreSQL 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_NAMENoRaconaDisplayed application name
APP_LOGO_URLNo—Logo URL — absolute or relative
EMAIL_USE_LOGONofalseUse logo image in emails instead of text
VariableRequiredDefaultDescription
BETTER_AUTH_SECRETProd—Token signing secret (openssl rand -base64 32)
BETTER_AUTH_URLYes—Auth callback base URL
REGISTRATION_ENABLEDNotrueEnable registration
SOCIAL_LOGIN_ENABLEDNotrueEnable Google sign-in
GOOGLE_CLIENT_IDNo—Google OAuth client ID
GOOGLE_CLIENT_SECRETNo—Google 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_EMAILYes—First 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_KEEP—Comma-separated upload subdirectories to preserve during reset
VariableDefaultDescription
PLUGIN_PACKAGE_EXTENSIONraconapkgPlugin package file extension
PLUGIN_MAX_SIZE10485760Maximum plugin size in bytes (max: 100 MB)
PLUGIN_STORAGE_DIR/var/webos/pluginsInstalled plugin files directory
PLUGIN_FILE_MAX_BYTES10485760Size limit of a file stored by a plugin (file_access), in bytes. Must not exceed BODY_SIZE_LIMIT

Plugins with the file_access permission store files under uploads/plugin-files/ (see File Storage). Back up the whole uploads folder: it holds these files, backgrounds, avatars and the installed plugins.


Plugins can declare scheduled jobs in their manifest (scheduledJobs, scheduler permission, see Scheduled Jobs); the core also runs its own maintenance jobs this way. The scheduler runs inside the app process and keeps its state in the database, so no system cron is needed. Jobs are locked in the database: with several app instances a job still runs only once.

VariableDefaultDescription
SCHEDULER_ENABLEDtrueRun scheduled jobs on this instance
SCHEDULER_TICK_SECONDS30How often due jobs are checked (5–3600 s)
SCHEDULER_START_DELAY_SECONDS15Delay of the first check after start-up (s)
SCHEDULER_MAX_CONCURRENT2Jobs running at the same time per instance (1–20)
SCHEDULER_JOB_TIMEOUT_SECONDS600Default job timeout when the job does not set its own (10–3600 s)
SCHEDULER_MISSED_GRACE_SECONDS300Jobs with catchUp: "skip" are skipped when later than this (s)
SCHEDULER_DEFAULT_TIMEZONEEurope/BudapestDefault IANA timezone of cron expressions
SCHEDULER_RUN_RETENTION_DAYS30Days to keep the run history

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 racona-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