# Environment Variables
| Enviroment Variable | Description | Default Value |
|---|---|---|
APP_SITE_URL | Site URL. e.g. https://example.com, https://example.com:8080 | |
MONGO_URI | URI to connect to MongoDB. | mongodb://localhost/growi |
MONGO_MAX_POOL_SIZE | Maximum number of connections in the MongoDB connection pool. Raise it when a large environment with many active users runs short on concurrency. | 15 |
MONGO_MIN_POOL_SIZE | Minimum number of connections in the MongoDB connection pool. | 2 |
PASSWORD_SEED | A password seed used by the password hash generator. | |
SECRET_TOKEN | A secret key for verifying the integrity of signed cookies. | |
SESSION_NAME | The name of the session ID cookie to set in the response by Express. | connect.sid |
FORCE_WIKI_MODE | Forces wiki mode. | undefined |
: undefined Publicity will be configured by the admin security page settings | ||
: public Forces all pages to become public | ||
: private Forces all pages to become private | ||
FORMAT_NODE_LOG | If false, Output server log as JSON. (Enabled only when NODE_ENV=production) | true |
USER_UPPER_LIMIT | (TBD) | |
MIN_PASSWORD_LENGTH | Minimum password length that users can set. | 8 |
DEFAULT_EMAIL_PUBLISHED | Default setting for publishing new user email addresses. | true |
SSR_MAX_REVISION_BODY_LENGTH | Maximum number of characters for the body to be Server Side Rendered (SSR). Pages with a body length exceeding this value will no longer be SSR, but will still be rendered on the client side without any issues. | 3000 |
S2CMSG_PUBSUB_CONNECTIONS_LIMIT | Maximum number of connections for all clients that receive push messages. | 5000 |
S2CMSG_PUBSUB_CONNECTIONS_LIMIT_FOR_GUEST | Maximum number of connections for guest clients that receive push messages. | 2000 |
S2CMSG_PUBSUB_CONNECTIONS_LIMIT_FOR_ADMIN | Maximum number of connections for admin users in admin pages. (This is isolated from S2CMSG_PUBSUB_CONNECTIONS_LIMIT) | 100 |
AUDIT_LOG_ENABLED | If true, the Audit Log feature is enabled | false |
ACTIVITY_EXPIRATION_SECONDS | Number of seconds to keep the audit log. Audit logs are automatically deleted after a set number of seconds have elapsed since they were created. | 2592000 |
AUDIT_LOG_ACTION_GROUP_SIZE | Size of action groups to be collected in the audit log (can be SMALL, MEDIUM, or LARGE) | SMALL |
AUDIT_LOG_ADDITIONAL_ACTIONS | Add individual actions not included in the action group specified by AUDIT_LOG_ACTION_GROUP_SIZE, in CSV format (comma-separated string). | |
AUDIT_LOG_EXCLUDE_ACTIONS | Exclude individual actions in the action group specified by AUDIT_LOG_ACTION_GROUP_SIZE, in CSV format (comma-separated string). | |
TRUST_PROXY_BOOL | A boolean that can be set to the trust proxy settings for Express (opens new window) prioritized than TRUST_PROXY_CSV and TRUST_PROXY_HOPS. | |
TRUST_PROXY_CSV | A CSV value that can be set to the trust proxy settings for Express (opens new window) prioritized than TRUST_PROXY_HOPS. | |
TRUST_PROXY_HOPS | A number value that can be set to the trust proxy settings for Express (opens new window). | |
| Option for file uploading | ||
FILE_UPLOAD | Attached files storage. | aws |
: aws Amazon Web Service S3 (needs AWS settings on Admin page) | ||
: gcs Google Cloud Storage (needs settings with environment variables) | ||
: mongodb MongoDB GridFS (Setting-less) | ||
: local Server's Local file system (Setting-less) | ||
: none Disable file uploading | ||
MAX_FILE_SIZE | The maximum file size limit for uploads (bytes). | Infinity |
FILE_UPLOAD_TOTAL_LIMIT | Total capacity limit for uploads (bytes). | Infinity |
S3_OBJECT_ACL | Object ACL. (Reference: Canned ACL (opens new window)) Set private to disable. (Recommended) | public-read |
S3_LIFETIME_SEC_FOR_TEMPORARY_URL | Time to keep the cache of signed URLs (number of seconds) | 120 |
GCS_API_KEY_JSON_PATH | Path of the JSON file that contains service account key to authenticate to GCP API (opens new window) | |
GCS_BUCKET | Name of the GCS bucket | |
GCS_UPLOAD_NAMESPACE | Directory name to create in the bucket | |
GCS_LIFETIME_SEC_FOR_TEMPORARY_URL | Time to keep the cache of signed URLs (number of seconds) | 120 |
GCS_REFERENCE_FILE_WITH_RELAY_MODE | If true, the GROWI server sends the attachment data (relay mode). In the case of false (default value), the users download data from GCS directly by Signed URLs (opens new window) created by the server. | false |
GCS_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS | Prioritize env vars over values in DB for some GCS options. | false |
AZURE_TEANANT_ID | ID of the application's Microsoft Entra tenant. | |
AZURE_CLIENT_ID | ID of a Microsoft Entra application. | |
AZURE_CLIENT_SECRET | One of the application's client secrets. | |
AZURE_STORAGE_ACCOUNT_NAME | Storage Account Name | |
AZURE_STORAGE_CONTAINER_NAME | Container Name | |
AZURE_LIFETIME_SEC_FOR_TEMPORARY_URL | Time to keep the cache of signed URLs (number of seconds) | 120 |
AZURE_REFERENCE_FILE_WITH_RELAY_MODE | If true, the GROWI server sends the attachment data (relay mode). In the case of false (default value), the users download data from Azure(Blob) directly by Shared Access Signatured URLs (opens new window) created by the server. | false |
AZURE_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS | Prioritize env vars over values in DB for some Azure(Blob) options. | false |
| Option for full-text search | ||
ELASTICSEARCH_URI | URI to connect to Elasticsearch. | |
ELASTICSEARCH_VERSION | Elasticsearch major version that system connects to. (8 or 9 can be specified) | 9 |
ELASTICSEARCH_MAX_BODY_LENGTH_TO_INDEX | The maximum number of characters per page to create an index. Pages with a body length exceeding this value will not be indexed. | 100000 |
ELASTICSEARCH_REINDEX_BULK_SIZE | The number of page documents to process at once when reindexing | 100 |
ELASTICSEARCH_REINDEX_ON_BOOT | Recreate the index on system boot | false |
ELASTICSEARCH_REQUEST_TIMEOUT | Timeout for requests to the Elasticsearch server (msec) | 8000 |
ELASTICSEARCH_REJECT_UNAUTHORIZED | Turn off certificate verification when connecting with HTTPS schema. | false |
| Option to integrate with external systems | ||
REDIS_URI | URI to connect to Redis (use it as a session store instead of MongoDB). | |
NCHAN_URI | URI to connect to Nginx Nchan (opens new window) server. | |
HACKMD_URI | URI to connect to HackMD(CodiMD) (opens new window) server. | |
| This server must load the GROWI agent. Here's how to prepare it. | ||
HACKMD_URI_FOR_SERVER | URI to connect to HackMD(CodiMD) (opens new window) server from GROWI Express server. If not set, HACKMD_URI will be used. | |
PLANTUML_URI | URI to connect to PlantUML (opens new window) server. | |
DRAWIO_URI | URI to connect to diagrams.net(draw.io) (opens new window) server. | |
S2SMSG_PUBSUB_SERVER_TYPE | ||
: nchan Nginx Nchan (opens new window) | ||
: redis (Not implemented yet) | ||
S2SMSG_PUBSUB_NCHAN_PUBLISH_PATH | Publisher endpoint path for Nchan server | /pubsub |
S2SMSG_PUBSUB_NCHAN_SUBSCRIBE_PATH | Subscriber endpoint path for Nchan server | /pubsub |
S2SMSG_PUBSUB_NCHAN_CHANNEL_ID | The channel ID to connect to Nchan server | |
PROMSTER_ENABLED | Enable Promster (opens new window) server | false |
PROMSTER_PORT | The port to launch Promster server | 7788 |
SLACKBOT_TYPE | Type of Slack Bot to use when linking with Slack | |
SLACKBOT_WITHOUT_PROXY_SIGNING_SECRET | Signing Secret string used for Custom Bot without proxy environment | |
SLACKBOT_WITHOUT_PROXY_BOT_TOKEN | Bot Token string used for Custom Bot without proxy environment | |
SLACKBOT_WITH_PROXY_PROXY_URI | URI of slackbot-proxy server used for Custom Bot with proxy environment | |
SLACKBOT_WITH_PROXY_SALT_FOR_GTOP | Salt (for GROWI to Proxy) when generating tokens for the Official Bot or Custom Bot with proxy environment | gtop |
SLACKBOT_WITH_PROXY_SALT_FOR_PTOG | Salt (for GROWI to Proxy) when generating tokens for the Official Bot or Custom Bot with proxy environment | ptog |
| Options related to OpenTelemetry | ||
OPENTELEMETRY_ENABLED | Enables data transmission via OpenTelemetry. This option overrides the official OpenTelemetry SDK's OTEL_SDK_DISABLED. | true |
OPENTELEMETRY_IS_APP_SITE_URL_HASHED | Hashing the site URL in the data sent via OpenTelemetry. | false |
OPENTELEMETRY_ANONYMIZE_IN_BEST_EFFORT | Applies additional anonymization to data sent via OpenTelemetry. While sensitive information is not sent under normal circumstances, enabling this setting provides an extra layer of protection for environments requiring stricter data anonymization. Note that enabling this may have a slight impact on server performance. | false |
OTEL_EXPORTER_OTLP_ENDPOINT | Endpoint for data transmission | https://telemetry.growi.org |
Other environment variables starting with OTEL_ | Refer to the official OpenTelemetry documentation. | |
| Option for GROWI AI features | ||
AI_ENABLED | Enable or disable AI function | false |
OPENAI_SERVICE_TYPE | Type of OpenAI compatible service. As of v7.1.2, only openai is available. | openai |
: openai Use OpenAI API. | ||
OPENAI_API_KEY | API key for using OpenAI services. | |
OPENAI_CHAT_ASSISTANT_INSTRUCTIONS | Instructions used by Knowledge Assistant feature. | ref (opens new window) |
OPENAI_CHAT_ASSISTANT_MODEL | AI model used by Knowledge Assistant feature. | gpt-4o-mini |
OPENAI_THREAD_DELETION_CRON_EXPRESSION | Specifies the schedule for executing OpenAI thread deletion in cron format. | 0 * * * * |
OPENAI_THREAD_DELETION_BARCH_SIZE | Maximum number of threads to delete in a single process | 100 |
OPENAI_THREAD_DELETION_API_CALL_INTERVAL | Interval between thread deletion API calls (milliseconds) | 36000 |
OPENAI_VECTOR_STORE_FILE_DELETION_CRON_EXPRESSION | Specifies the schedule for executing Vector store file deletion in cron format. | 0 * * * * |
OPENAI_VECTOR_STORE_FILE_DELETION_BARCH_SIZE | Maximum number of Vector store files to delete in a single process | 100 |
OPENAI_VECTOR_STORE_FILE_DELETION_API_CALL_INTERVAL | Interval between Vector store file deletion API calls (milliseconds) | 36000 |
OPENAI_SEARCH_ASSISTANT_INSTRUCTIONS | Instructions used for Search Assistant functionality | '' (empty string) |
OPENAI_LIMIT_LEARNABLE_PAGE_COUNT_PER_ASSISTANT | Maximum number of pages that a single Knowledge Assistant can learn | 3000 |
| GROWI AI Agent options | ||
AI_ENABLED | Enables GROWI AI Agent when true. | false |
AI_PROVIDERS | Specifies per-provider settings (enabling, Azure OpenAI settings, etc.) as JSON. Example: {"openai":{"enabled":true},"azure-openai":{"enabled":true,"azureOpenaiSettings":{"resourceName":"<resource-name>"}}} | |
AI_PROVIDER_API_KEYS | Specifies per-provider API keys as JSON. Example: {"openai":"sk-xxxx","anthropic":"sk-ant-xxxx"} | |
AI_ALLOWED_MODELS | Specifies the list of models that users can select, as a JSON array. Example: [{"provider":"openai","modelId":"gpt-4o","isDefault":true},{"provider":"anthropic","modelId":"claude-sonnet-4-5"}] | [] |
AI_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS | When true, the connection settings (enabling the AI feature, enabling providers, and API keys) reference only the environment variable values, not the values in the local DB. | false |
AI_MODEL_CATALOG_REFRESH_ON_STARTUP | When true, refreshes the model catalog on startup. | false |
AI_MODEL_CATALOG_REFRESH_CRON_SCHEDULE | Specifies the schedule for periodically refreshing the model catalog in cron format. Leave empty to disable periodic refresh. | 0 4 * * * |
| Option (Overwritable in admin page) | ||
APP_SITE_URL_USES_ONLY_ENV_VARS | Prioritize env vars over values in DB for Site URL | false |
FILE_UPLOAD_USES_ONLY_ENV_VAR_FOR_FILE_UPLOAD_TYPE | Prioritize env var over value in DB for File Upload Type | false |
LOCAL_STRATEGY_ENABLED | Enable or disable ID/Pass login | |
LOCAL_STRATEGY_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS | Prioritize env vars over values in DB for some ID/Pass login options | false |
SAML_ENABLED | Enable or disable SAML | |
SAML_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS | Prioritize env vars over values in DB for some SAML options | false |
SAML_ENTRY_POINT | IdP entry point | |
SAML_ISSUER | Issuer string to supply to IdP | |
SAML_ATTR_MAPPING_ID | Attribute map for ID | |
SAML_ATTR_MAPPING_USERNAME | Attribute map for username | |
SAML_ATTR_MAPPING_MAIL | Attribute map for email | |
SAML_ATTR_MAPPING_FIRST_NAME | Attribute map for first name | |
SAML_ATTR_MAPPING_LAST_NAME | Attribute map for last name | |
SAML_CERT | PEM-encoded X.509 signing certificate string to validate the response from IdP | |
OAUTH_GOOGLE_CLIENT_ID | Google API client ID for OAuth login. | |
OAUTH_GOOGLE_CLIENT_SECRET | Google API client secret for OAuth login. | |
OAUTH_GITHUB_CLIENT_ID | GitHub API client ID for OAuth login. | |
OAUTH_GITHUB_CLIENT_SECRET | GitHub API client secret for OAuth login. | |
OAUTH_TWITTER_CONSUMER_KEY | Twitter consumer key(API key) for OAuth login. | |
OAUTH_TWITTER_CONSUMER_SECRET | Twitter consumer secret(API secret) for OAuth login. | |
| GROWI Vault options | ||
VAULT_ENABLED | Enables the GROWI Vault feature (fixed at deploy time; no runtime toggle). | false |
VAULT_MANAGER_ENDPOINT | URL the GROWI app uses to reach the vault-manager service (required to enable Vault). | |
VAULT_MANAGER_INTERNAL_SECRET | Shared secret for app-to-vault-manager authentication. Must be set in production and kept confidential. | |
VAULT_REPO_PATH | Filesystem path of the bare Git repository managed by vault-manager (required; vault-manager does not start without it. The conventional value is /data/vault-repo.git). | |
VAULT_BOOTSTRAP_ON_START | Run the initial bootstrap at startup (true / false / force). | false |
VAULT_BOOTSTRAP_RETRY_MAX | Maximum number of bootstrap retry attempts. | 5 |
VAULT_BOOTSTRAP_RETRY_BASE_MS | Base backoff delay between bootstrap retries (ms). | 30000 |
VAULT_BOOTSTRAP_RETRY_MAX_MS | Cap on the bootstrap retry backoff delay (ms). | 1800000 |
VAULT_BOOTSTRAP_RETRY_DISABLED | Disables automatic bootstrap retries. | false |
VAULT_BOOTSTRAP_HEARTBEAT_INTERVAL_MS | Interval for bootstrap heartbeat writes (ms). | 10000 |
VAULT_BOOTSTRAP_HEARTBEAT_STALE_MS | Age after which a running bootstrap heartbeat is considered stale (ms). | 60000 |
VAULT_DRIFT_DETECTION_DISABLED | Disables the post-bootstrap drift detection sweep. | false |
VAULT_DRIFT_DETECTION_INTERVAL_MS | Interval between drift detection ticks (ms). | 300000 |
VAULT_DRIFT_MAX_PAGES_PER_TICK | Maximum pages scanned per drift detection tick. | 10000 |
VAULT_RECONCILE_MAX_PAGES_PER_USER_REQUEST | Maximum pages for a user-triggered reconcile request. | 1000 |
VAULT_RECONCILE_MAX_PAGES_PER_ADMIN_REQUEST | Maximum pages for an admin-triggered reconcile request. | 1000 |
VAULT_RECONCILE_MAX_CONCURRENT_PER_USER | Maximum concurrent reconcile jobs per user. | 1 |
VAULT_RECONCILE_MAX_CONCURRENT_SYSTEM | Maximum concurrent reconcile jobs system-wide. | 3 |
VAULT_RECONCILE_CHUNK_SIZE | Page batch size per reconcile processing chunk. | 100 |
VAULT_RECONCILE_HISTORY_RETENTION_DAYS | Days to retain reconcile history log entries. | 30 |
VAULT_RECONCILE_REJECT_WHEN_BOOTSTRAP_NOT_DONE | Rejects reconcile requests while bootstrap is incomplete. | true |
VAULT_RECONCILE_ADMIN_BYPASS_CAPACITY_LIMIT | Lets admin reconcile requests bypass the system concurrency limit. | false |
VAULT_MAINTENANCE_TICK_MS | vault-manager maintenance loop tick interval (ms); drives squash/gc checks. | 300000 |
VAULT_SQUASH_COMMIT_THRESHOLD | Commit count per namespace above which history is squashed. | 1000 |
VAULT_SQUASH_AGE_HOURS | Hours since the last squash that forces another squash. | 1 |
VAULT_GC_LOOSE_OBJECT_THRESHOLD | Loose-object count above which git gc runs. | 50000 |
VAULT_GC_INTERVAL_HOURS | Hours between git gc runs. | 24 |