Type-Safe Settings with Pydantic
Load and validate environment variables into a typed settings object using pydantic-settings with defaults.
from pydantic_settings import BaseSettings
from pydantic import Field, field_validator
class Settings(BaseSettings):
# Database
database_url: str = Field(..., description="PostgreSQL connection string")
db_pool_size: int = Field(default=5, ge=1, le=50)
# Redis
redis_url: str = Field(default="redis://localhost:6379")
# App
debug: bool = Field(default=False)
secret_key: str = Field(..., min_length=32)
allowed_origins: list[str] = Field(default=["http://localhost:3000"])
# API
api_rate_limit: int = Field(default=100)
api_version: str = Field(default="v1")
model_config = {
"env_file": ".env",
"env_file_encoding": "utf-8",
"case_sensitive": False,
}
@field_validator("allowed_origins", mode="before")
@classmethod
def parse_origins(cls, v):
if isinstance(v, str):
return [s.strip() for s in v.split(",")]
return v
# Singleton pattern
_settings: Settings | None = None
def get_settings() -> Settings:
global _settings
if _settings is None:
_settings = Settings()
return _settings
# Usage:
# settings = get_settings()
# print(settings.database_url)
# print(settings.debug)Sponsored
Doppler — Secret management platform
Use Cases
- Application configuration
- 12-factor app settings
- Multi-environment configs
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
Environment Variable Validator
Validates required environment variables at startup and returns a typed config object or throws with missing keys.
Environment Variable Validation
Validate required environment variables at build time with type-safe access and descriptive errors.
Pydantic v2 Model Patterns
Define and validate data models with Pydantic v2 using field validators, computed fields, and serialization.
Redirect Matrix in next.config
Define URL redirect rules in next.config.ts for SEO migration, vanity URLs, and path normalization.