Skip to content

Configuration

ContextCore uses Pydantic BaseModel as the configuration contract. Values are loaded from environment variables via load_shared_config_from_env().

SharedConfig

from contextcore.config import SharedConfig, load_shared_config_from_env
config = load_shared_config_from_env()

Environment Variables

VariableDefaultDescription
LOG_LEVELINFOLogging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
LOG_JSONfalseUse JSON log format (true/false)
REDIS_URLRedis connection URL (e.g., redis://localhost:6379/0)
OTEL_ENABLEDfalseEnable OpenTelemetry tracing
OTEL_ENDPOINTOpenTelemetry collector endpoint
SERVICE_NAMEService name for observability
SERVICE_VERSIONService version for observability
TENANT_IDDefault tenant ID for multi-tenant deployments

Security Environment Variables

VariableDefaultDescription
SECURITY_ENABLEDfalseEnable security enforcement
SIGNING_BACKENDed25519Signing backend type (ed25519 or kms)
SIGNING_KEY_IDed25519-001Active key identifier (kid) for token signing
SIGNING_ALLOWED_KIDSComma-separated kid allowlist for rotation
SIGNING_PRIVATE_KEY_PATHEd25519 private key file path (signer only)
SIGNING_PUBLIC_KEY_PATHEd25519 public key file path (verifier)
KMS_KEY_RESOURCECloud KMS key resource name
TOKEN_TTL_SECONDS3600Default token TTL in seconds
TOKEN_ISSUERToken issuer identifier

SharedConfig Fields

class SharedConfig(BaseModel):
log_level: LogLevel # DEBUG, INFO, WARNING, ERROR, CRITICAL
log_json: bool # JSON vs plain text logs
redis_url: str | None # Redis connection
otel_enabled: bool # OpenTelemetry tracing
otel_endpoint: str | None # OTEL collector endpoint
service_name: str | None # Service name for observability
service_version: str | None # Service version
tenant_id: str | None # Default tenant ID
security: SharedSecurityConfig # Nested security config

Adding New Config Options

  1. Add field to SharedConfig in config.py:
class SharedConfig(BaseModel):
my_new_option: str = Field(default="", description="My new option")
  1. Add env loading in load_shared_config_from_env():
my_new_option=os.getenv("MY_NEW_OPTION", ""),
  1. Document in README
  2. Add tests