Uh oh!
There was an error while loading. Please reload this page.
docs: document configuration - #787
Merged
Merged
Conversation
Where configuration lives — the environment, config.xml and the Config table — what each holds, and why the ordering between them is fixed. Names all 96 config.xml settings by area, the thirteen environment variables the code actually reads, and the defaults behind values people ask about. Also records that .env.example documents three variables nothing reads (BACKUP_PATH, TMP_PATH, MIMETYPES_FILE) and names actions.xml where the default is actions.yaml.
blaiprforce-pushed
the
docs/configuration-reference
branch
from
August 16, 2026 14:17
d0ed834 to
17c3403CompareUh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ConfigDataInterfacedeclares 96 setting constants and the code reads thirteen environment variables. None of it was documented:install.mdcovers installing, not operating.The three places
Configuration lives in three, and which one holds a value follows from when it has to be known. The environment carries paths and database credentials — everything needed before
config.xmlcan be read, since that file's own location comes from it.config.xmlholds the settings an administrator sets. TheConfigtable holds what the application maintains itself, including the master password hash.Environment variables
All thirteen, with their real defaults, read out of the
getFromEnv()call sites rather than from the example file.Two behaviours are documented because they are easy to trip over:
.envis loaded withDotenv::createImmutable(), which populates$_ENV/$_SERVERbut notgetenv(); and a boolean default is parsed rather than cast, since(bool)"false"istruein PHP andDEBUG=falsewould otherwise enable debug mode..env.exampleis out of step with the code, which the page says plainly. It documentsBACKUP_PATH,TMP_PATHandMIMETYPES_FILE— none of which appear in anygetFromEnv()call — and givesACTIONS_FILE="actions.xml"where the default isactions.yaml. Correcting that file is a separate change; this one documents what is true.Settings
All 96 are named, grouped by area, so the page works as something to grep against. Coverage was checked programmatically against the constants in
ConfigDataInterface, which is how the one initially missing (debug, the config-file setting, distinct from theDEBUGenvironment variable) was found.The defaults table carries only values verified against
ConfigData:accountCount12,sessionTimeout300,publinksMaxViews3,accountExpireTime10368000 — which is 120 days, computed rather than asserted — and the rest.Three settings that look like defects
accountFullGroupAccesswidens secondary-group access beyond a user's main group, which is often the real reason a colleague can see an account you cannot.accountCountis an unbounded free number that sets how much work a listing does. Andmaintenancecloses the application.That last one was wrong on the first pass: described as locking out everyone but administrators, which is what the name suggests.
checkMaintenanceMode()gates on the application lock holding a specific user id — the person who enabled it — and only for AJAX requests; ordinary page requests are refused for everyone, that user included. Corrected here, along with the note that clearing the flag is not enough if the lock outlives it.