.env.local works…A local-first CLI that makes environment configuration deterministic. No cloud dependency. No guessing which value won.
It works on your machine.
It fails in CI.
Your teammate asks: “what's DATABASE_URL?”
Onboarding depends on tribal knowledge.
.env.local gets copied around until nobody trusts it.
That is not a secret-storage problem.
It is an environment-consistency problem.
envctl fixes this.
Every step has a clear responsibility. No hidden source of truth.
What the project requires
What each machine stores locally
Which local value set is active
What is actually true at runtime
How the resolved environment reaches your tools
From install to runtime — every command has a clear purpose.
config init — creates your user-level configinit — prepares the repo and installs Git hooksfill — asks only for missing required valuescheck — validates the resolved environmentrun — executes with resolved env injectedadd — adds a variable to the shared contractfill to provide their own local valuesguard secrets before commit and pushWithout losing the bigger picture.
Install, init, fill, check, run. Done in 60 seconds.
Contract, vault, profiles, resolution, projection — the full mental model.
Every CLI command, every flag, every option documented.
Docker, CI, profiles, teams, hooks — practical guides.
Common errors, recovery steps, debugging tips.
Architecture layers, boundaries, and design decisions.