Skip to main content

Configuration

SuperTokens Core is configured using a config.yaml file and environment variables. This page documents all available configuration options.

Configuration file location

The default configuration file is located at:
You can override the location using the --with-config flag:

Core configuration

Service settings

integer
default:"3567"
The port on which SuperTokens Core runs
string
default:"localhost"
The host on which SuperTokens Core runs. Can be localhost, a domain name, 0.0.0.0, or an IP address
string
default:""
Base path to prepend to all API endpoints
With this config, endpoints become /auth/recipe/signup instead of /recipe/signup
integer
default:"10"
Maximum thread pool size for incoming HTTP requests

Logging

string
default:"{installation}/logs/info.log"
Path for INFO level logs. Set to "null" to log to standard output
string
default:"{installation}/logs/error.log"
Path for ERROR level logs. Set to "null" to log to standard error
string
default:"INFO"
Logging level. Options: DEBUG, INFO, WARN, ERROR, NONE

Authentication configuration

Access tokens

integer
default:"3600"
DIFFERENT_ACROSS_APPS: Time in seconds for access token validity
integer
default:"168"
DIFFERENT_ACROSS_APPS: Time in hours for signing key rotation
Shorter intervals improve security but increase database queries for key management

Refresh tokens

number
default:"144000"
DIFFERENT_ACROSS_APPS: Time in minutes for refresh token validity

API keys

string
default:"(none)"
DIFFERENT_ACROSS_APPS: Comma-separated API keys for authenticating Backend SDK requests
Keys must be at least 20 characters and contain only alphanumeric characters, =, and -

Password authentication

Password hashing

string
default:"BCRYPT"
DIFFERENT_ACROSS_APPS: Password hashing algorithm. Options: BCRYPT, ARGON2
Argon2 is more secure but uses more CPU. Choose based on your threat model and server capacity

BCrypt settings

integer
default:"11"
Number of rounds for BCrypt hashing. Higher values are more secure but slower

Argon2 settings

integer
default:"1"
Number of iterations for Argon2 hashing
integer
default:"87795"
Memory usage in KB for Argon2 (default: 85 MB)
integer
default:"2"
Parallelism factor for Argon2
integer
default:"1"
Number of concurrent Argon2 hash operations allowed

Password reset

integer
default:"3600000"
DIFFERENT_ACROSS_TENANTS: Password reset token lifetime in milliseconds

Passwordless authentication

integer
default:"900000"
DIFFERENT_ACROSS_TENANTS: Passwordless code validity in milliseconds
integer
default:"5"
DIFFERENT_ACROSS_TENANTS: Maximum code input attempts before requiring restart

TOTP (MFA)

integer
default:"5"
DIFFERENT_ACROSS_TENANTS: Maximum invalid TOTP attempts before rate limiting
integer
default:"900"
DIFFERENT_ACROSS_TENANTS: Rate limit duration in seconds after max attempts reached

Email verification

integer
default:"86400000"
DIFFERENT_ACROSS_TENANTS: Email verification token lifetime in milliseconds

IP filtering

string
default:"null"
DIFFERENT_ACROSS_TENANTS: Regex pattern for allowed IP addresses
string
default:"null"
DIFFERENT_ACROSS_TENANTS: Regex pattern for denied IP addresses

OAuth configuration

string
default:"null"
Encryption key for OAuth client secrets stored in database
Required if you’re using OAuth provider features. Must be exactly 32 characters
string
default:"null"
URL for OAuth provider public service
string
default:"null"
URL for OAuth provider admin service

SAML configuration

string
default:"https://saml.supertokens.com"
Service provider entity ID for SAML
integer
default:"300000"
Duration in milliseconds for SAML claims validity

Bulk import

integer
default:"(CPU cores)"
DIFFERENT_ACROSS_APPS: Number of parallel threads for bulk user migration
integer
default:"8000"
DIFFERENT_ACROSS_APPS: Number of users to load per batch during migration

Monitoring

boolean
default:"false"
DIFFERENT_ACROSS_APPS: Disable anonymous telemetry
Learn more about telemetry: SuperTokens Wiki
string
default:"null"
OpenTelemetry collector URL for distributed tracing
boolean
default:"false"
Enable deadlock detection logging

Environment variables

Most configuration options can be set via environment variables using uppercase with underscores:
Environment variables take precedence over config.yaml settings

Configuration scopes

Configuration parameters are marked with scope annotations:
  • DIFFERENT_ACROSS_APPS: Can be different for each app in multi-tenancy setup
  • DIFFERENT_ACROSS_TENANTS: Can be different for each tenant within an app
  • (No annotation): Global configuration, same across all apps and tenants

Example configurations

Development

config.yaml

Production

config.yaml

High security

config.yaml

Validation

Validate your configuration by starting SuperTokens Core:
Check the logs for any configuration errors or warnings.

Database setup

Configure your database connection

Docker deployment

Use environment variables with Docker

Self-hosting

Deploy SuperTokens Core to production

Security

Learn about security best practices