<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yogesh Singh</title>
    <description>The latest articles on DEV Community by Yogesh Singh (@yogeshxcode).</description>
    <link>https://dev.to/yogeshxcode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3810592%2F4afc01bd-7e44-4f67-9fb4-f08e807fda0b.png</url>
      <title>DEV Community: Yogesh Singh</title>
      <link>https://dev.to/yogeshxcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yogeshxcode"/>
    <language>en</language>
    <item>
      <title>I Built CrowEnv: An Encrypted Replacement for .env Files</title>
      <dc:creator>Yogesh Singh</dc:creator>
      <pubDate>Sat, 07 Mar 2026 00:19:05 +0000</pubDate>
      <link>https://dev.to/yogeshxcode/i-built-crowenv-an-encrypted-replacement-for-env-files-57de</link>
      <guid>https://dev.to/yogeshxcode/i-built-crowenv-an-encrypted-replacement-for-env-files-57de</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyoey828pqjdkonjv0et9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyoey828pqjdkonjv0et9.jpeg" alt=" " width="800" height="1387"&gt;&lt;/a&gt;For years, developers have been told the same thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;add it to &lt;code&gt;.gitignore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;never commit secrets&lt;/li&gt;
&lt;li&gt;hope nobody leaks anything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That workflow is everywhere.&lt;/p&gt;

&lt;p&gt;It is also fragile.&lt;/p&gt;

&lt;p&gt;Plain &lt;code&gt;.env&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;I wanted something better.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;CrowEnv&lt;/strong&gt; — a system that replaces insecure plain &lt;code&gt;.env&lt;/code&gt; files with &lt;strong&gt;&lt;code&gt;.cenv&lt;/code&gt;&lt;/strong&gt;, an encrypted format for secrets that can be committed to Git safely.&lt;/p&gt;

&lt;p&gt;GitHub repo:&lt;br&gt;
&lt;a href="https://github.com/Yogesh1290/crowenv" rel="noopener noreferrer"&gt;https://github.com/Yogesh1290/crowenv&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem with &lt;code&gt;.env&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The problem is not that &lt;code&gt;.env&lt;/code&gt; is bad at configuration.&lt;/p&gt;

&lt;p&gt;The problem is that &lt;code&gt;.env&lt;/code&gt; is &lt;strong&gt;plain text&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That means the moment a secret enters a normal &lt;code&gt;.env&lt;/code&gt; file, the safety of that secret depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether &lt;code&gt;.gitignore&lt;/code&gt; was correct&lt;/li&gt;
&lt;li&gt;whether a teammate accidentally committed it&lt;/li&gt;
&lt;li&gt;whether a backup, ZIP, log, or screenshot exposed it&lt;/li&gt;
&lt;li&gt;whether a public file path made it reachable&lt;/li&gt;
&lt;li&gt;whether old Git history still contains it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, the standard workflow is not secure by design. It is secure only if nobody makes a mistake.&lt;/p&gt;

&lt;p&gt;That is not a great model for real teams, real repos, and real deployments.&lt;/p&gt;




&lt;h2&gt;
  
  
  What CrowEnv does
&lt;/h2&gt;

&lt;p&gt;CrowEnv introduces a different model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep secrets encrypted by default&lt;/li&gt;
&lt;li&gt;store them in a &lt;code&gt;.cenv&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;commit &lt;code&gt;.cenv&lt;/code&gt; to Git&lt;/li&gt;
&lt;li&gt;keep only the master key secret&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of saying “never commit secrets,” CrowEnv changes the workflow to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;commit encrypted secrets safely, keep the decryption key separate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That gives developers something the traditional &lt;code&gt;.env&lt;/code&gt; convention does not:&lt;br&gt;
a secrets file that is meant to survive inside real Git workflows.&lt;/p&gt;

&lt;p&gt;According to the repo README, CrowEnv’s &lt;code&gt;.cenv&lt;/code&gt; format uses &lt;strong&gt;AES-256-GCM&lt;/strong&gt; encryption, with &lt;strong&gt;PBKDF2-HMAC-SHA256&lt;/strong&gt; key derivation at &lt;strong&gt;600,000 iterations&lt;/strong&gt;, and includes integrity protection through the GCM authentication tag.  &lt;a href="https://github.com/Yogesh1290/crowenv" rel="noopener noreferrer"&gt;oai_citation:1‡GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I called it CrowEnv
&lt;/h2&gt;

&lt;p&gt;Crows are smart.&lt;br&gt;
They hide valuable things.&lt;br&gt;
They remember where they put them.&lt;/p&gt;

&lt;p&gt;That idea matched the product perfectly.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;.env&lt;/code&gt; file leaves treasure in the open.&lt;br&gt;
A &lt;code&gt;.cenv&lt;/code&gt; file hides it properly.&lt;/p&gt;

&lt;p&gt;That is the idea behind CrowEnv:&lt;br&gt;
&lt;strong&gt;smart secrets, hidden safely, but still usable in real workflows.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How the workflow changes
&lt;/h2&gt;

&lt;p&gt;With a normal &lt;code&gt;.env&lt;/code&gt; setup, the flow is usually:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;create &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;fill it with API keys, DB passwords, tokens&lt;/li&gt;
&lt;li&gt;add &lt;code&gt;.env&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;hope it never leaks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With CrowEnv, the flow becomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;initialize CrowEnv&lt;/li&gt;
&lt;li&gt;generate a master key&lt;/li&gt;
&lt;li&gt;encrypt &lt;code&gt;.env&lt;/code&gt; into &lt;code&gt;.cenv&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;delete the plain &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;commit &lt;code&gt;.cenv&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;decrypt or load secrets only when needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That means the file inside your repository is no longer plain text.&lt;/p&gt;

&lt;p&gt;The repo shows this quick-start flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;crowenv init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crowenv generate-key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;set &lt;code&gt;CENV_MASTER_KEY&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crowenv encrypt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;delete &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;commit &lt;code&gt;.cenv&lt;/code&gt; safely  &lt;a href="https://github.com/Yogesh1290/crowenv" rel="noopener noreferrer"&gt;oai_citation:2‡GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the part that makes CrowEnv interesting to me:&lt;br&gt;
it does not just say “manage env files better.”&lt;br&gt;
It says:&lt;br&gt;
&lt;strong&gt;stop storing secrets in plaintext in the first place.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What CrowEnv includes
&lt;/h2&gt;

&lt;p&gt;One thing I wanted was for this not to be just a single CLI hack.&lt;/p&gt;

&lt;p&gt;The repo is structured as a broader ecosystem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js CLI&lt;/li&gt;
&lt;li&gt;Python package&lt;/li&gt;
&lt;li&gt;Go CLI&lt;/li&gt;
&lt;li&gt;Rust CLI&lt;/li&gt;
&lt;li&gt;VS Code extension&lt;/li&gt;
&lt;li&gt;Docker and Kubernetes deployment examples&lt;/li&gt;
&lt;li&gt;CI scripts&lt;/li&gt;
&lt;li&gt;a formal spec for the &lt;code&gt;.cenv&lt;/code&gt; format  &lt;a href="https://github.com/Yogesh1290/crowenv" rel="noopener noreferrer"&gt;oai_citation:3‡GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That matters because secrets handling is not a single-language problem.&lt;/p&gt;

&lt;p&gt;A real solution should work across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;app development&lt;/li&gt;
&lt;li&gt;local machines&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;containers&lt;/li&gt;
&lt;li&gt;multiple programming languages&lt;/li&gt;
&lt;li&gt;editors and tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CrowEnv is designed with that larger ecosystem in mind.&lt;/p&gt;




&lt;h2&gt;
  
  
  Core commands
&lt;/h2&gt;

&lt;p&gt;The base commands in the repo are straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;crowenv init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crowenv generate-key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crowenv encrypt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crowenv decrypt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crowenv load&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;crowenv verify&lt;/code&gt;  &lt;a href="https://github.com/Yogesh1290/crowenv" rel="noopener noreferrer"&gt;oai_citation:4‡GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gives a pretty clean lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;initialize the project&lt;/li&gt;
&lt;li&gt;create a key&lt;/li&gt;
&lt;li&gt;encrypt secrets&lt;/li&gt;
&lt;li&gt;load them into the process environment when needed&lt;/li&gt;
&lt;li&gt;verify file integrity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developer experience, that is important.&lt;br&gt;
Security tools fail fast when they become painful to use.&lt;/p&gt;




&lt;h2&gt;
  
  
  The &lt;code&gt;.cenv&lt;/code&gt; format
&lt;/h2&gt;

&lt;p&gt;CrowEnv is not just “encrypt the file somehow.”&lt;/p&gt;

&lt;p&gt;The repo includes a defined format with versioning and structure, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a version field&lt;/li&gt;
&lt;li&gt;a random salt&lt;/li&gt;
&lt;li&gt;encrypted payload data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The README also documents the cryptographic pieces behind it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AES-256-GCM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PBKDF2-HMAC-SHA256&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;600,000 iterations&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;random nonce&lt;/li&gt;
&lt;li&gt;authentication tag for tamper detection  &lt;a href="https://github.com/Yogesh1290/crowenv" rel="noopener noreferrer"&gt;oai_citation:5‡GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes the project feel more like a protocol and less like a throwaway wrapper around &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This part is important because if a tool wants adoption, it cannot just be “my personal format.”&lt;br&gt;
It needs a spec, consistency, and portability.&lt;/p&gt;

&lt;p&gt;CrowEnv already moves in that direction.&lt;/p&gt;




&lt;h2&gt;
  
  
  What makes CrowEnv different from “just use a secret manager”
&lt;/h2&gt;

&lt;p&gt;A lot of people will ask:&lt;br&gt;
why not just use Vault, AWS Secrets Manager, Doppler, 1Password Secrets, or GitHub Actions secrets?&lt;/p&gt;

&lt;p&gt;Those tools are useful.&lt;br&gt;
But they solve a somewhat different problem.&lt;/p&gt;

&lt;p&gt;CrowEnv is appealing in situations where developers want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a file-based workflow&lt;/li&gt;
&lt;li&gt;local-first usage&lt;/li&gt;
&lt;li&gt;Git-friendly collaboration&lt;/li&gt;
&lt;li&gt;multi-language portability&lt;/li&gt;
&lt;li&gt;something lightweight and easy to bootstrap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, CrowEnv is not trying to replace every enterprise secret platform.&lt;br&gt;
It is trying to improve the very common, very old, very fragile &lt;code&gt;.env&lt;/code&gt; workflow.&lt;/p&gt;

&lt;p&gt;That is a big difference.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who I think this is for
&lt;/h2&gt;

&lt;p&gt;I think CrowEnv is most useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;indie hackers&lt;/li&gt;
&lt;li&gt;open-source maintainers&lt;/li&gt;
&lt;li&gt;small teams&lt;/li&gt;
&lt;li&gt;self-hosters&lt;/li&gt;
&lt;li&gt;developers shipping across multiple stacks&lt;/li&gt;
&lt;li&gt;people tired of secret leaks caused by plain &lt;code&gt;.env&lt;/code&gt; files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your workflow still relies on “please don’t commit &lt;code&gt;.env&lt;/code&gt; by mistake,” then you are depending on behavior instead of design.&lt;/p&gt;

&lt;p&gt;CrowEnv changes the design.&lt;/p&gt;




&lt;h2&gt;
  
  
  The bigger idea
&lt;/h2&gt;

&lt;p&gt;The bigger idea behind CrowEnv is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;plaintext secrets should not be the default developer experience anymore.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That old convention survived because it was easy, not because it was good.&lt;/p&gt;

&lt;p&gt;CrowEnv tries to keep the ease of file-based configuration while removing the most dangerous assumption:&lt;br&gt;
that secrets should sit in raw text and be protected mostly by habit.&lt;/p&gt;

&lt;p&gt;That is why I built it.&lt;/p&gt;

&lt;p&gt;Not to make &lt;code&gt;.env&lt;/code&gt; slightly nicer.&lt;/p&gt;

&lt;p&gt;To make &lt;code&gt;.env&lt;/code&gt; unnecessary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Repo:&lt;br&gt;
&lt;a href="https://github.com/Yogesh1290/crowenv" rel="noopener noreferrer"&gt;https://github.com/Yogesh1290/crowenv&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If this idea resonates with you, I would love feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;code&gt;.cenv&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;developer workflow&lt;/li&gt;
&lt;li&gt;CLI ergonomics&lt;/li&gt;
&lt;li&gt;editor integration&lt;/li&gt;
&lt;li&gt;multi-language support&lt;/li&gt;
&lt;li&gt;CI/CD use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m especially interested in making CrowEnv feel like a serious modern replacement for plaintext env files — not just another wrapper around them.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>security</category>
      <category>typescript</category>
    </item>
    <item>
      <title>I built flash-pkg — fix slow pip/npm installs on slow internet</title>
      <dc:creator>Yogesh Singh</dc:creator>
      <pubDate>Sat, 07 Mar 2026 00:11:03 +0000</pubDate>
      <link>https://dev.to/yogeshxcode/i-built-flash-pkg-fix-slow-pipnpm-installs-on-slow-internet-43gg</link>
      <guid>https://dev.to/yogeshxcode/i-built-flash-pkg-fix-slow-pipnpm-installs-on-slow-internet-43gg</guid>
      <description>&lt;p&gt;Many developers in Asia struggle with slow dependency installs.&lt;/p&gt;

&lt;p&gt;I built flash-pkg to solve this problem.&lt;/p&gt;

&lt;p&gt;flash-pkg pre-caches heavy dependencies like torch, transformers, React, Next.js so new projects start instantly.&lt;/p&gt;

&lt;p&gt;Key features:&lt;br&gt;
• 10–100x faster installs&lt;br&gt;
• Works on Linux, macOS, Windows&lt;br&gt;
• Shareable compressed cache&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/Yogesh1290/flash-pkg" rel="noopener noreferrer"&gt;https://github.com/Yogesh1290/flash-pkg&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlwznis8b00zrycf7fdq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlwznis8b00zrycf7fdq.jpeg" alt=" " width="800" height="1380"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
