{"_id":"@bobfromarcher/envdoc","_rev":"2-706d3900badc88070041bd00c9d2e839","name":"@bobfromarcher/envdoc","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@bobfromarcher/envdoc","version":"1.0.0","keywords":["env","dotenv","environment-variables","cli","env-example","documentation","ci","zero-dependency","devtools","ripgrep"],"author":{"name":"bobfromarcher"},"license":"MIT","_id":"@bobfromarcher/envdoc@1.0.0","maintainers":[{"name":"bobfromarcher","email":"chrisbellth@gmail.com"}],"homepage":"https://github.com/bobfromarcher/envdoc#readme","bugs":{"url":"https://github.com/bobfromarcher/envdoc/issues"},"bin":{"envdoc":"bin/envdoc.js"},"dist":{"shasum":"bcc147a7684f4dadfd7b684c6f380d72dc79dd70","tarball":"https://registry.npmjs.org/@bobfromarcher/envdoc/-/envdoc-1.0.0.tgz","fileCount":4,"integrity":"sha512-TfnJ7T9QwCxq5VAh+fRx+kJ948hOUuJrs6MDkOzeL+wB7VQ4ymA2TfsxsNiNg5G2FWsDKYwfsT+DQ/z5qU2a0g==","signatures":[{"sig":"MEQCIED9CJMbaq1XV6FhoDuAAl9tYnYKPKklMWATyq4yYiSmAiA0glZx5Udzxz7fUw4b2Qt+RcxyvV3/4yOG1E1H8IMl+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13360},"engines":{"node":">=16"},"gitHead":"cb1f25c387698411c374514c42a31ba5854eab01","scripts":{"test":"node test/test.js","start":"node bin/envdoc.js"},"_npmUser":{"name":"bobfromarcher","email":"chrisbellth@gmail.com"},"repository":{"url":"git+https://github.com/bobfromarcher/envdoc.git","type":"git"},"_npmVersion":"11.11.0","description":"Find every environment variable your code reads, then document it — generate .env.example, a Markdown table, and fail CI on undocumented vars. Zero dependencies.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/envdoc_1.0.0_1781945960200_0.329715384125161","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bobfromarcher/envdoc","publishConfig":{"access":"public"},"version":"1.0.1","description":"Find every environment variable your code reads, then document it - generate .env.example, a Markdown table, and fail CI on undocumented vars. Zero dependencies.","bin":{"envdoc":"bin/envdoc.js"},"scripts":{"test":"node test/test.js","start":"node bin/envdoc.js"},"keywords":["env","dotenv","environment-variables","cli","env-example","documentation","ci","zero-dependency","devtools","ripgrep"],"author":{"name":"bobfromarcher"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bobfromarcher/envdoc.git"},"bugs":{"url":"https://github.com/bobfromarcher/envdoc/issues"},"homepage":"https://github.com/bobfromarcher/envdoc#readme","engines":{"node":">=16"},"gitHead":"a99c8c3aee0926884a8f12dd8502582aee5db312","_id":"@bobfromarcher/envdoc@1.0.1","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-zC8l0EIhFIrrI0rI1TCv2Tpm7AWqV82BDs7QlQN0n07DyPZkgXeAIZg1msrXfsv/A+2rUV7FUh9IVsyADo5Q0A==","shasum":"3b64f3f4a7c45c83a0e1758b2bc316e04eb49eeb","tarball":"https://registry.npmjs.org/@bobfromarcher/envdoc/-/envdoc-1.0.1.tgz","fileCount":4,"unpackedSize":13306,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIB03qxWpN3V6ysEqdHMrwl63kaQtQoaqGQWiwk6MYjWpAiBJ8pVilJjN0tFFQSPuRqIpakmeovcLnbHQycYub22Zeg=="}]},"_npmUser":{"name":"bobfromarcher","email":"chrisbellth@gmail.com"},"directories":{},"maintainers":[{"name":"bobfromarcher","email":"chrisbellth@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/envdoc_1.0.1_1781948590276_0.4932521629068689"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-20T08:59:20.019Z","modified":"2026-06-20T09:43:10.597Z","1.0.0":"2026-06-20T08:59:20.326Z","1.0.1":"2026-06-20T09:43:10.461Z"},"bugs":{"url":"https://github.com/bobfromarcher/envdoc/issues"},"author":{"name":"bobfromarcher"},"license":"MIT","homepage":"https://github.com/bobfromarcher/envdoc#readme","keywords":["env","dotenv","environment-variables","cli","env-example","documentation","ci","zero-dependency","devtools","ripgrep"],"repository":{"type":"git","url":"git+https://github.com/bobfromarcher/envdoc.git"},"description":"Find every environment variable your code reads, then document it - generate .env.example, a Markdown table, and fail CI on undocumented vars. Zero dependencies.","maintainers":[{"name":"bobfromarcher","email":"chrisbellth@gmail.com"}],"readme":"# envdoc\n\n[![npm](https://img.shields.io/npm/v/@bobfromarcher/envdoc?color=cb3837&logo=npm)](https://www.npmjs.com/package/@bobfromarcher/envdoc)\n[![CI](https://github.com/bobfromarcher/envdoc/actions/workflows/ci.yml/badge.svg)](https://github.com/bobfromarcher/envdoc/actions/workflows/ci.yml)\n[![license](https://img.shields.io/npm/l/@bobfromarcher/envdoc?color=blue)](LICENSE)\n[![zero deps](https://img.shields.io/badge/dependencies-0-success)](package.json)\n\nFinds every environment variable your code reads and tells you which ones are documented. It can generate a `.env.example`, print a Markdown table, or fail CI when code references a variable that is missing from your `.env.example`. No dependencies, no AI.\n\nA new `process.env.SOMETHING` that never makes it into `.env.example` is a common cause of \"works on my machine\". envdoc reads your source the way your runtime does and reports the drift.\n\n<p align=\"center\"><img src=\"demo.svg\" alt=\"envdoc running on a sample project\" width=\"520\"></p>\n\n## Install\n\n```bash\nnpm install -g @bobfromarcher/envdoc\n# or run once:\nnpx @bobfromarcher/envdoc\n```\n\n## Languages\n\nenvdoc recognises environment access in JavaScript and TypeScript (`process.env.X`, `process.env['X']`, `import.meta.env.X`), Python (`os.environ['X']`, `os.environ.get('X')`, `os.getenv('X')`), Go (`os.Getenv(\"X\")`, `os.LookupEnv`), and Ruby (`ENV['X']`).\n\n## Usage\n\n```bash\nenvdoc [path] [options]\n```\n\n| Option | Description |\n| --- | --- |\n| `--write` | Write or update `.env.example` (existing values are kept) |\n| `--check` | Exit 1 if code uses vars missing from `.env.example` |\n| `--markdown`, `--md` | Print a Markdown table of all referenced variables |\n| `--json` | Print raw JSON |\n| `--env <file>` | The dotenv file to diff against (default `.env.example`) |\n| `-h, --help` | Show help |\n| `-v, --version` | Show version |\n\n## Examples\n\n```bash\nenvdoc                      # summary for the current directory\nenvdoc --write              # regenerate .env.example, keeping known values\nenvdoc src --markdown > ENV.md\n```\n\n## Guard it in CI\n\n```yaml\n# .github/workflows/env.yml\n- run: npx @bobfromarcher/envdoc --check\n```\n\nThe build fails the moment someone references a variable that is not documented, so your code and your `.env.example` stay in sync.\n\n## Fast path\n\nWhen [ripgrep](https://github.com/BurntSushi/ripgrep) is on your `PATH`, envdoc uses it to list files (respecting `.gitignore`) and scans thousands of files in milliseconds. Without ripgrep it falls back to a built-in Node walk with the same results and still zero npm dependencies.\n\n## Development\n\n```bash\ngit clone https://github.com/bobfromarcher/envdoc\ncd envdoc\nnode test/test.js\n```\n\nCI runs the suite on Node 18, 20 and 22 across Linux, macOS and Windows.\n\n## License\n\nMIT, bobfromarcher.\n","readmeFilename":"README.md"}