Skip to main content

Configuration

Thunder's behavior is controlled by a combination of default configurations and deployment-specific overrides. This page covers all available configuration options and how to customize them.

Configuration System​

Thunder uses a two-tier configuration system:

  1. Default Configuration — Provides sensible defaults for all settings. These are built into Thunder.
  2. Deployment Configuration — Located at repository/conf/deployment.yaml in your Thunder installation directory. This file overrides specific defaults for your deployment.
note

Only settings you want to override need to be specified in deployment.yaml. All other values will use the built-in defaults.

tip

Thunder must be restarted after any configuration change.

Server Configuration​

Controls the Thunder server's network settings and identity.

SettingDefaultDescription
server.hostnamelocalhostHostname or IP address the server binds to
server.port8090Port the server listens on
server.http_onlyfalseIf true, disables HTTPS and uses HTTP only (not recommended for production)
server.identifierdefault-deploymentUnique identifier for this deployment instance

Gate Client Configuration​

Configures the connection to Thunder Gate (the login UI).

SettingDefaultDescription
gate_client.hostnamelocalhostHostname where Thunder Gate is hosted
gate_client.port8090Port where Thunder Gate is accessible
gate_client.schemehttpsProtocol scheme (http or https)
gate_client.path/gateBase path for Thunder Gate

TLS Configuration​

Controls HTTPS/TLS settings for secure communication.

SettingDefaultDescription
tls.min_version1.3Minimum TLS version to accept (1.2 or 1.3)
tls.cert_filerepository/resources/security/server.certPath to TLS certificate file
tls.key_filerepository/resources/security/server.keyPath to TLS private key file
Self-Signed Certificate

Thunder ships with a self-signed certificate for local development at repository/resources/security/server.cert. For production, replace it with a certificate from a trusted Certificate Authority.

Database Configuration​

Thunder uses three separate databases for different purposes. Each database can be configured independently.

Config Database​

Stores identity provider configurations, applications, and authentication flows.

SettingDefaultDescription
database.config.typesqliteDatabase type (sqlite or postgres)
database.config.hostname""Database server hostname (for PostgreSQL)
database.config.port0Database server port (for PostgreSQL)
database.config.name""Database name (for PostgreSQL)
database.config.username""Database username (for PostgreSQL)
database.config.password""Database password (for PostgreSQL)
database.config.sslmode""SSL mode for PostgreSQL (disable, require, verify-ca, verify-full)
database.config.pathrepository/database/configdb.dbSQLite database file path
database.config.options_journal_mode=WAL&_busy_timeout=5000&_pragma=foreign_keys(1)Database-specific connection options
database.config.max_open_conns500Maximum number of open connections
database.config.max_idle_conns100Maximum number of idle connections
database.config.conn_max_lifetime3600Maximum connection lifetime in seconds

Runtime Database​

Stores runtime data like sessions, tokens, and temporary data.

SettingDefaultDescription
database.runtime.typesqliteDatabase type (sqlite or postgres)
database.runtime.hostname""Database server hostname (for PostgreSQL)
database.runtime.port0Database server port (for PostgreSQL)
database.runtime.name""Database name (for PostgreSQL)
database.runtime.username""Database username (for PostgreSQL)
database.runtime.password""Database password (for PostgreSQL)
database.runtime.sslmode""SSL mode for PostgreSQL
database.runtime.pathrepository/database/runtimedb.dbSQLite database file path
database.runtime.options_journal_mode=WAL&_busy_timeout=5000&_pragma=foreign_keys(1)Database-specific connection options
database.runtime.max_open_conns500Maximum number of open connections
database.runtime.max_idle_conns100Maximum number of idle connections
database.runtime.conn_max_lifetime3600Maximum connection lifetime in seconds

User Database​

Stores user profiles and credentials.

SettingDefaultDescription
database.user.typesqliteDatabase type (sqlite or postgres)
database.user.hostname""Database server hostname (for PostgreSQL)
database.user.port0Database server port (for PostgreSQL)
database.user.name""Database name (for PostgreSQL)
database.user.username""Database username (for PostgreSQL)
database.user.password""Database password (for PostgreSQL)
database.user.sslmode""SSL mode for PostgreSQL
database.user.pathrepository/database/userdb.dbSQLite database file path
database.user.options_journal_mode=WAL&_busy_timeout=5000&_pragma=foreign_keys(1)Database-specific connection options
database.user.max_open_conns500Maximum number of open connections
database.user.max_idle_conns100Maximum number of idle connections
database.user.conn_max_lifetime3600Maximum connection lifetime in seconds

Cache Configuration​

Thunder includes an in-memory caching layer to improve performance.

SettingDefaultDescription
cache.disabledfalseIf true, disables caching entirely
cache.typeinmemoryCache type (currently only inmemory is supported)
cache.size1000Maximum number of cache entries
cache.ttl3600Default time-to-live for cache entries in seconds
cache.eviction_policyLRUCache eviction policy (LRU - Least Recently Used)
cache.cleanup_interval300Interval in seconds to clean up expired entries

JWT Configuration​

Controls JWT (JSON Web Token) generation and validation.

SettingDefaultDescription
jwt.validity_period3600Default JWT validity period in seconds (1 hour)
jwt.audienceapplicationDefault audience claim for JWTs
jwt.preferred_key_iddefault-keyKey ID to use for signing JWTs
jwt.leeway30Clock skew tolerance in seconds for token validation

OAuth Configuration​

OAuth 2.0 and OpenID Connect settings.

SettingDefaultDescription
oauth.refresh_token.renew_on_grantfalseIf true, issues a new refresh token on each access token grant
oauth.refresh_token.validity_period86400Refresh token validity period in seconds (24 hours)
oauth.authorization_code.validity_period600Authorization code validity period in seconds (10 minutes)
oauth.dcr.insecurefalseIf true, allows insecure dynamic client registration (development only)

Flow Configuration​

Authentication and registration flow settings.

SettingDefaultDescription
flow.default_auth_flow_handledefault-basic-flowHandle of the default authentication flow
flow.user_onboarding_flow_handledefault-user-onboardingHandle of the default user onboarding flow
flow.max_version_history10Maximum number of flow versions to retain
flow.auto_infer_registrationtrueIf true, automatically infers registration from authentication flows

User Configuration​

User management settings.

SettingDefaultDescription
user.indexed_attributes["username", "email", "mobileNumber", "sub"]User attributes that are indexed for fast lookups

Declarative Resources​

Controls declarative configuration support.

SettingDefaultDescription
declarative_resources.enabledfalseIf true, enables declarative resource configuration

Resource Configuration​

Authorization resource settings.

SettingDefaultDescription
resource.default_delimiter:Default delimiter for resource hierarchies

Observability Configuration​

Monitoring and observability settings.

SettingDefaultDescription
observability.enabledfalseIf true, enables observability features
observability.output.console.enabledfalseIf true, outputs observability data to console
observability.output.console.formatjsonConsole output format (json or text)
observability.output.console.categories["observability.all"]Observability categories to output

Crypto Configuration​

Cryptographic settings for encryption and signing.

Encryption​

SettingDefaultDescription
crypto.encryption.keyfile://repository/resources/security/crypto.keyPath to encryption key file

Password Hashing​

SettingDefaultDescription
crypto.password_hashing.algorithmPBKDF2Password hashing algorithm
crypto.password_hashing.parameters.iterations600000Number of hashing iterations
crypto.password_hashing.parameters.key_size32Derived key size in bytes
crypto.password_hashing.parameters.salt_size16Salt size in bytes

Signing Keys​

Signing keys are configured as an array. Each key has the following properties:

SettingDescription
crypto.keys[].idUnique identifier for the key
crypto.keys[].cert_filePath to certificate file
crypto.keys[].key_filePath to private key file

Default Key:

- id: "default-key"
cert_file: "repository/resources/security/signing.cert"
key_file: "repository/resources/security/signing.key"

Email Configuration​

Controls email sending capabilities (e.g., for magic link authentication, user invitations).

SettingDefaultDescription
email.smtp.host""SMTP server hostname
email.smtp.port0SMTP server port (e.g., 587 for STARTTLS)
email.smtp.username""SMTP authentication username
email.smtp.password""SMTP authentication password
email.smtp.from_address""Sender email address
email.smtp.enable_start_tlstrueEnable STARTTLS encryption
email.smtp.enable_authenticationtrueEnable SMTP authentication

Example:

email:
smtp:
host: "smtp.example.com"
port: 587
username: "yourUsername"
password: "yourPassword"
from_address: "yourEmail"
enable_start_tls: true
enable_authentication: true
note

Transport Mode: Referencing keys enable_start_tls and enable_authentication, only explicit STARTTLS is supported (set enable_start_tls: true). Implicit SMTPS (port 465) is not supported by this transport.

note

The email configuration is optional. If not provided, features that depend on email (e.g., magic link, user invitations) will not be available.

Authentication Provider Configuration​

External authentication provider settings.

SettingDefaultDescription
authn_provider.typedefaultProvider type (default or rest)
authn_provider.rest.base_url""Base URL for REST authentication provider
authn_provider.rest.timeout10Request timeout in seconds
authn_provider.rest.security.api_key""API key for REST provider authentication

CORS Configuration​

Cross-Origin Resource Sharing settings (typically defined in deployment.yaml).

SettingDescription
cors.allowed_originsArray of allowed origins for CORS requests

Example:

cors:
allowed_origins:
- "https://localhost:3000"
- "http://localhost:5173"

Passkey Configuration​

WebAuthn/Passkey settings (typically defined in deployment.yaml).

SettingDescription
passkey.allowed_originsArray of allowed origins for passkey operations

Example:

passkey:
allowed_origins:
- "https://localhost:8090"
Thunder LogoThunder Logo

Work together seamlessly with secure your applications with ease.

Terms & Policy

Pages

HomeDocsAPIsSDKs
© WSO2 LLC. All rights reserved.