Generate example .env files from existing .env files with placeholder detection.
Project description
Envertor is a CLI tool that generates .env.example files by extracting environment variables from existing .env files or by scanning Python and JavaScript/TypeScript projects. It also helps keep your secrets safe with .gitignore warnings, key parity checks, and CI/CD-ready exit codes.
Install
pip install envertor
Development install:
pip install -e .
Usage
Generate .env.example from an existing .env
Strips real values and outputs empty keys by default:
envertor -i .env -o .env.example
Original .env |
Generated .env.example |
|---|---|
SECRET=mysecret |
SECRET= |
PORT=8080 |
PORT= |
DEBUG=true |
DEBUG= |
RATE=3.14 |
RATE= |
Use --placeholder to write type-aware values instead of empty:
envertor -i .env -o .env.example --placeholder
Original .env |
With --placeholder |
|---|---|
SECRET=mysecret |
SECRET='' |
PORT=8080 |
PORT=0 |
DEBUG=true |
DEBUG=false |
RATE=3.14 |
RATE=0.0 |
Scan a project for environment variables
Detects env vars used in source code and generates .env.example from actual usage — no existing .env required:
envertor -p ./my-project -o .env.example
Limit scanning to a specific language:
envertor -p ./my-project --lang python
envertor -p ./my-project --lang js
Supports:
- Python:
os.getenv("VAR"),os.environ["VAR"],os.environ.get("VAR") - JS/TS:
process.env.VAR(.js,.ts,.jsx,.tsx)
Create .env from .env.example
Bootstrap a local .env from the example file so teammates can fill in their own values:
envertor --create-env # reads .env.example by default
envertor --create-env staging.env.example # reads a custom file
If .env already exists, writes .env.envertor instead to avoid overwriting.
Fill empty values from an old .env
Backfill empty keys in your current .env with values from a previous or backup .env:
envertor --complete --from .env.old
envertor --complete .env.staging --from .env.backup
Only strictly empty keys (KEY=) are filled — keys that already have a value (including placeholders like KEY='') are left untouched. Keys present in the source but absent from the target are ignored.
Preview what would be filled without writing anything:
envertor --complete --from .env.old --dry-run
Check parity between .env and .env.example
Explicitly verify that both files have the same keys. Designed for CI/CD pipelines — exits 1 on mismatch:
envertor --check
envertor --check --env-file /deploy/.env --example-file /repo/.env.example
Example output on failure:
[envertor] FAIL: Keys mismatch between .env and .env.example
Missing from .env: NEW_KEY
Missing from .env.example: OLD_KEY
Use in a pipeline:
# GitHub Actions example
- name: Check env parity
run: envertor --check --env-file .env --example-file .env.example
Protect .env in .gitignore
Every envertor run warns if .env is not listed in your repo's .gitignore:
[envertor] WARNING: .env is not listed in .gitignore. Run --protect to fix.
Run --protect to interactively add it. Envertor walks up from your .env location to find the repo root (where .git/ lives), so it works correctly in monorepos:
envertor --protect
[envertor] .env is not listed in .gitignore. Add it now? [y/N]: y
[envertor] Added .env to .gitignore at /repo/.gitignore
[envertor] If .env was previously committed, remove it from git cache:
git rm --cached .env
If .env is already protected:
[envertor] .env is already protected in .gitignore
Show version
envertor -v
Automatic safety checks
Every time envertor runs, it performs these checks automatically:
.gitignore warning — warns if .env is not listed in .gitignore (use --protect to fix):
[envertor] WARNING: .env is not listed in .gitignore. Run --protect to fix.
Key parity warning — warns if .env and .env.example have different keys:
[envertor] WARNING: Keys in .env not documented in .env.example: DB_URL
[envertor] WARNING: Keys in .env.example not found in .env: NEW_KEY
Leftover values warning — warns if .env.example contains non-placeholder values:
[envertor] WARNING: .env.example has a real value set for API_KEY
Options
| Flag | Description |
|---|---|
-i, --input FILE |
Path to input .env file |
-o, --output FILE |
Path to output .env.example (default: .env.example) |
-p, --project DIR |
Project folder to scan for env variable usage |
--lang python|js|both |
Language filter for project scanning (default: both) |
--placeholder |
Use type-aware placeholders (0, 0.0, false, '') instead of empty values |
--create-env [FILE] |
Create .env from FILE (default: .env.example) |
--complete [TARGET] |
Fill empty keys in TARGET (default: .env) from --from source |
--from SOURCE |
Source .env file to read values from (used with --complete) |
--dry-run |
Preview what --complete would fill without writing any changes |
--protect |
Interactively add .env to .gitignore at repo root |
--check |
Check key parity and exit 1 on mismatch (CI/CD mode) |
--env-file FILE |
.env path for --check (default: .env) |
--example-file FILE |
.env.example path for --check (default: .env.example) |
-v, --version |
Show version |
Notes
- Automatically skips
node_modules/,venv/,__pycache__/,.next/,.git/,.idea/,.vscode/ - Regex-based scanning catches the most common patterns (
os.getenv,os.environ,process.env) .env.envertoris a safe backup — rename it to.envor diff it against your existing one--protectwalks up the directory tree to find.git/, so it works correctly in monorepos
License
MIT © Samin Yeasar
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file envertor-0.1.3.tar.gz.
File metadata
- Download URL: envertor-0.1.3.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
724dcb15092aa669e3909c0618e54ee1220e0600c6ea04e03f6093acd57469ba
|
|
| MD5 |
63ce8280845d2ef1986d90d15ca5e29c
|
|
| BLAKE2b-256 |
297eca8192df6c90d39a28748394ccab42a1421417dba6305f3802838a7b5769
|
File details
Details for the file envertor-0.1.3-py3-none-any.whl.
File metadata
- Download URL: envertor-0.1.3-py3-none-any.whl
- Upload date:
- Size: 10.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
112d8b3dad0c07c573d65a7c6ea52a0359a3e714ee43bd54c3488994ca07a7e7
|
|
| MD5 |
355cc1d2f76a43998a1d1d1fdbe02327
|
|
| BLAKE2b-256 |
2ebc95eece5c22e1f84868d3bbbdaa4d92f0cca4137a8bae9640dee647a466e4
|