Yogesh SinghFor years, developers have been told the same thing: use .env add it to .gitignore never commit...
For years, developers have been told the same thing:
.env
.gitignore
That workflow is everywhere.
It is also fragile.
Plain .env files were convenient, but they were never designed to be a real security boundary. The modern developer workflow still depends on humans remembering not to commit sensitive values, not to expose build logs, not to leak backups, and not to misconfigure deployments.
I wanted something better.
So I built CrowEnv — a system that replaces insecure plain .env files with .cenv, an encrypted format for secrets that can be committed to Git safely.
GitHub repo:
https://github.com/Yogesh1290/crowenv
.env
The problem is not that .env is bad at configuration.
The problem is that .env is plain text.
That means the moment a secret enters a normal .env file, the safety of that secret depends on:
.gitignore was correctIn other words, the standard workflow is not secure by design. It is secure only if nobody makes a mistake.
That is not a great model for real teams, real repos, and real deployments.
CrowEnv introduces a different model:
.cenv file.cenv to GitInstead of saying “never commit secrets,” CrowEnv changes the workflow to:
commit encrypted secrets safely, keep the decryption key separate
That gives developers something the traditional .env convention does not:
a secrets file that is meant to survive inside real Git workflows.
According to the repo README, CrowEnv’s .cenv format uses AES-256-GCM encryption, with PBKDF2-HMAC-SHA256 key derivation at 600,000 iterations, and includes integrity protection through the GCM authentication tag. oai_citation:1‡GitHub
Crows are smart.
They hide valuable things.
They remember where they put them.
That idea matched the product perfectly.
A .env file leaves treasure in the open.
A .cenv file hides it properly.
That is the idea behind CrowEnv:
smart secrets, hidden safely, but still usable in real workflows.
With a normal .env setup, the flow is usually:
.env
.env to .gitignore
With CrowEnv, the flow becomes:
.env into .cenv
.env
.cenv
That means the file inside your repository is no longer plain text.
The repo shows this quick-start flow:
crowenv initcrowenv generate-keyCENV_MASTER_KEY
crowenv encrypt.env
.cenv safely oai_citation:2‡GitHub
This is the part that makes CrowEnv interesting to me:
it does not just say “manage env files better.”
It says:
stop storing secrets in plaintext in the first place.
One thing I wanted was for this not to be just a single CLI hack.
The repo is structured as a broader ecosystem:
.cenv format oai_citation:3‡GitHub
That matters because secrets handling is not a single-language problem.
A real solution should work across:
CrowEnv is designed with that larger ecosystem in mind.
The base commands in the repo are straightforward:
crowenv initcrowenv generate-keycrowenv encryptcrowenv decryptcrowenv loadcrowenv verify oai_citation:4‡GitHub
That gives a pretty clean lifecycle:
For developer experience, that is important.
Security tools fail fast when they become painful to use.
.cenv format
CrowEnv is not just “encrypt the file somehow.”
The repo includes a defined format with versioning and structure, including:
The README also documents the cryptographic pieces behind it:
That makes the project feel more like a protocol and less like a throwaway wrapper around .env.
This part is important because if a tool wants adoption, it cannot just be “my personal format.”
It needs a spec, consistency, and portability.
CrowEnv already moves in that direction.
A lot of people will ask:
why not just use Vault, AWS Secrets Manager, Doppler, 1Password Secrets, or GitHub Actions secrets?
Those tools are useful.
But they solve a somewhat different problem.
CrowEnv is appealing in situations where developers want:
In other words, CrowEnv is not trying to replace every enterprise secret platform.
It is trying to improve the very common, very old, very fragile .env workflow.
That is a big difference.
I think CrowEnv is most useful for:
.env filesIf your workflow still relies on “please don’t commit .env by mistake,” then you are depending on behavior instead of design.
CrowEnv changes the design.
The bigger idea behind CrowEnv is simple:
plaintext secrets should not be the default developer experience anymore.
That old convention survived because it was easy, not because it was good.
CrowEnv tries to keep the ease of file-based configuration while removing the most dangerous assumption:
that secrets should sit in raw text and be protected mostly by habit.
That is why I built it.
Not to make .env slightly nicer.
To make .env unnecessary.
Repo:
https://github.com/Yogesh1290/crowenv
If this idea resonates with you, I would love feedback on:
.cenv formatI’m especially interested in making CrowEnv feel like a serious modern replacement for plaintext env files — not just another wrapper around them.