Trilium supports configuration via a file named `config.ini` and environment variables. This document provides a comprehensive reference for all configuration options.

## Location of the configuration file

The configuration file is not located in the same directory as the application. Instead, the `config.ini` is located in the Data directory. As such, the configuration file is only available after starting the application and creating a database.

## Configuration Precedence

Configuration values are loaded in the following order of precedence (highest to lowest):

1. Environment variables (checked first)
2. config.ini file values
3. Default values

## Environment Variable Patterns

Trilium supports multiple environment variable patterns for flexibility. The primary pattern is: `TRILIUM_[SECTION]_[KEY]`

Where:

- `SECTION` is the INI section name in UPPERCASE
- `KEY` is the camelCase configuration key converted to UPPERCASE (e.g., `instanceName` → `INSTANCENAME`)

Additionally, shorter aliases are available for common configurations (see Alternative Variables section below).

## Environment Variable Reference

### General Section

Environment Variable | Type | Default | Description
--- | --- | --- | ---
`TRILIUM_GENERAL_INSTANCENAME` | string | "" | Instance name for API identification
`TRILIUM_GENERAL_NOAUTHENTICATION` | boolean | false | Disable authentication (server only)
`TRILIUM_GENERAL_NOBACKUP` | boolean | false | Disable automatic backups
`TRILIUM_GENERAL_NODESKTOPICON` | boolean | false | Disable desktop icon creation
`TRILIUM_GENERAL_READONLY` | boolean | false | Enable read-only mode

### Network Section

Environment Variable | Type | Default | Description
--- | --- | --- | ---
`TRILIUM_NETWORK_HOST` | string | "0.0.0.0" | Server host binding
`TRILIUM_NETWORK_PORT` | string | "8080" | Server port
`TRILIUM_NETWORK_HTTPS` | boolean | false | Enable HTTPS
`TRILIUM_NETWORK_CERTPATH` | string | "" | SSL certificate path
`TRILIUM_NETWORK_KEYPATH` | string | "" | SSL key path
`TRILIUM_NETWORK_TRUSTEDREVERSEPROXY` | boolean/string | false | Reverse proxy trust settings
`TRILIUM_NETWORK_CORSALLOWORIGIN` | string | "" | CORS allowed origins
`TRILIUM_NETWORK_CORSALLOWMETHODS` | string | "" | CORS allowed methods
`TRILIUM_NETWORK_CORSALLOWHEADERS` | string | "" | CORS allowed headers
`TRILIUM_NETWORK_CORSRESOURCEPOLICY` | string | same-origin | CORS Resource Policy allows same-origin/same-site/cross-origin as values, will error if not

### Session Section

Environment Variable | Type | Default | Description
--- | --- | --- | ---
`TRILIUM_SESSION_COOKIEMAXAGE` | integer | 1814400 | Session cookie max age in seconds (21 days)

### Sync Section

Environment Variable | Type | Default | Description
--- | --- | --- | ---
`TRILIUM_SYNC_SYNCSERVERHOST` | string | "" | Sync server host URL
`TRILIUM_SYNC_SYNCSERVERTIMEOUT` | string | "120000" | Sync server timeout in milliseconds
`TRILIUM_SYNC_SYNCPROXY` | string | "" | Sync proxy URL

### MultiFactorAuthentication Section

See Signing in with OpenID Connect.

### Logging Section

Environment Variable | Type | Default | Description
--- | --- | --- | ---
`TRILIUM_LOGGING_RETENTIONDAYS` | integer | 90 | Number of days to retain log files

### Development Section

Environment Variable | Type | Default | Description
--- | --- | --- | ---
`TRILIUM_MANUAL_DB_MIGRATION` | boolean | false | If `true`, the application will not start if automatic database migrations are pending and would modify the database schema.

## Alternative Environment Variables

The following alternative environment variable names are also supported and work identically to their longer counterparts:

### Network CORS Variables

- `TRILIUM_NETWORK_CORS_ALLOW_ORIGIN` (alternative to `TRILIUM_NETWORK_CORSALLOWORIGIN`)
- `TRILIUM_NETWORK_CORS_ALLOW_METHODS` (alternative to `TRILIUM_NETWORK_CORSALLOWMETHODS`)
- `TRILIUM_NETWORK_CORS_ALLOW_HEADERS` (alternative to `TRILIUM_NETWORK_CORSALLOWHEADERS`)
- `TRILIUM_NETWORK_CORS_RESOURCE_POLICY` (alternative to `TRILIUM_NETWORK_CORSRESOURCEPOLICY`)

### Sync Variables

- `TRILIUM_SYNC_SERVER_HOST` (alternative to `TRILIUM_SYNC_SYNCSERVERHOST`)
- `TRILIUM_SYNC_SERVER_TIMEOUT` (alternative to `TRILIUM_SYNC_SYNCSERVERTIMEOUT`)
- `TRILIUM_SYNC_SERVER_PROXY` (alternative to `TRILIUM_SYNC_SYNCPROXY`)

### OAuth/MFA Variables

- `TRILIUM_OAUTH_BASE_URL` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL`)
- `TRILIUM_OAUTH_CLIENT_ID` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID`)
- `TRILIUM_OAUTH_CLIENT_SECRET` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET`)
- `TRILIUM_OAUTH_ISSUER_BASE_URL` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL`)
- `TRILIUM_OAUTH_ISSUER_NAME` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME`)
- `TRILIUM_OAUTH_ISSUER_ICON` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON`)

### Logging Variables

- `TRILIUM_LOGGING_RETENTION_DAYS` (alternative to `TRILIUM_LOGGING_RETENTIONDAYS`)

## Boolean Values

Boolean environment variables accept the following values:

- True: `"true"`, `"1"`, `1`
- False: `"false"`, `"0"`, `0`
- Any other value defaults to `false`

## Using Environment Variables

Both naming patterns are fully supported and can be used interchangeably:

- The longer format follows the section/key pattern for consistency with the INI file structure
- The shorter alternatives provide convenience for common configurations
- You can use whichever format you prefer - both are equally valid

## Examples

### Docker Compose Example

    services:
      trilium:
        image: triliumnext/trilium
        environment:
          # Using full format
          TRILIUM_GENERAL_INSTANCENAME: "My Trilium Instance"
          TRILIUM_NETWORK_PORT: "8080"
          TRILIUM_NETWORK_CORSALLOWORIGIN: "https://myapp.com"
          TRILIUM_SYNC_SYNCSERVERHOST: "https://sync.example.com"
          TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL: "https://auth.example.com"

          # Or using shorter alternatives (equally valid)
          # TRILIUM_NETWORK_CORS_ALLOW_ORIGIN: "https://myapp.com"
          # TRILIUM_SYNC_SERVER_HOST: "https://sync.example.com"
          # TRILIUM_OAUTH_BASE_URL: "https://auth.example.com"

### Shell Export Example

    # Using either format
    export TRILIUM_GENERAL_NOAUTHENTICATION=false
    export TRILIUM_NETWORK_HTTPS=true
    export TRILIUM_NETWORK_CERTPATH=/path/to/cert.pem
    export TRILIUM_NETWORK_KEYPATH=/path/to/key.pem
    export TRILIUM_LOGGING_RETENTIONDAYS=30

    # Start Trilium
    npm start

## config.ini Reference

For the complete list of configuration options and their INI file format, please review the config-sample.ini file in the Trilium repository