Skip to main content

🚀 envvar-validator

The most comprehensive, production-ready environment variable validation library for Python

PyPI version Python 3.8+ License: MIT Code style: black Tests Documentation

The definitive solution for Python environment variable validation that developers choose because it's genuinely the best tool available.

📦 Installation

pip install envvar-validator

View on PyPI

🌟 Why envvar-validator?

envvar-validator is the most comprehensive, feature-rich environment variable validation library for Python. Built with production-ready features, security-first design, and exceptional developer experience, it's the tool that will revolutionize how you manage environment variables.

✨ Key Features

  • 🔒 Advanced Security: Secret scanning, compliance validation, encryption key verification
  • 🚀 Framework Integration: Seamless Django, Flask, FastAPI support
  • 📊 Monitoring & Observability: Health checks, drift detection, performance metrics
  • 🛠️ Developer Tools: CLI, interactive setup, codebase scanning
  • 🏗️ Team Collaboration: Shared templates, audit logging, change notifications
  • 🔧 Extensible Architecture: Plugin system, custom validators, middleware support
  • 📱 Cross-Platform: Windows, macOS, Linux support
  • 🎯 Zero Configuration: Works out of the box with sensible defaults

🚀 Quick Start

Installation

from env_validator import EnvironmentValidator, ValidationError

# Define your environment schema
validator = EnvironmentValidator({
    "DATABASE_URL": {
        "type": "str",
        "required": True,
        "validators": ["database_url"]
    },
    "API_KEY": {
        "type": "str", 
        "required": True,
        "validators": ["api_key"],
        "sensitive": True
    },
    "DEBUG": {
        "type": "bool",
        "default": False
    },
    "PORT": {
        "type": "int",
        "default": 8000,
        "validators": ["port_range"]
    }
})

# Validate your environment
try:
    config = validator.validate()
    print(f"✅ Environment validated successfully!")
    print(f"Database: {config.DATABASE_URL}")
    print(f"Debug mode: {config.DEBUG}")
except ValidationError as e:
    print(f"❌ Environment validation failed: {e}")

Framework Integration

Django

# settings.py
from env_validator import DjangoEnvironmentValidator

env = DjangoEnvironmentValidator({
    "SECRET_KEY": {"type": "str", "required": True, "validators": ["secret_key"]},
    "DATABASE_URL": {"type": "str", "required": True, "validators": ["database_url"]},
    "DEBUG": {"type": "bool", "default": False},
    "ALLOWED_HOSTS": {"type": "list", "default": ["localhost"]},
})

# Validate and load environment
config = env.validate()

SECRET_KEY = config.SECRET_KEY
DATABASES = {
    'default': env.parse_database_url(config.DATABASE_URL)
}
DEBUG = config.DEBUG
ALLOWED_HOSTS = config.ALLOWED_HOSTS

FastAPI

# config.py
from env_validator import FastAPIEnvironmentValidator
from pydantic import BaseSettings

class Settings(BaseSettings):
    env_validator = FastAPIEnvironmentValidator({
        "DATABASE_URL": {"type": "str", "required": True},
        "API_KEY": {"type": "str", "required": True, "sensitive": True},
        "ENVIRONMENT": {"type": "str", "default": "development"},
    })
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.env_validator.validate()

settings = Settings()

🛠️ CLI Tools

Environment Validation

# Validate current environment
envvar-validator validate

# Validate with custom schema file
envvar-validator validate --schema schema.yaml

# Generate environment report
envvar-validator report --output html

Interactive Setup

# Interactive environment setup wizard
envvar-validator setup

# Generate configuration templates
envvar-validator template --framework django

Security Scanning

# Scan for secrets and sensitive data
envvar-validator scan --secrets

# Compliance check
envvar-validator scan --compliance gdpr

🔧 Advanced Features

Custom Validators

from env_validator import BaseValidator, ValidationError

class CustomAPIValidator(BaseValidator):
    def validate(self, value: str) -> str:
        if not value.startswith("api_"):
            raise ValidationError("API key must start with 'api_'")
        return value

validator = EnvironmentValidator({
    "API_KEY": {
        "type": "str",
        "validators": [CustomAPIValidator()]
    }
})

Environment-Specific Configurations

validator = EnvironmentValidator({
    "DATABASE_URL": {
        "type": "str",
        "required": True,
        "environments": {
            "development": "sqlite:///dev.db",
            "staging": {"type": "str", "validators": ["database_url"]},
            "production": {"type": "str", "validators": ["database_url", "ssl_required"]}
        }
    }
})

Monitoring Integration

from env_validator import MonitoringValidator

# Health check endpoint
@app.get("/health/env")
async def environment_health():
    return MonitoringValidator.health_check()

# Metrics endpoint
@app.get("/metrics/env")
async def environment_metrics():
    return MonitoringValidator.get_metrics()

📊 Built-in Validators

Security Validators

  • secret_key: Validates secret key strength and entropy
  • api_key: Validates API key format and security
  • encryption_key: Validates encryption key requirements
  • password_strength: Checks password complexity requirements

Network Validators

  • url: Validates URL format and accessibility
  • ip_address: Validates IPv4/IPv6 addresses
  • port_range: Validates port numbers
  • database_url: Validates database connection strings

Data Validators

  • email: RFC-compliant email validation
  • json: JSON format validation
  • file_path: File path existence and permissions
  • directory_path: Directory existence and permissions

Cloud Validators

  • aws_arn: AWS ARN format validation
  • gcp_project_id: Google Cloud project ID validation
  • azure_resource_id: Azure resource identifier validation

🔒 Security Features

Secret Detection

validator = EnvironmentValidator({
    "API_KEY": {
        "type": "str",
        "sensitive": True,
        "validators": ["secret_scanning"]
    }
})

# Automatically detects and protects sensitive values
config = validator.validate()
print(config.API_KEY)  # Shows: "***REDACTED***"

Compliance Validation

validator = EnvironmentValidator({
    "PII_DATA": {
        "type": "str",
        "compliance": ["gdpr", "hipaa"],
        "encryption": "required"
    }
})

📈 Monitoring & Observability

Health Checks

from env_validator import HealthChecker

# Check environment health
health = HealthChecker.check()
if not health.is_healthy:
    print(f"Environment issues: {health.issues}")

Drift Detection

from env_validator import DriftDetector

# Detect configuration drift
drift = DriftDetector.detect()
if drift.has_changes:
    print(f"Configuration drift detected: {drift.changes}")

🏗️ Framework Integrations

Django

# settings.py
from env_validator.django import DjangoEnvironmentValidator

env = DjangoEnvironmentValidator.from_settings_file()
config = env.validate()

# Automatic Django settings integration
SECRET_KEY = config.SECRET_KEY
DATABASES = config.DATABASES

Flask

# app.py
from env_validator.flask import FlaskEnvironmentValidator

app = Flask(__name__)
env = FlaskEnvironmentValidator(app, {
    "SECRET_KEY": {"type": "str", "required": True},
    "DATABASE_URL": {"type": "str", "required": True},
})

FastAPI

# main.py
from env_validator.fastapi import FastAPIEnvironmentValidator

app = FastAPI()
env = FastAPIEnvironmentValidator(app, {
    "API_KEY": {"type": "str", "required": True},
    "DATABASE_URL": {"type": "str", "required": True},
})

🚀 Performance Features

  • Lazy Loading: Validators load only when needed
  • Caching: Repeated validations are cached
  • Async Support: Non-blocking validation operations
  • Memory Efficient: Minimal memory footprint

📚 Documentation

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

git clone https://github.com/Sherin-SEF-AI/envvar-validator.git
cd envvar-validator
pip install -e ".[dev]"
pre-commit install
pytest

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Built with ❤️ by the Python community
  • Inspired by the need for better environment variable management
  • Thanks to all contributors and users

📊 Project Status

  • ✅ Core validation engine
  • ✅ Advanced validators library
  • ✅ Framework integrations
  • ✅ CLI tools
  • ✅ Security features
  • ✅ Monitoring & observability
  • ✅ Documentation
  • ✅ Testing suite
  • 🚧 Community features
  • 🚧 Performance optimizations

Made with ❤️ by Sherin Joseph Roy

GitHub | Documentation | Issues | Discussions

Metadata

Release files for envvar-validator 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for envvar-validator 1.0.1
File Size Uploaded
envvar_validator-1.0.1.tar.gz 43.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for envvar-validator 1.0.1
File Interpreter ABI Platform
envvar_validator-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 89.3 kB

Release files / envvar_validator-1.0.1.tar.gz

Download URL envvar_validator-1.0.1.tar.gz
Size 43.3 kB
Tags Source
SHA-256 checksum
How to use checksums
4402e7169e4890631932ecee47b0dd240a785193c4429319f2934d3ad09be9c7
BLAKE2b-256 checksum
How to use checksums
b59ec3563f8be61e6af30b89c545ae762dbcd09e9bcbaf4075589e04c8ee7260
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release files / envvar_validator-1.0.1-py3-none-any.whl

Download URL envvar_validator-1.0.1-py3-none-any.whl
Size 46.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b39ac4e4b8390589c5e741f9bca267d3535936bdddda5b46dc508cec9f1c9adb
BLAKE2b-256 checksum
How to use checksums
c3bd91320bc6cab01b280b4a8b030b982d6c9554eb989fa90a34e7d08c34352f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page