Skip to content

Configuration

Every config key in the backend, auto-generated from source. Each key can be overridden via environment variable — the system checks for ENV_VAR_NODEENV first (e.g., DATABASE_URL_TEST when NODE_ENV=test), then ENV_VAR, then falls back to the default.

actions

Source: packages/keryx/config/actions.ts

KeyEnvironment VariableDefault
timeoutACTION_TIMEOUT300_000
fanOutBatchSizeACTION_FAN_OUT_BATCH_SIZE100
fanOutResultTtlACTION_FAN_OUT_RESULT_TTL600

channels

Source: packages/keryx/config/channels.ts

KeyEnvironment VariableDefault
presenceTTLPRESENCE_TTL90
presenceHeartbeatIntervalPRESENCE_HEARTBEAT_INTERVAL30

database

Source: packages/keryx/config/database.ts

KeyEnvironment VariableDefault
connectionStringDATABASE_URL"x"
autoMigrateDATABASE_AUTO_MIGRATEtrue
maxDATABASE_POOL_MAX10
minDATABASE_POOL_MIN0
idleTimeoutMillisDATABASE_POOL_IDLE_TIMEOUT10000
connectionTimeoutMillisDATABASE_POOL_CONNECT_TIMEOUT0
allowExitOnIdleDATABASE_POOL_EXIT_ON_IDLEfalse

logger

Source: packages/keryx/config/logger.ts

KeyEnvironment VariableDefault
levelLOG_LEVELLogLevel.info
includeTimestampsLOG_INCLUDE_TIMESTAMPStrue
colorizeLOG_COLORIZEtrue
formatLOG_FORMATLogFormat.text
maxParamLengthLOG_MAX_PARAM_LENGTH100

observability

Source: packages/keryx/config/observability.ts

KeyEnvironment VariableDefault
enabledOTEL_METRICS_ENABLEDfalse
metricsRouteOTEL_METRICS_ROUTE"/metrics"
serviceNameOTEL_SERVICE_NAME""
metricsAuthUsernameOTEL_METRICS_AUTH_USERNAME""
metricsAuthPasswordOTEL_METRICS_AUTH_PASSWORD""

process

Source: packages/keryx/config/process.ts

KeyEnvironment VariableDefault
namePROCESS_NAME"server"
shutdownTimeoutPROCESS_SHUTDOWN_TIMEOUT1000 * 30

rateLimit

Source: packages/keryx/config/rateLimit.ts

KeyEnvironment VariableDefault
enabledRATE_LIMIT_ENABLEDBun.env.NODE_ENV === "test" ? false : true
windowMsRATE_LIMIT_WINDOW_MS60_000
unauthenticatedLimitRATE_LIMIT_UNAUTH_LIMIT20
authenticatedLimitRATE_LIMIT_AUTH_LIMIT200
keyPrefixRATE_LIMIT_KEY_PREFIX"ratelimit"
oauthRegisterLimitRATE_LIMIT_OAUTH_REGISTER_LIMIT5
oauthRegisterWindowMsRATE_LIMIT_OAUTH_REGISTER_WINDOW_MS3_600_000

redis

Source: packages/keryx/config/redis.ts

KeyEnvironment VariableDefault
connectionStringREDIS_URL"redis://localhost:6379/0"

session

Source: packages/keryx/config/session.ts

KeyEnvironment VariableDefault
ttlSESSION_TTL60 * 60 * 24
cookieNameSESSION_COOKIE_NAME"__session"
cookieHttpOnlySESSION_COOKIE_HTTP_ONLYtrue
cookieSecureSESSION_COOKIE_SECUREfalse
cookieSameSiteSESSION_COOKIE_SAME_SITECookieSameSite.Strict

tasks

Source: packages/keryx/config/tasks.ts

KeyEnvironment VariableDefault
enabledTASKS_ENABLEDtrue
timeoutTASK_TIMEOUT5000
taskProcessorsTASK_PROCESSORSBun.env.NODE_ENV === "test" ? 0 : 1

cli

Source: packages/keryx/config/server/cli.ts

KeyEnvironment VariableDefault
includeStackInErrorsCLI_INCLUDE_STACK_IN_ERRORStrue
quietCLI_QUIETfalse

mcp

Source: packages/keryx/config/server/mcp.ts

KeyEnvironment VariableDefault
enabledMCP_SERVER_ENABLEDfalse
routeMCP_SERVER_ROUTE"/mcp"
allowedOriginsMCP_ALLOWED_ORIGINS[ "https://claude.ai", // Anthropic Claude web connector "https://claude.com", // Anthropic Claude web connector "https://chatgpt.com", // OpenAI ChatGPT connectors "https://vscode.dev", // VS Code for the Web "https://github.dev", // github.dev web editor ].join(","
instructionsMCP_SERVER_INSTRUCTIONSpkg.description as string
oauthClientTtlMCP_OAUTH_CLIENT_TTL60 * 60 * 24 * 30
oauthCodeTtlMCP_OAUTH_CODE_TTL300
oauthRefreshTtlMCP_OAUTH_REFRESH_TTL60 * 60 * 24 * 30
oauthTrustProxyMCP_OAUTH_TRUST_PROXYfalse
oauthCimdEnabledMCP_OAUTH_CIMD_ENABLEDtrue
oauthCimdCacheTtlMCP_OAUTH_CIMD_CACHE_TTL3600
oauthCimdFetchTimeoutMsMCP_OAUTH_CIMD_FETCH_TIMEOUT_MS5000
oauthCimdMaxBytesMCP_OAUTH_CIMD_MAX_BYTES64 * 1024
oauthCimdAllowPrivateHostsMCP_OAUTH_CIMD_ALLOW_PRIVATE_HOSTSfalse
markdownDepthLimitMCP_MARKDOWN_DEPTH_LIMIT5
sessionTtlMCP_SESSION_TTL60 * 60 * 24

web

Source: packages/keryx/config/server/web.ts

KeyEnvironment VariableDefault
portWEB_SERVER_PORT8080
hostWEB_SERVER_HOST"localhost"
enabledWEB_SERVER_ENABLEDtrue
applicationUrlAPPLICATION_URL`http://${host}:${port}`
apiRouteWEB_SERVER_API_ROUTE"/api"
themeWEB_SERVER_THEME""
allowedOriginsWEB_SERVER_ALLOWED_ORIGINS"*"
allowedMethodsWEB_SERVER_ALLOWED_METHODS"HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS"
allowedHeadersWEB_SERVER_ALLOWED_HEADERS"Content-Type"
enabledWEB_SERVER_STATIC_ENABLEDtrue
directoryWEB_SERVER_STATIC_DIRECTORY"assets"
routeWEB_SERVER_STATIC_ROUTE"/"
cacheControlWEB_SERVER_STATIC_CACHE_CONTROL"public, max-age=3600"
etagWEB_SERVER_STATIC_ETAGtrue
maxPayloadSizeWS_MAX_PAYLOAD_SIZE65_536
maxMessagesPerSecondWS_MAX_MESSAGES_PER_SECOND20
maxSubscriptionsWS_MAX_SUBSCRIPTIONS100
drainTimeoutWS_DRAIN_TIMEOUT5000
includeStackInErrorsWEB_SERVER_INCLUDE_STACK_IN_ERRORS(Bun.env.NODE_ENV ?? "development"
Content-Security-PolicyWEB_SECURITY_CSP"default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; font-src 'self' https://cdn.jsdelivr.net data:; img-src 'self' data: blob:; connect-src 'self'; worker-src blob:"
X-Content-Type-OptionsWEB_SECURITY_CONTENT_TYPE_OPTIONS"nosniff"
X-Frame-OptionsWEB_SECURITY_FRAME_OPTIONS"DENY"
Strict-Transport-SecurityWEB_SECURITY_HSTS"max-age=31536000; includeSubDomains"
Referrer-PolicyWEB_SECURITY_REFERRER_POLICY"strict-origin-when-cross-origin"
maxBodySizeWEB_MAX_BODY_SIZE10 * 1024 * 1024
enabledWEB_COMPRESSION_ENABLEDtrue
thresholdWEB_COMPRESSION_THRESHOLD1024
headerWEB_CORRELATION_ID_HEADER"X-Request-Id"
trustProxyWEB_CORRELATION_ID_TRUST_PROXYfalse

Released under the MIT License.