Configuration Reference¶
Every runtime setting Sandloom reads from the environment, generated directly from sandloom.core.config.settings.Settings so this table can never drift from the code. Settings may be supplied as environment variables, in a .env file, or — when SECRETS_DIR is set — as files named after each field (Docker/Kubernetes secrets).
Required settings
DATABASE_URL, CACHE_URL, BROKER_URL, and JWT_SECRET are mandatory; the process aborts at startup if any is missing or invalid. In production, JWT_SECRET must be at least 32 random characters.
Configuration tiers
Each setting is semantic (changes a guarantee; its value is chosen per profile), ops (capacity / operations) or migration (transitional, with a removal version). The per-profile table of the semantic settings and the active-override reporting are in Configuration Tiers.
Core & Modules¶
| Env var | Type | Default | Description |
|---|---|---|---|
ENVIRONMENT |
<enum 'Environment'> |
'dev' |
Runtime environment: dev, test or prod. Production activates stricter startup requirements and production defaults. |
SANDLOOM_MODULES |
list[str] |
[] |
JSON list of module import paths or installed entry-point names loaded by this process; an application composition root may supply defaults. |
MODULE_WHITELIST |
list[str] |
[] |
Optional module allowlist applied by the loader before registration. |
MODULE_BLACKLIST |
list[str] |
[] |
Modules excluded by the loader before registration. |
MODULE_FAIL_FAST |
bool |
False |
Stop module loading on the first registration/import failure rather than collecting later failures. |
MODULE_LOAD_ENTRYPOINTS |
bool |
False |
Also load installed sandloom.modules entry points beyond the explicitly configured module list. |
MODULE_REQUIRED |
list[str] |
[] |
Required module names among the requested modules; empty normally makes every requested non-optional module required. |
SANDLOOM_COMPOSITION_ROOT |
str | None |
None |
Import path of the module exposing the application app/core for workers, migrations and operator commands; unset uses sandloom.main. |
Infrastructure¶
| Env var | Type | Default | Description |
|---|---|---|---|
INFRA |
dict[str, dict[str, dict[str, object]]] |
{} |
JSON map of capabilities to named driver instances and options; merges with default instances synthesized from flat settings. |
DATABASE_URL |
str |
required | Connection URL of the default application database; production relational deployments use PostgreSQL. |
DB_POOL_SIZE |
int |
10 |
Persistent connections per request/worker database pool; multiply the pool budget by the number of worker processes. |
DB_MAX_OVERFLOW |
int |
20 |
Additional temporary connections permitted above DB_POOL_SIZE. |
DB_POOL_TIMEOUT |
int |
30 |
Maximum seconds a database checkout waits for an available pooled connection. |
CACHE_URL |
str |
required | Connection URL of the default cache instance, normally Redis; named instances and overrides are declared through INFRA. |
BROKER_URL |
str |
required | Connection URL used to configure the default task queue broker and Redis-backed event transport. |
Eventing & Outbox¶
| Env var | Type | Default | Description |
|---|---|---|---|
CONSUMER_STARTUP_TIMEOUT_SECONDS |
float |
15.0 |
Seconds allowed for required event consumers to establish their initial subscriptions. |
CONSUMER_RETRY_BASE_SECONDS |
float |
1.0 |
Initial backoff delay in seconds when supervised event consumers retry a failed subscription. |
CONSUMER_RETRY_MAX_SECONDS |
float |
30.0 |
Maximum backoff delay in seconds for supervised event-consumer subscription retries. |
EVENT_BUS_BACKEND |
Literal['auto', 'memory', 'redis', 'streams'] |
'auto' |
Event transport selector: auto chooses durable Streams in production and in-memory delivery elsewhere; volatile production transports require accepted risk. |
SANDLOOM_SERVICE_NAME |
str | None |
None |
Logical service label attached to Streams consumer inventory and ownership diagnostics; does not rename a module consumer group. |
EVENT_STREAM_RETENTION_SECONDS |
int |
604800 |
Approximate maximum Streams entry age in seconds, trimmed during publish; zero disables age trimming. |
EVENT_STREAM_MAXLEN |
int |
0 |
Approximate maximum entries retained per channel stream; zero disables length trimming. |
EVENT_STREAM_PREFIX |
str |
"" |
Namespace prepended to Streams, dead-letter and consumer-inventory keys; changing it starts a separate stream namespace. |
OUTBOX_RELAY_ENABLED |
Literal['auto', 'on', 'off', 'delegated'] |
'auto' |
Outbox relay policy: auto enables production relaying, on forces it, off disables it, and delegated is reserved for framework-elected worker leadership. |
OUTBOX_RELAY_MAX_ATTEMPTS |
int |
10 |
Failed publish attempts before an outbox row is dead-lettered; broker-outage circuit pauses do not consume attempts. |
OUTBOX_RELAY_BACKOFF_BASE_SECONDS |
float |
2.0 |
Base per-row outbox retry delay in seconds, increased exponentially with jitter. |
OUTBOX_RELAY_BACKOFF_MAX_SECONDS |
float |
300.0 |
Maximum per-row outbox retry backoff in seconds. |
OUTBOX_RELAY_CIRCUIT_BASE_SECONDS |
float |
1.0 |
Initial relay cooldown in seconds when the broker is unavailable. |
OUTBOX_RELAY_CIRCUIT_MAX_SECONDS |
float |
30.0 |
Maximum broker-outage relay cooldown in seconds. |
EVENT_CALLBACK_TIME_BUDGET_SECONDS |
float |
0.0 |
If > 0, each event bus callback execution time is measured and a warning is logged when exceeded (non-fatal). |
EVENT_PAYLOAD_MAX_BYTES |
int |
0 |
If > 0, serialized payload size is checked before publish; ValueError raised if exceeded. |
EVENT_SHUTDOWN_DRAIN_SECONDS |
float |
5.0 |
Max seconds to wait for in-flight event callbacks to finish on bus shutdown before cancelling the stragglers. Bounds shutdown so a hung callback cannot hang the process. <= 0 waits unbounded. |
EVENT_BUS_REDIS_SEMAPHORE_LIMIT |
int |
100 |
Max concurrent callbacks for RedisEventBus to prevent overload. Adjust based on CPU/network capacity. |
SCHEMA_REGISTRY_PATH |
str |
'./data/schema_registry.json' |
Path to JSON file used to persist in-memory event schema registry. If empty, persistence is disabled. File will be created atomically on updates. |
Service Registry & RPC¶
| Env var | Type | Default | Description |
|---|---|---|---|
SERVICE_BINDINGS |
dict[str, dict[str, object]] |
{} |
JSON map of remote contract IDs to provider bindings, including base_url and service_id. Optional required bindings affect readiness; binding keys are startup-validated. |
SERVICE_RPC_TIMEOUT_SECONDS |
float |
1.0 |
Default timeout in seconds for a remote contract call unless its binding overrides it. |
CONTRACT_DTO_PACKAGES |
list[str] |
[] |
Additional packages allowed to provide contract wire DTOs, beyond sandloom.shared; the same packages must be importable by every caller. |
CONTRACT_COMPAT_CHECK |
Literal['off', 'ready', 'strict'] |
'ready' |
Remote contract compatibility policy: ready degrades readiness, strict also aborts startup for reachable incompatible providers, and off skips the check. |
CONTRACT_SNAPSHOT_PATHS |
list[str] |
[] |
Additional contract snapshot files or directories; these override expected snapshots shipped in provider packages. |
Authorization¶
| Env var | Type | Default | Description |
|---|---|---|---|
ACCESS |
dict[str, str] |
{} |
JSON map overriding access-fact resolution modes (claim, projection, live or auto); each fact freshness floor is still enforced. |
Security & JWT¶
| Env var | Type | Default | Description |
|---|---|---|---|
PRODUCTION_PROFILE |
Literal['standard', 'multi_tenant_strict'] |
'standard' |
Production trust profile: standard or multi_tenant_strict. The strict profile enforces tenant RLS, isolated security infrastructure and other startup guarantees. |
SANDLOOM_ACCEPTED_RISKS |
list[str] |
[] |
Explicit production guarantee exceptions as a JSON list or comma-separated risk IDs; unknown IDs fail startup and accepted risks are reported. |
SECURITY_CACHE_INSTANCE |
str |
'default' |
Named cache instance for security-critical revocation and block state, and by default idempotency records; use durable non-evicting Redis in production. |
TENANCY_MODE |
Literal['multi', 'single'] |
'multi' |
Tenant-binding mode: multi derives the current tenant; single consistently binds the canonical SINGLE_TENANT_ID without disabling tenant filters. |
SINGLE_TENANT_ID |
uuid.UUID | None |
None |
Canonical tenant UUID required when TENANCY_MODE is single. |
JWT_SECRET |
str | None |
None |
Shared secret for symmetric JWT signing and verification. In asymmetric mode only the token issuer uses it for emailed tokens; verifier-only services must leave it unset. |
JWT_ALGORITHM |
Literal['HS256', 'HS384', 'HS512', 'EdDSA', 'RS256', 'ES256'] |
'HS256' |
Accepted and issued JWT algorithm. Symmetric algorithms use JWT_SECRET; asymmetric algorithms use issuer private keys and published public keys. |
ACCESS_TOKEN_EXPIRE_MINUTES |
int |
15 |
Lifetime, in minutes, of newly issued access tokens. |
REFRESH_TOKEN_EXPIRE_DAYS |
int |
14 |
Lifetime, in days, of newly issued refresh tokens, bounded by the absolute session lifetime. |
JWT_ISSUER |
str | None |
None |
Expected JWT issuer claim; when configured it is included in issued tokens and checked during verification. |
JWT_AUDIENCE |
str | None |
None |
Expected JWT audience claim; when configured it is included in issued tokens and checked during verification. |
JWT_LEEWAY_SECONDS |
int |
10 |
Clock-skew tolerance in seconds when validating JWT time claims. |
INTERNAL_API_TOKEN |
str | None |
None |
Credential for operational diagnostics, contract metadata, health details and metrics through X-Internal-Token; never authenticates internal RPC. |
TRUST_PROXY_HEADERS |
bool |
False |
Honor forwarded client-IP headers only under the configured trusted-proxy policy. |
TRUSTED_PROXY_IPS |
list[str] |
[] |
JSON list of trusted proxy CIDRs; forwarded chains are walked from the immediate peer toward the first untrusted hop. |
RATE_LIMIT_ENABLED |
bool |
False |
Enable route rate limiting outside production; production always enforces configured route limits. |
TWOFA_ENCRYPTION_KEY |
str | None |
None |
Comma-separated TOTP encryption keys, newest first, for rotation; production identity requires explicit keys, while development can derive a fallback from JWT_SECRET. |
Billing¶
| Env var | Type | Default | Description |
|---|---|---|---|
BILLING_PROVIDER |
Literal['fake', 'stripe'] |
'fake' |
Payment provider selector: fake for local/testing flows or stripe for real Stripe integration. |
STRIPE_SECRET_KEY |
str | None |
None |
Stripe API secret used by the Stripe payment-provider adapter. |
STRIPE_WEBHOOK_SECRET |
str | None |
None |
Stripe webhook signing secret used to authenticate incoming webhook payloads. |
BILLING_DENY_ON_PAST_DUE |
bool |
False |
Deny subscription entitlements while payment is past due; disabled preserves the configured past-due grace behavior. |
Storage¶
| Env var | Type | Default | Description |
|---|---|---|---|
STORAGE_TYPE |
Literal['local', 's3', 'gcs', 'yc'] |
'local' |
Default storage driver selector; local files ship ready to use, while other selections require a matching installed and configured driver. |
STORAGE_PATH |
str |
'./data' |
Filesystem root used by local object storage. |
MAX_UPLOAD_SIZE_BYTES |
int |
52428800 |
Maximum bytes accepted by Storage.save; zero disables this upload cap. |
MAX_REQUEST_BODY_BYTES |
int |
0 |
Global Content-Length request-body cap in bytes; zero falls back to MAX_UPLOAD_SIZE_BYTES. |
S3_BUCKET |
str | None |
None |
Bucket name supplied to the S3 object-storage driver. |
S3_REGION |
str | None |
None |
Region supplied to the S3 object-storage driver. |
S3_ACCESS_KEY_ID |
str | None |
None |
Access-key ID supplied to the S3 object-storage driver. |
S3_SECRET_ACCESS_KEY |
str | None |
None |
Secret access key supplied to the S3 object-storage driver. |
Notifications¶
| Env var | Type | Default | Description |
|---|---|---|---|
NOTIFIER_BACKEND |
Literal['log', 'smtp'] |
'log' |
Default notifier driver: log records delivery metadata without message contents; smtp sends email using SMTP settings. |
SMTP_HOST |
str | None |
None |
SMTP server hostname used by the email notifier. |
SMTP_PORT |
int |
25 |
SMTP server TCP port used by the email notifier. |
SMTP_USERNAME |
str | None |
None |
Optional SMTP authentication username. |
SMTP_PASSWORD |
str | None |
None |
Optional SMTP authentication password. |
SMTP_FROM |
str | None |
None |
Sender email address used by the SMTP notifier. |
SMTP_USE_TLS |
bool |
True |
Upgrade SMTP with STARTTLS and certificate verification; disable only for a trusted local development inbox. |
SSO¶
| Env var | Type | Default | Description |
|---|---|---|---|
GOOGLE_CLIENT_ID |
str | None |
None |
OAuth client ID for Google sign-in. |
GOOGLE_CLIENT_SECRET |
str | None |
None |
OAuth client secret for Google sign-in. |
GITHUB_CLIENT_ID |
str | None |
None |
OAuth client ID for GitHub sign-in. |
GITHUB_CLIENT_SECRET |
str | None |
None |
OAuth client secret for GitHub sign-in. |
MICROSOFT_CLIENT_ID |
str | None |
None |
OAuth client ID for Microsoft sign-in. |
MICROSOFT_CLIENT_SECRET |
str | None |
None |
OAuth client secret for Microsoft sign-in. |
LINKEDIN_CLIENT_ID |
str | None |
None |
OAuth client ID for LinkedIn sign-in. |
LINKEDIN_CLIENT_SECRET |
str | None |
None |
OAuth client secret for LinkedIn sign-in. |
TELEGRAM_BOT_TOKEN |
str | None |
None |
Telegram bot credential used by the Telegram sign-in integration. |
SSO_ALLOWED_REDIRECT_URIS |
str |
'http://localhost:3000,http://localhost:3000/auth/callback,https://app.example.com/auth/callback' |
Comma-separated exact redirect URI allowlist for SSO callbacks and frontend redirects. |
Frontend & CORS¶
| Env var | Type | Default | Description |
|---|---|---|---|
DOCS_ENABLED |
bool | None |
None |
Expose /docs, /redoc and /openapi.json; unset enables them outside production and disables them in production. |
FRONTEND_URL |
str |
'http://localhost:3000' |
Frontend base URL used by generated links and as the default CORS origin. |
CORS_ORIGINS |
list[str] |
[] |
JSON list of allowed CORS origins; an empty list uses FRONTEND_URL. |
Observability¶
| Env var | Type | Default | Description |
|---|---|---|---|
SENTRY_DSN |
str |
"" |
Sentry project DSN; empty disables Sentry reporting. |
SENTRY_TRACES_SAMPLE_RATE |
float |
0.0 |
Fraction of transactions sampled for Sentry tracing when Sentry is configured. |
TRACING_URL |
str |
"" |
OpenTelemetry collector endpoint; empty disables OTLP export, which also requires the tracing SDK. |
OTEL_SERVICE_NAME |
str |
'sandloom-backend' |
Service name attached to exported OpenTelemetry telemetry. |
LOG_LEVEL |
str |
'INFO' |
Minimum process log level, using standard Python logging levels. |
LOG_FORMAT |
Literal['auto', 'json', 'text'] |
'auto' |
Log output format: auto selects JSON in production and human-readable text elsewhere. |
Lifecycle¶
| Env var | Type | Default | Description |
|---|---|---|---|
STARTUP_TASK_TIMEOUT_SECONDS |
int |
15 |
Default timeout in seconds for each registered application startup task. |
SHUTDOWN_TASK_TIMEOUT_SECONDS |
int |
10 |
Default timeout in seconds for each registered application shutdown task. |
GC_FREEZE_AFTER_STARTUP |
bool |
True |
After lifespan startup (gunicorn worker) / before the pool forks (Celery): gc.collect() + gc.freeze(), so full collections never traverse the startup heap again. |
GC_THRESHOLDS |
tuple[int, int, int] | None |
(2000, 10, 10) |
gc.set_threshold(t0, t1, t2) applied with the freeze, as 'a,b,c' or a JSON list; empty = interpreter default. Ignored on CPython 3.14.0-3.14.4 (incremental GC). |
GC_METRICS_ENABLED |
bool |
True |
sandloom_gc_pause_seconds / sandloom_gc_collected_objects_total / sandloom_gc_frozen_objects from gc.callbacks in the configured processes. |
HEALTH_CHECK_TIMEOUT_SECONDS |
float |
5.0 |
Timeout in seconds applied to health-check execution. |
Other¶
| Env var | Type | Default | Description |
|---|---|---|---|
SHUTDOWN_BUDGET_SECONDS |
float |
30.0 |
Overall graceful-shutdown budget in seconds for application lifecycle cleanup. |
MIGRATION_LOCK_TIMEOUT_SECONDS |
float |
300.0 |
Maximum seconds migration commands wait to acquire the database migration lock. |
BEAT_LEASE_TTL_SECONDS |
int |
30 |
Lifetime in seconds of the renewable singleton lease used to prevent duplicate Celery beat scheduling. |
BEAT_LEASE_NAME |
str |
"" |
Lease scope; empty = derived from the broker URL, the taskqueue instance and the loaded module set (one beat per service). |
BEAT_LEASE_CACHE_INSTANCE |
str |
'default' |
Named cache instance holding the Celery beat singleton lease. |
HEALTH_CACHE_TTL_SECONDS |
float |
3.0 |
Seconds public health and readiness reuse probe results; zero disables this cache. |
SAGA_SWEEP_INTERVAL_SECONDS |
float |
5.0 |
Interval in seconds between lease-guarded sweeps that nudge due saga instances on each database. |
SAGA_SWEEP_BATCH |
int |
200 |
Maximum due saga instances nudged per database sweep tick. |
SAGA_COMPENSATION_DEADLINE_SECONDS |
int |
3600 |
Default window in seconds for compensation retries before a saga is parked; a saga definition can override it. |
SAGA_RETRY_BASE_SECONDS |
float |
1.0 |
Base delay in seconds for exponential saga-step retry backoff with full jitter. |
SAGA_RETRY_MAX_SECONDS |
float |
300.0 |
Maximum saga-step retry backoff in seconds. |
SAGA_RETENTION_DAYS |
int |
30 |
Retention in days for completed or compensated saga instances; zero keeps them forever and parked instances are never purged. |
EVENT_HANDLER_TIMEOUT_SECONDS |
float |
30.0 |
Timeout in seconds for each Redis Streams event callback. |
EVENT_STREAMS_RECONNECT_BASE_SECONDS |
float |
0.5 |
Initial delay in seconds between Redis Streams reconnect attempts. |
EVENT_STREAMS_RECONNECT_MAX_SECONDS |
float |
30.0 |
Maximum Redis Streams reconnect backoff delay in seconds. |
EVENT_STREAM_READ_COUNT |
int |
64 |
Maximum entries read in one Streams XREADGROUP batch. |
OUTBOX_RELAY_STALL_SECONDS |
float |
60.0 |
Seconds without local relay progress before relay health reports a stall; idle polling is counted as progress. |
OUTBOX_RETENTION_HOURS |
float |
168.0 |
Retention of delivered outbox history in hours; zero keeps it forever. Pending and dead-lettered rows are not purged. |
SANDLOOM_JSONSCHEMA_BACKEND |
Literal['auto', 'python'] |
'auto' |
Payload schema validator: auto uses jsonschema-rs when installed, otherwise Python jsonschema; python forces the Python implementation. |
PROJECTION_TOKEN_KEYS |
dict[str, str] |
{} |
JSON map of key IDs to HMAC secrets for projection consistency tokens; empty disables issuing and honoring these tokens. |
PROJECTION_RYW_WAIT_MS |
int |
300 |
Maximum milliseconds a token-bearing projection read waits to catch up before returning its configured stale result behavior. |
RPC_TRANSPORT |
Literal['aiohttp', 'httpx'] |
'aiohttp' |
Internal RPC HTTP client implementation. aiohttp is the default; httpx is available when its transport behavior is needed. |
RPC_POOL_MAX_CONNECTIONS |
int |
100 |
Maximum aiohttp RPC connections per peer; additional callers wait within their call timeout. |
RPC_POOL_IDLE_SECONDS |
float |
4.0 |
Seconds an idle aiohttp RPC connection remains in the keep-alive pool before eviction. |
RPC_MAX_RESPONSE_BYTES |
int |
33554432 |
Largest accepted internal RPC response body in bytes; larger responses are rejected. |
RPC_MAX_REQUEST_BYTES |
int |
4194304 |
Largest accepted internal RPC request body in bytes. |
SERVICE_PROBE_TIMEOUT_SECONDS |
float |
1.0 |
Maximum seconds for each concurrent readiness probe of a required remote service binding. |
CONTRACT_DB_POOL_SIZE |
int |
5 |
Persistent connections per database in the dedicated local-contract pool, separate from the request pool. |
CONTRACT_DB_MAX_OVERFLOW |
int |
5 |
Additional temporary connections allowed above CONTRACT_DB_POOL_SIZE. |
CONTRACT_DB_LOCK_TIMEOUT_MS |
int |
5000 |
PostgreSQL lock timeout in milliseconds on contract-pool connections; zero uses the server default. |
CONTRACT_READ_SCOPE_ENABLED |
bool |
True |
Reuse one separate local read-contract transaction and memoize identical local read calls within a request; never joins the caller transaction. |
CONTRACT_READ_SCOPE_IDLE_MS |
int |
0 |
Delay in milliseconds before releasing an idle local-contract read scope; zero releases it when the request awaits unrelated work. |
CONTRACT_CACHE_SHADOW |
dict[str, dict[str, Any]] |
{} |
JSON specification of hypothetical contract-read caches and invalidations. Records measurements only; cached results are never served. |
CONTRACT_CACHE_SHADOW_MAX_ENTRIES |
int |
100000 |
Maximum entries retained by contract-cache shadow measurement. |
CONTRACT_CACHE_SHADOW_REPORT_DIR |
str | None |
None |
Directory for contract-cache shadow counter snapshots at process exit; unset writes no report file. |
CONTRACT_COMMAND_DEDUPE_TTL_SECONDS |
int |
86400 |
Seconds a completed command-contract result remains replayable for its idempotency key; must cover configured saga and retry horizons. |
IDEMPOTENCY_CACHE_INSTANCE |
str |
"" |
Separate named cache for idempotency and task-enqueue records; empty uses SECURITY_CACHE_INSTANCE. Revocation and block state stays in the security cache. |
DATABASE_SYSTEM_URL |
str | None |
None |
Separate privileged database login used only by framework cross-tenant work on the default database; never supplied to business-module sessions. |
DB_CONNECT_TIMEOUT_SECONDS |
float |
5.0 |
Maximum seconds to establish a database connection. |
DB_RECONNECT_BASE_SECONDS |
float |
0.05 |
Initial pool-wide backoff delay in seconds for new connections after transport failures; never retries statements. |
DB_RECONNECT_MAX_SECONDS |
float |
2.0 |
Maximum database reconnect backoff delay in seconds. |
DB_POOL_OVERFLOW_LINGER_SECONDS |
float |
30.0 |
Seconds to retain returned overflow connections after recent pool pressure; zero restores immediate overflow eviction. |
DB_POOL_FAIR_BARGE_MS |
float |
25.0 |
Maximum waiter age in milliseconds before connection handoff takes priority over new arrivals; zero requests strict FIFO handoff. |
DB_POOL_PING_IDLE_SECONDS |
float |
5.0 |
Ping only connections idle for this many seconds; zero pings every checkout and a negative value disables idle pings. |
DB_DEAD_CONNECTION_RETRY |
bool |
True |
Replace and retry a connection only when the first transaction message was refused before sending any bytes; never retries an ambiguous statement or commit. |
DB_READ_ONLY_SESSIONS |
bool |
False |
Enable server-enforced read-only transactions and early write refusals for read-only session dependencies; disabled uses normal session semantics. |
DB_RLS_MERGED_BEGIN |
bool |
True |
Combine transaction BEGIN and tenant binding in one asyncpg message on tenant-RLS engines; incompatible driver internals fall back to separate messages. |
DB_SESSION_OWNER_CHECKS |
bool |
False |
Extra session/connection ownership checks for accidental use from another task; db() always enforces its unit owner independently. |
PLANNER_OPTIMIZED_EXECUTOR |
bool |
True |
Allow eligible declared read operations to use the optimized database executor with the same tenant and transaction guarantees. |
PLANNER_LIST_MAX_LIMIT |
int |
500 |
Framework maximum page size for declared list operations; a declaration may impose a smaller limit. |
DB_STATEMENT_TIMEOUT_MS |
int |
30000 |
PostgreSQL statement timeout in milliseconds on runtime pools; zero uses the server default. Does not configure migration connections. |
DB_IDLE_IN_TX_TIMEOUT_MS |
int |
60000 |
PostgreSQL idle-in-transaction timeout in milliseconds on runtime pools; zero uses the server default. |
CACHE_SOCKET_TIMEOUT_SECONDS |
float |
0.5 |
Maximum seconds to wait for a Redis cache command response; timeout failures are not retried. |
CACHE_SOCKET_CONNECT_TIMEOUT_SECONDS |
float |
0.5 |
Maximum seconds to establish a Redis cache connection. |
CACHE_HEALTH_CHECK_INTERVAL_SECONDS |
int |
30 |
Redis cache connection health-check interval in seconds; zero disables periodic connection checks. |
CACHE_MAX_CONNECTIONS |
int |
64 |
Maximum connections in the default Redis cache pool; callers wait within CACHE_POOL_TIMEOUT_SECONDS when the pool is busy. |
CACHE_POOL_TIMEOUT_SECONDS |
float |
1.0 |
Maximum seconds a Redis cache operation waits for a pooled connection before failing. |
CACHE_RETRY_ATTEMPTS |
int |
1 |
Retries of Redis cache commands after connection errors. Command timeouts are never retried. |
JWT_PRIVATE_KEY |
str | None |
None |
Issuer-only PEM private key for asymmetric access-token signing; its public key must be published under JWT_KID. |
JWT_PUBLIC_KEYS |
dict[str, str] |
{} |
JSON map of key IDs to PEM public keys used to verify asymmetric access tokens in every service. |
MAX_SESSION_DAYS |
int |
30 |
Absolute session lifetime in days; refreshing a token does not extend this deadline. |
TENANT_CLAIMS_MAX_ORGANIZATIONS |
int |
128 |
Maximum organization memberships embedded in an access token; excessive claims are refused rather than silently truncated. |
AUTH_REVOCATION_MARK_TTL_SECONDS |
int | None |
None |
Lifetime of token-revocation marks in seconds. Unset uses at least 24 hours and the local access-token lifetime plus skew; explicit values must cover that access-token window. |
JWT_PREVIOUS_SECRETS |
list[str] |
[] |
JSON list of retired symmetric JWT secrets accepted for verification only during rotation; asymmetric deployments leave it empty. |
JWT_KID |
str | None |
None |
Key ID placed in issued JWT headers. Required for asymmetric signing and must identify the published signing public key. |
AUTH_REVOCATION_FAIL_CLOSED |
bool | None |
None |
Whether unavailable revocation or emergency-block checks reject access with 503. Unset fails closed in production and open elsewhere. |
AUTH_REVOCATION_CLOCK_SKEW_SECONDS |
float |
2.0 |
Margin added to revocation timestamps to reject tokens minted by a clock running ahead. Keep it consistent across services; zero disables the margin. |
AUTH_REVOCATION_WRITE_ATTEMPTS |
int |
3 |
Attempts to write an after-commit revocation mark before deferring it to the durable revocation consumer. |
AUTH_REVOCATION_RETRY_BASE_SECONDS |
float |
0.05 |
Initial exponential-backoff delay in seconds between after-commit revocation-mark write attempts. |
PASSWORD_HASH_CONCURRENCY |
int | None |
None |
Maximum concurrent Argon2 hash and verification operations per process; unset uses at most four available CPUs. |
PASSWORD_HASH_PROFILE |
Literal['strong', 'owasp_min', 'custom'] |
'strong' |
Argon2id work-factor preset: strong, owasp_min, or custom. Explicit time, memory and parallelism settings override preset values. |
PASSWORD_HASH_TIME_COST |
int | None |
None |
Argon2id iteration count overriding the selected profile; custom profiles require an explicit value. |
PASSWORD_HASH_MEMORY_KIB |
int | None |
None |
Argon2id memory cost per operation in KiB, overriding the selected profile; account for concurrent operations when sizing memory. |
PASSWORD_HASH_PARALLELISM |
int | None |
None |
Argon2id parallelism overriding the selected profile; custom profiles require an explicit value. |
RPC_AUTH_MAX_SKEW_SECONDS |
int |
60 |
Maximum accepted timestamp difference in seconds for internal RPC authentication; also bounds nonce lifetime. |
RPC_REPLAY_GUARD |
Literal['local', 'commands', 'all'] |
'commands' |
Shared RPC replay protection: local keeps only per-process protection, commands also guards commands in the security cache, and all guards every call there. |
RPC_REPLAY_CACHE_MAX_ENTRIES |
int |
200000 |
Maximum live nonces in each process replay table; a full table fails closed. |
RPC_REPLAY_CACHE_PER_CALLER_MAX_ENTRIES |
int |
100000 |
Maximum live nonces one caller may occupy in the process replay table. |
RPC_COMMANDS_REQUIRE_SIGNATURE |
Literal['auto', 'on', 'all', 'off'] |
'auto' |
Ed25519 RPC signature policy: auto enables commands in production, on signs commands, all also signs reads, and off disables the extra signature requirement. |
RPC_SERVICE_ID |
str | None |
None |
This process service identity used for internal RPC authentication and authorization. |
RPC_PRIVATE_KEY |
str | None |
None |
This service's Ed25519 PEM private key for signing internal RPC calls; separate from its X25519 key-agreement key. |
RPC_KEY_ID |
str | None |
None |
Key ID of RPC_PRIVATE_KEY in this service published Ed25519 keys. |
RPC_SERVICE_KEYS |
dict[str, dict[str, str]] |
{} |
JSON map of calling service IDs to key-ID/Ed25519-public-key maps; retain old keys during independent service rotations. |
RPC_DH_PRIVATE_KEY |
str | None |
None |
This service's dedicated X25519 PEM private key for pair-MAC authentication and response binding. |
RPC_DH_KEY_ID |
str | None |
None |
Key ID of RPC_DH_PRIVATE_KEY in this service published X25519 keys. |
RPC_DH_EXTRA_PRIVATE_KEYS |
dict[str, str] |
{} |
JSON map of additional X25519 private-key IDs to PEM keys accepted during this service key rotation. |
RPC_SERVICE_DH_KEYS |
dict[str, dict[str, str]] |
{} |
JSON map of service IDs to key-ID/X25519-public-key maps, shared consistently across services. |
RPC_SERVICE_DH_CURRENT_KIDS |
dict[str, str] |
{} |
JSON map selecting the current published X25519 key ID addressed for each service; absent entries use the greatest published key ID. |
RPC_ALLOWED_CALLS |
dict[str, Any] |
{} |
Per-caller JSON allowlist of contract IDs and optional methods; omitted calls are denied and bindings must be covered. |
INTERNAL_ENDPOINTS_OPEN_IN_DEV |
bool |
False |
Open operational endpoints without INTERNAL_API_TOKEN outside production only; has no effect in production or on internal RPC. |
PLANNER_CURSOR_SECRET |
str | None |
None |
HMAC secret for opaque planner pagination cursors; unset falls back to INTERNAL_API_TOKEN, then JWT_SECRET. |
METRICS_TOKEN |
str | None |
None |
Optional scrape-only X-Internal-Token credential for /metrics, without access to other operational endpoints. |
RATE_LIMIT_GLOBAL_REQUESTS |
int |
0 |
Global per-client-IP request allowance per configured period; zero disables this additional fail-open floor. |
RATE_LIMIT_GLOBAL_PERIOD_SECONDS |
int |
60 |
Window length in seconds for the global per-client-IP request allowance. |
RATE_LIMIT_GLOBAL_EXEMPT_PATH_PREFIXES |
list[str] |
['/health', '/ready', '/metrics', '/_sandloom/'] |
Request path prefixes excluded from the additional global rate limiter. |
ADMIN_CONSOLE_ENABLED |
bool | None |
None |
Serve the admin console at /admin/; unset means on outside production and off in production. |
ADMIN_CONSOLE_DIST |
str | None |
None |
Directory of a console you built yourself, served instead of the packaged one. |
BILLING_GRANT_INTENTLESS_SUBSCRIPTIONS |
bool |
False |
Allow catalog-backed subscriptions created without a framework operation intent to grant access; default denies those new intentless grants. |
BILLING_INTENT_RECONCILE_AFTER_MINUTES |
int |
30 |
Minimum pending-intent age in minutes before periodic reconciliation looks up or expires its payment-provider operation. |
BILLING_INTENT_RECONCILE_MAX_ATTEMPTS |
int |
5 |
Failed reconciliation attempts per operation intent before leaving it for operator follow-up. |
BILLING_PORTAL_ATTRIBUTION_WINDOW_MINUTES |
int |
60 |
Minutes during which a preceding portal intent attributes subscription changes to that portal visit; changes outside it are audited as unattributed. |
OTEL_EXPORTER_OTLP_PROTOCOL |
Literal['grpc', 'http/protobuf'] |
'grpc' |
OTLP exporter protocol used with TRACING_URL: grpc or http/protobuf. |
This page is generated from the settings model. To change a description, edit the Field(description=...) (or the curated grouping in tools/docs/gen_config_reference.py).