{"_id":"@albertoarena/envaudit","_rev":"5-d5a82352f74163a3f0a086c1abd47151","name":"@albertoarena/envaudit","dist-tags":{"latest":"1.1.0"},"versions":{"0.1.2":{"name":"@albertoarena/envaudit","version":"0.1.2","keywords":["env","dotenv","lint","diff","cli","audit","secrets"],"license":"MIT","_id":"@albertoarena/envaudit@0.1.2","maintainers":[{"name":"albertoarena","email":"arena.alberto@gmail.com"}],"homepage":"https://github.com/albertoarena/envaudit#readme","bugs":{"url":"https://github.com/albertoarena/envaudit/issues"},"bin":{"envaudit":"bin/envaudit.js"},"dist":{"shasum":"6b07d017bbc601412ef454ee2da74fab62cfa99b","tarball":"https://registry.npmjs.org/@albertoarena/envaudit/-/envaudit-0.1.2.tgz","fileCount":14,"integrity":"sha512-JAxsmuUXiC6h5Qn6jSYjxp9G8IO/KairEjDIoFoKEgBXh520R2QPwRDu6LZu4/G++mFR3/lxU+kP3Dnz3UukSA==","signatures":[{"sig":"MEUCICb2RR0r8knIFUEyg1pqbvNo4v4iexT7saqOpeiTsGdpAiEAqoHx7j0iy0RghrRyIFdlXUSuuYFghrMpBZNo9DNtFmQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19346},"type":"module","engines":{"node":">=18"},"gitHead":"efa349a783de3ba40ab545dc52a281decfc474e6","scripts":{"test":"node --test tests/"},"_npmUser":{"name":"albertoarena","email":"arena.alberto@gmail.com"},"repository":{"url":"git+https://github.com/albertoarena/envaudit.git","type":"git"},"_npmVersion":"10.8.2","description":"Zero-dependency CLI to audit, compare and sync .env files","directories":{},"_nodeVersion":"20.13.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/envaudit_0.1.2_1778071563186_0.3458708767380876","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@albertoarena/envaudit","version":"0.1.3","keywords":["env","dotenv","lint","diff","cli","audit","secrets"],"license":"MIT","_id":"@albertoarena/envaudit@0.1.3","maintainers":[{"name":"albertoarena","email":"arena.alberto@gmail.com"}],"homepage":"https://github.com/albertoarena/envaudit#readme","bugs":{"url":"https://github.com/albertoarena/envaudit/issues"},"bin":{"envaudit":"bin/envaudit.js"},"dist":{"shasum":"e24d6bdefe5c55d6d2956c3fe91f1e6d259c2d56","tarball":"https://registry.npmjs.org/@albertoarena/envaudit/-/envaudit-0.1.3.tgz","fileCount":14,"integrity":"sha512-pHeerVkuSBlKak1KsM4H/3/LrTBvavXRrqrhuPLNBWYEPgEncNcpa1Ul4rnFu/RPUFG2w7/AzxT3yhoR2I4LSQ==","signatures":[{"sig":"MEYCIQD8UzJqO9t3O29cMyZhty7MnvJJL2J5pLY70Qnk9f3cogIhAO1cYGTCvxu4BMJwVSIwpdinENPWF3Fa1XicdLm2dymr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19588},"type":"module","engines":{"node":">=18"},"gitHead":"52de92152441c41abe834eb9938538664b7e52c3","scripts":{"test":"node --test tests/"},"_npmUser":{"name":"albertoarena","email":"arena.alberto@gmail.com"},"repository":{"url":"git+https://github.com/albertoarena/envaudit.git","type":"git"},"_npmVersion":"10.8.2","description":"Zero-dependency CLI to audit, compare and sync .env files","directories":{},"_nodeVersion":"20.13.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/envaudit_0.1.3_1778073833625_0.6370917124526814","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@albertoarena/envaudit","version":"0.1.4","keywords":["env","dotenv","lint","diff","cli","audit","secrets"],"license":"MIT","_id":"@albertoarena/envaudit@0.1.4","maintainers":[{"name":"albertoarena","email":"arena.alberto@gmail.com"}],"homepage":"https://github.com/albertoarena/envaudit#readme","bugs":{"url":"https://github.com/albertoarena/envaudit/issues"},"bin":{"envaudit":"bin/envaudit.js"},"dist":{"shasum":"153c344a70e5ea4af0493b342a286e3d71c3d510","tarball":"https://registry.npmjs.org/@albertoarena/envaudit/-/envaudit-0.1.4.tgz","fileCount":14,"integrity":"sha512-/qBbXzFKKLzr/ojmdtHNDR6EQPvcAAJt2n8p/Q49d44O98VDjcQ+KxjeVjKhbJNZ+1cnm+wahwvK8NmqDqneJg==","signatures":[{"sig":"MEQCIHBlgLuEAnRAxRXVpKjhp0efJkqZXPpSgl7tiY63Y4KIAiAYNwGgYmz18dk9/ZgRofQQltZtD3neUggqbrr9c1XCdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20264},"type":"module","engines":{"node":">=18"},"gitHead":"e376e8af8aa8d5095b7f7fc7acc829c2ca51eece","scripts":{"test":"node --test tests/"},"_npmUser":{"name":"albertoarena","email":"arena.alberto@gmail.com"},"repository":{"url":"git+https://github.com/albertoarena/envaudit.git","type":"git"},"_npmVersion":"10.8.2","description":"Zero-dependency CLI to audit, compare and sync .env files","directories":{},"_nodeVersion":"20.13.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/envaudit_0.1.4_1778076152312_0.6024547784289283","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@albertoarena/envaudit","version":"1.0.0","keywords":["env","dotenv","lint","diff","cli","audit","secrets"],"license":"MIT","_id":"@albertoarena/envaudit@1.0.0","maintainers":[{"name":"albertoarena","email":"arena.alberto@gmail.com"}],"homepage":"https://github.com/albertoarena/envaudit#readme","bugs":{"url":"https://github.com/albertoarena/envaudit/issues"},"bin":{"envaudit":"bin/envaudit.js"},"dist":{"shasum":"e1092e34352c805767f3017f630121d9b6cb0003","tarball":"https://registry.npmjs.org/@albertoarena/envaudit/-/envaudit-1.0.0.tgz","fileCount":15,"integrity":"sha512-uQW10+O1m6PHTxc6UIYXDaZJVuosy+IaHYfC+Nxv0lgJyk14e3TjAMrT7yV0sA7LBjb4Vw1tgCZm38VwNh6cAg==","signatures":[{"sig":"MEYCIQCKJQjixHz/KwRRMpXCa22AfLXlpaZ9pPbkyOjR8cUV0gIhANUZxT/J4bxnnxcsvTPIyec2WUKL0tLTOdP9xZNrI57N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22129},"type":"module","engines":{"node":">=18"},"gitHead":"92e30cedb8bc968651e49b16fa1ce277ac74da16","scripts":{"test":"node --test tests/"},"_npmUser":{"name":"albertoarena","email":"arena.alberto@gmail.com"},"repository":{"url":"git+https://github.com/albertoarena/envaudit.git","type":"git"},"_npmVersion":"10.8.2","description":"Zero-dependency CLI to audit, compare and sync .env files","directories":{},"_nodeVersion":"20.13.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/envaudit_1.0.0_1778499791718_0.41528440533427546","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@albertoarena/envaudit","version":"1.1.0","description":"Zero-dependency CLI to audit, compare and sync .env files","type":"module","bin":{"envaudit":"bin/envaudit.js"},"keywords":["env","dotenv","lint","diff","cli","audit","secrets","github-actions","ci"],"author":{"name":"Alberto Arena","email":"arena.alberto@gmail.com","url":"https://github.com/albertoarena"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/albertoarena/envaudit.git"},"bugs":{"url":"https://github.com/albertoarena/envaudit/issues"},"homepage":"https://github.com/albertoarena/envaudit#readme","engines":{"node":">=18"},"scripts":{"test":"node --test tests/*.test.js"},"_id":"@albertoarena/envaudit@1.1.0","gitHead":"42e1458fcdf255aa9b5c24a1643934f529eac9c4","_nodeVersion":"20.13.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-INyXQYBFFG3ZL3Fs+Nb33w+bL/LOjExDD034BuXeG5wHYFXwtwGm9Co73Qc4rxqddTqYi99DqBLzaLAAqidtrA==","shasum":"ccd75f953be93fc552981c2cde801be5b8d7dbb1","tarball":"https://registry.npmjs.org/@albertoarena/envaudit/-/envaudit-1.1.0.tgz","fileCount":15,"unpackedSize":23484,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICL9jmoGtUCHwz1oPUY64kIXeBVyMlkNYjOZ0O/WZTU5AiEA3YOktVKD5pjHnNRSkjimc31sgfS+rpGuje1sVkgCwjo="}]},"_npmUser":{"name":"albertoarena","email":"arena.alberto@gmail.com"},"directories":{},"maintainers":[{"name":"albertoarena","email":"arena.alberto@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/envaudit_1.1.0_1785852614180_0.5160175902738515"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T12:46:03.071Z","modified":"2026-08-04T14:10:14.486Z","0.1.2":"2026-05-06T12:46:03.351Z","0.1.3":"2026-05-06T13:23:53.776Z","0.1.4":"2026-05-06T14:02:32.567Z","1.0.0":"2026-05-11T11:43:11.862Z","1.1.0":"2026-08-04T14:10:14.324Z"},"bugs":{"url":"https://github.com/albertoarena/envaudit/issues"},"license":"MIT","homepage":"https://github.com/albertoarena/envaudit#readme","keywords":["env","dotenv","lint","diff","cli","audit","secrets","github-actions","ci"],"repository":{"type":"git","url":"git+https://github.com/albertoarena/envaudit.git"},"description":"Zero-dependency CLI to audit, compare and sync .env files","maintainers":[{"name":"albertoarena","email":"arena.alberto@gmail.com"}],"readme":"# envaudit\n\n![Traffic](https://raw.githubusercontent.com/albertoarena/envaudit/traffic-data/badge.svg?v=1)\n\nZero-dependency CLI to audit, compare and sync `.env` files.\n\nCompares `.env` against `.env.example`, detects missing variables, undocumented variables, empty values, and possible secrets leaked into `.env.example`.\n\n**[Documentation](https://albertoarena.github.io/envaudit/)**\n\n## Installation\n\n```bash\n# Install globally\nnpm install -g @albertoarena/envaudit\n\n# Or run directly with npx\nnpx @albertoarena/envaudit check\n```\n\n## Usage\n\n### Check (audit)\n\n```bash\n# Auto-detects .env and .env.example in current directory\nenvaudit check\n\n# Custom paths\nenvaudit check --env .env.local --example .env.example\n\n# CI mode — exits with code 1 if errors found\nenvaudit check --ci\n```\n\nOutput categories:\n- **Errors (✗):** Missing variables, possible secrets in `.env.example`, unquoted values with spaces\n- **Warnings (⚠):** Undocumented variables, empty values\n\n### Diff\n\nCompare any two env files:\n\n```bash\nenvaudit diff .env.staging .env.production\n```\n\nShows keys only in each file and keys with different values. Secret-looking values are masked.\n\n### Sync\n\nAdd missing keys between `.env` and `.env.example`:\n\n```bash\n# Preview changes\nenvaudit sync --dry-run\n\n# Apply changes\nenvaudit sync\n```\n\n### Doc\n\nGenerate markdown documentation of all env variables:\n\n```bash\nenvaudit doc > ENV.md\n```\n\nOutputs a table grouped by prefix (DB_, APP_, AWS_, etc.) with columns: Variable, Required, Default, Group.\n\n## CI Integration\n\n### GitHub Actions\n\nUse the action:\n\n```yaml\n- uses: albertoarena/envaudit@v1\n  with:\n    ignore-empty: true   # secrets injected at runtime\n```\n\nInputs (all optional): `command` (default `check`), `env`, `example`, `ci` (default `true`), `ignore-empty`, `no-color` (default `true`). The tool version is whatever tag you pin (`@v1`, `@v1.1.0`).\n\nOr call the CLI directly:\n\n```yaml\n- name: Audit env files\n  run: npx @albertoarena/envaudit@1.1.0 check --ci --no-color\n```\n\n**Heads up:** `.env` is usually gitignored, so on a fresh checkout only `.env.example` exists and `check` has nothing to compare against. Two realistic setups:\n\n**A. Validate `.env.example` only** (typical for public repos). Catches leaked secrets, unquoted values with spaces, and duplicate keys in the example file itself:\n\n```yaml\n- run: cp .env.example .env\n- uses: albertoarena/envaudit@v1\n  with:\n    ignore-empty: true\n```\n\n**B. Validate the real env in a deploy pipeline.** Build `.env` from GitHub Secrets, then confirm nothing declared in the example is missing before shipping:\n\n```yaml\n- name: Build .env\n  run: |\n    cp .env.example .env\n    echo \"DB_PASSWORD=${{ secrets.DB_PASSWORD }}\" >> .env\n    echo \"APP_KEY=${{ secrets.APP_KEY }}\" >> .env\n- uses: albertoarena/envaudit@v1\n```\n\n### GitLab CI\n\n```yaml\naudit-env:\n  script:\n    - cp .env.example .env\n    - npx @albertoarena/envaudit check --ci --no-color --ignore-empty\n```\n\n## Options\n\n| Flag | Description |\n|------|-------------|\n| `--env <path>` | Path to .env file (default: `.env`) |\n| `--example <path>` | Path to .env.example (default: `.env.example`) |\n| `--ci` | Exit with code 1 if errors found |\n| `--ignore-empty` | Skip empty value warnings (useful in CI) |\n| `--dry-run` | Show sync changes without writing |\n| `--no-color` | Disable colored output |\n| `--help, -h` | Show help |\n| `--version, -v` | Show version |\n\n## Requirements\n\n- Node.js >= 18\n- Zero npm dependencies\n\n## License\n\nMIT\n","readmeFilename":"README.md","author":{"name":"Alberto Arena","email":"arena.alberto@gmail.com","url":"https://github.com/albertoarena"}}