Skip to content

Configuration reference ​

These variables are read by the current application's configuration files. Copy .env.example for installation, then set values for the actual runtime. Do not commit .env or secrets.

Application and services ​

VariablePurpose or default
APP_NAMEApplication name.
DEMO_MODEDefault false. Enabling it permits hourly destructive application-data resets and refuses web model deletion. Never enable for real school data.
APP_ENVRuntime environment; use production for live deployment.
APP_DEBUGKeep false in production.
APP_URLPublic application URL used to generate links.
APP_KEYApplication encryption key; retain it with recovery secrets.
APP_CURRENCYCurrency for financial amounts; default NGN.
APP_LOCALE, APP_FALLBACK_LOCALEDefault and fallback language; default en.
LOGO_PATH, FAVICON_PATHOptional branding asset paths.
DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORDDatabase connection.
CACHE_DRIVERCache store; default file. Use a shared store for multiple processes.
QUEUE_CONNECTIONQueue connection; default sync. Use a worker for asynchronous queues.
SESSION_DRIVER, SESSION_LIFETIMESession backend and lifetime.
SESSION_SECURE_COOKIE, SESSION_DOMAINSession cookie transport and domain.
FILESYSTEM_DISKDefault file disk; default local.
MAIL_MAILER, MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORDMail transport.
MAIL_FROM_ADDRESS, MAIL_FROM_NAMESender identity for application email.
ACCOUNT_INVITATION_EXPIRY_HOURSInvitation lifetime; default 72.
DOCUMENT_RENDEREROptional registered renderer key: browser or dompdf.
BROWSER_RENDERER_URL, BROWSER_RENDERER_TOKEN, BROWSER_RENDERER_TIMEOUTExternal browser renderer; timeout defaults to 120 seconds.
STRIPE_SECRET, STRIPE_WEBHOOK_SECRET, STRIPE_ENDPOINTStripe extension settings; not a complete checkout deployment.
MONITORING_SLOW_QUERY_MSSlow query threshold; default 500 milliseconds.
MONITORING_SLOW_REQUEST_QUERY_MSTotal request query-time threshold; default 2000 milliseconds.

This project reads CACHE_DRIVER, not CACHE_STORE. Check config/cache.php when configuring the runtime. Storage adapters must be installed and configured for the chosen remote disk.

The application time zone is UTC in config/app.php. A campus can select its own time zone for display and local dates. Use school_now(), school_today(), and school_time() for the appropriate campus-clock behavior. Stored timestamps and campus-local date fields have different purposes. The supported language keys are ar, bn, br, de, en, es, fr, ja, kr, nl, pl, pt, ro, ru, and zh. Use the application's keys exactly, including br and kr.

Detailed feature settings ​

The feature screen edits whole-feature switches only. Detailed settings are stored in FeatureSetting.config and read through FeatureManager. Portal flags use the PortalArea values: results, attendance, timetable, calendar, notices, invoices, documents, requests, library, boarding, graduation, programmes, and syllabi. An unspecified portal flag defaults to true. Attendance uses daily_register and lesson_register, also defaulting to true.

An authorized application integration can pass a complete configuration array to FeatureManager::enable(). This replaces the stored configuration array; it does not merge individual flags. For example, a stored portal configuration can include:

json
{
  "results": true,
  "invoices": true,
  "requests": false
}
{
  "results": true,
  "invoices": true,
  "requests": false
}

The omitted areas retain their default behavior. This is a stored feature configuration, not a block to paste into .env. Preserve existing choices when updating the array and record the responsible actor. See feature switches and security.

Backups and release checks ​

VariableDefault or purpose
BACKUP_DISK, BACKUP_PATHDestination disk and folder; local, backups.
BACKUP_KEY, BACKUP_REQUIRE_ENCRYPTIONBackup encryption key and requirement; requirement defaults to true.
BACKUP_MAX_AGE_HOURSFreshness limit; 26.
BACKUP_KEEP_DAYS, BACKUP_KEEP_MONTHSRetention intervals; 30 days and 12 months.
BACKUP_REHEARSAL_CONNECTIONIsolated restore connection.
BACKUP_REHEARSAL_HOST, BACKUP_REHEARSAL_DATABASE, BACKUP_REHEARSAL_USERNAME, BACKUP_REHEARSAL_PASSWORDDedicated rehearsal database settings.
BACKUP_REHEARSAL_PATH, BACKUP_REHEARSAL_MAX_AGE_DAYSRehearsal records and freshness; restore-rehearsals, 100.
RELEASE_RPO_HOURS, RELEASE_RTO_MINUTESRecovery targets; 24 hours and 240 minutes.
RELEASE_RETENTION_POLICY_VERSION, RELEASE_RETENTION_POLICY_APPROVEDRecorded owner-approved retention policy. Approval defaults to false.
SKUUL_UPDATE_REPOSITORYUpdater's GitHub source; default yungifez/skuul.

BACKUP_FILES_DISK is not currently read by config/monitoring.php. Configure the missing file-source setting before relying on --with-files. See backup operations for the complete procedure.

After changing configuration, refresh cached configuration in the correct runtime. Restart long-running workers so they load the new configuration. See deployment.