envtether
Static Configuration Intelligence for Modern Python Applications
envtether is an enterprise-grade static analysis tool designed to help developers understand, validate, secure, and maintain project configuration before deployment.
It acts as the Ruff, SonarQube, or ESLint of application configuration, providing deep insights into how your configuration variables are defined, used, and deployed across your entire stack.
🌟 Key Features
- Comprehensive Discovery: Parses Python code (AST-level),
.envfiles, Docker Compose, Kubernetes manifests, GitHub Actions, Terraform, and more. - Deep Framework Support: Native support for FastAPI, Flask, Django, Pydantic
BaseSettings, Dynaconf, and standardos.getenv. - Advanced Secret Detection: Combines heuristic regex patterns with Shannon entropy analysis to detect hardcoded and exposed credentials (AWS, Azure, GCP, OpenAI, Stripe, etc.) with minimal false positives.
- Cross-File Drift Detection: Identifies misalignments between your
.env.example, Docker Compose, and CI/CD pipelines. - Health Scoring: Computes a holistic health score (0-100) based on 11 dimensions of configuration hygiene, giving you an immediate sense of production readiness.
- Dependency Graph: Builds a directed dependency graph connecting variables to services, files, and deployment targets. Exportable to Mermaid, Graphviz DOT, JSON, and interactive HTML.
- Automated Documentation: Generates beautiful Markdown and HTML documentation of your project's configuration variables.
- CI/CD Integration: Supports SARIF output for GitHub Advanced Security and other CI/CD dashboards.
🚀 Installation
envtether requires Python 3.12 or newer.
pip install envtether
Or using uv:
uv tool install envtether
🛠️ Quick Start
Navigate to your project's root directory and run the CLI:
1. Scan and Analyze
# Full interactive scan with Rich console output
envtether scan .
# Run a comprehensive health check (fails on critical issues)
envtether doctor .
2. Generate a Dependency Graph
Visualise how your configuration connects to your codebase and infrastructure:
envtether graph . --format html --output config-graph.html
3. Generate Documentation
Auto-generate a beautiful configuration reference for your team:
envtether docs . --format markdown --output CONFIG.md
4. CI/CD Integration
Run envtether in your CI pipeline to catch configuration drift and exposed secrets before they are merged:
envtether ci . --format sarif > envtether-results.sarif
🧠 How It Works
- Scanning: Recursively finds all relevant files (ignoring
.gitignore,node_modules, etc.). - Architecture Discovery: Detects the project type (e.g. FastAPI, Docker), cloud providers, and service dependencies (e.g. Redis, PostgreSQL).
- AST Analysis: Parses Python code using
astto findos.getenv,os.environ, and PydanticBaseSettingsdeclarations. - Format Analysis: Parses
.env, Docker Compose, Kubernetes manifests, and Terraform files to track variable definitions. - Cross-Validation: Compares variable sets across files to detect drift (e.g. variable defined in Docker Compose but missing in
.env.example). - Secret Detection: Runs high-performance entropy checks and pattern matching on configuration values.
- Reporting: Aggregates findings, computes a health score, and exports to the requested format.
⚙️ Configuration
Initialise a configuration file in your repository:
envtether init .
This creates a .envtether.toml file where you can customise rules, secret detection thresholds, ignore paths, and more.
🔌 Plugin System
envtether is designed with a robust protocol-based plugin architecture. You can easily extend it to support proprietary configuration formats, internal tools, or new frameworks.
🤝 Contributing
We welcome contributions! Please see our Contributing Guide and Code of Conduct.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🛡️ Security
If you discover a security vulnerability within envtether, please review our Security Policy for reporting guidelines.
Metadata
Release files for envtether 26.7.20
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| envtether-26.7.20.tar.gz | 65.8 kB | Without provenance | Details for envtether-26.7.20.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| envtether-26.7.20-py3-none-any.whl | Python 3 | none | any | Details for envtether-26.7.20-py3-none-any.whl |
Total release size: 159.5 kB
Release files / envtether-26.7.20.tar.gz
| Download URL | envtether-26.7.20.tar.gz |
|---|---|
| Size | 65.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f3814b0cc2e566cf2457c2562ee2ccd3b7fcbdbc806fa785a76c18313a87fee
|
|
BLAKE2b-256 checksum How to use checksums |
2acf807f875cac62af832e8a4c25a28dd89aef32bc3e7764904044aa510751fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.2
|
Release files / envtether-26.7.20-py3-none-any.whl
| Download URL | envtether-26.7.20-py3-none-any.whl |
|---|---|
| Size | 93.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00e57d01e8d342ddcacf4de16e376fd074e581f49afb39100c44f243a1f2e7d4
|
|
BLAKE2b-256 checksum How to use checksums |
d5e4cb8601b8337c4fe7be831cf4807e54918777e2ba21d6fd198b14a5a4ac8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.2
|
Security for envtether 26.7.20
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.