A lightweight and simple library for adding visual environment banners to FastAPI applications.
Inspired by django-env-notice, but specifically designed for FastAPI with a focus on simplicity and ease of integration.
Visual environment indicators help prevent mistakes by clearly showing which environment you're working in
- Simple and Lightweight: Just a few lines of code to integrate
- Visual and Intuitive: Colorful banners that clearly differentiate environments
- Highly Configurable: Customize colors, texts, and positions
- Swagger UI Support: Banner also appears in API documentation
- Zero Configuration: Works out-of-the-box with sensible defaults
- Secure: Banner disabled in production by default
Full documentation is available at pinnlabs.github.io/fastapi-env-banner
pip install fastapi-env-banneror if you are using uv:
uv add fastapi-env-bannerfrom fastapi import FastAPI
from fastapi_env_banner import EnvBannerConfig, EnvBannerMiddleware, setup_swagger_ui
# Create FastAPI application
app = FastAPI(title="My API")
# Configure banner (auto-detects from ENVIRONMENT variable)
config = EnvBannerConfig.from_env()
# Add middleware
app.add_middleware(EnvBannerMiddleware, config=config)
# Setup Swagger UI with banner
setup_swagger_ui(app, config)
@app.get("/")
async def root():
return {"message": "Hello World"}from fastapi_env_banner import Environment, EnvBannerConfig
# Custom configuration
config = EnvBannerConfig(
environment=Environment.STAGING,
enabled=True,
custom_text="STAGING ENVIRONMENT",
custom_color="#FF6B6B",
position="top", # or "bottom"
show_in_swagger=True
)The library supports the following environments with pre-defined colors:
| Environment | Default Color | Default Text |
|---|---|---|
| LOCAL | Green (#4CAF50) |
LOCAL ENVIRONMENT |
| DEVELOPMENT | Blue (#2196F3) |
DEVELOPMENT ENVIRONMENT |
| STAGING | Orange (#FF9800) |
STAGING ENVIRONMENT |
| PRODUCTION | Red (#F44336) |
PRODUCTION ENVIRONMENT |
| TESTING | Purple (#9C27B0) |
TESTING ENVIRONMENT |
Set the ENVIRONMENT variable (or another of your choice):
export ENVIRONMENT=stagingAccepted values:
localdev,developmentstage,stagingprod,productiontest,testing
EnvBannerConfig(
environment: Environment = Environment.LOCAL,
enabled: bool = True,
custom_text: Optional[str] = None,
custom_color: Optional[str] = None,
position: str = "top", # "top" or "bottom"
show_in_swagger: bool = True
)from fastapi import FastAPI
from fastapi_env_banner import EnvBannerConfig, EnvBannerMiddleware
app = FastAPI()
app.add_middleware(EnvBannerMiddleware, config=EnvBannerConfig.from_env())from fastapi import FastAPI
from fastapi_env_banner import (
Environment,
EnvBannerConfig,
EnvBannerMiddleware,
setup_swagger_ui
)
app = FastAPI(title="Production API")
config = EnvBannerConfig(
environment=Environment.STAGING,
custom_text="⚠️ TEST ENVIRONMENT - DO NOT USE IN PRODUCTION ⚠️",
custom_color="#E91E63",
position="bottom",
show_in_swagger=True
)
app.add_middleware(EnvBannerMiddleware, config=config)
setup_swagger_ui(app, config)import os
from fastapi import FastAPI
from fastapi_env_banner import EnvBannerConfig, EnvBannerMiddleware
app = FastAPI()
# Completely disable in production
is_production = os.getenv("ENVIRONMENT") == "production"
config = EnvBannerConfig.from_env()
config.enabled = not is_production
app.add_middleware(EnvBannerMiddleware, config=config)By default, the banner is NOT displayed in production environment as a security measure. This prevents environment information from being accidentally exposed.
To force display in production (not recommended):
config = EnvBannerConfig(
environment=Environment.PRODUCTION,
enabled=True # Force display
)- Middleware: Intercepts HTML responses and automatically injects the banner
- Templates: Clean, pythonic HTML generation using string templates
- Swagger UI: Customizes the documentation page to include the banner
- Zero Impact: Does not affect JSON APIs or other non-HTML responses
- Performance: Minimal overhead, only processes HTML responses
Contributions are welcome! Feel free to:
- Fork the project
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by django-env-notice
- Built with FastAPI
- Developed by PinnLabs
If you encounter any issues or have suggestions, please open an issue.
Made with ❤️ by PinnLabs