STOP BREAKING YOUR .ENV FILES.
Define in the repo. Generate locally. Onboard the whole team the same way.
How it works
Three steps to configuration that just works.
Commit a template, run generate from the project root, and onboard the whole team on the same flow. No mystery commands, no stale docs.
Define
Commit a `.env.template` in your repo. That one versioned file lists every key your app expects, without secrets.
Generate
Run `genv` from the project root, answer the prompts once per key, and get a local `.env` written from the template.
Onboard
Every developer runs the same command against the same template. Same prompts, same shape, so new hires are not reverse engineering Slack screenshots.
The outcome
One source of truth. Zero surprises.
Bootstrap once with genv init: creates the starter .env.template, and ensures .env is ignored by git (creating or updating .gitignore automatically).
Fewer errors
One template and one generate flow means fewer missing keys and less copying and pasting drift between laptops.
Aligned teams
Everyone pulls from the same template. Onboarding is running the CLI, not chasing tribal knowledge.
Faster setup
Regenerate `.env` in seconds when keys change instead of editing ten local variants by hand.
Production confidence
Ship knowing every developer materialized their env from the committed template your team already agreed on.
Genesis-env is not a tool.
It's a configuration discipline.
Genesis-env keeps your environment variables aligned with the committed template so drift and missing keys are less likely to ship. It's the difference between chaos and control.
Workflow
From template to local.env
One file describes every key your app needs. Developers run the CLI to materialize a real .env with their own values, without guessing names or copying and pasting from Slack.
# .env.template (committed; no secrets) DATABASE_URL= API_KEY= STRIPE_WEBHOOK_SECRET= NODE_ENV=development
# .env (local; gitignored) DATABASE_URL=postgres://localhost:5432/app API_KEY=sk_live_xxxx STRIPE_WEBHOOK_SECRET=whsec_xxx_ NODE_ENV=development
Example values only. Your real .env stays local and out of version control.
Virtual tour
Explore Genesis-env in the browser. Run commands and see output live, like an interactive exhibit.
$ genv init ✔ .env.template created ✔ .gitignore created ✔ .env added to .gitignore $ genv ✔ Found .env.template ? DATABASE_URL: (postgres://localhost:5432/app) ? API_KEY: ? NODE_ENV: (development) ✔ .env written successfully. $ genv validate ✔ .env matches .env.templateOpen Playground
Ready to enforce configuration discipline?
Start with the playground. Full documentation is in the nav.