<?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: Houssam Eddine Hamouich</title>
    <description>The latest articles on DEV Community by Houssam Eddine Hamouich (@drawliin).</description>
    <link>https://dev.to/drawliin</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%2F3861588%2F79df9756-22cc-4d6f-a9f5-4d2de7234e5b.jpg</url>
      <title>DEV Community: Houssam Eddine Hamouich</title>
      <link>https://dev.to/drawliin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/drawliin"/>
    <language>en</language>
    <item>
      <title>I built envlint after losing too much time to broken .env files</title>
      <dc:creator>Houssam Eddine Hamouich</dc:creator>
      <pubDate>Sat, 04 Apr 2026 22:33:37 +0000</pubDate>
      <link>https://dev.to/drawliin/i-built-envlint-after-losing-too-much-time-to-broken-env-files-dpd</link>
      <guid>https://dev.to/drawliin/i-built-envlint-after-losing-too-much-time-to-broken-env-files-dpd</guid>
      <description>&lt;p&gt;A small side project turned into one of those bugs that wastes an entire evening.&lt;/p&gt;

&lt;p&gt;The app worked on one machine, failed on another, and the real issue was not in the code. One variable was missing from &lt;code&gt;.env&lt;/code&gt;, another existed only in &lt;code&gt;.env.example&lt;/code&gt;, and a few old keys were still hanging around even though the app no longer used them.&lt;/p&gt;

&lt;p&gt;Nothing looked obviously broken until runtime.&lt;/p&gt;

&lt;p&gt;That pattern kept repeating, so I built &lt;strong&gt;&lt;code&gt;envlint&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What &lt;code&gt;envlint&lt;/code&gt; Does
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;envlint&lt;/code&gt; is a small open-source CLI written in Go that scans a codebase for referenced environment variables and compares them against your env files.&lt;/p&gt;

&lt;p&gt;The goal is simple: catch config drift early, before it turns into deployment issues, broken local setups, or slow debugging sessions.&lt;/p&gt;

&lt;p&gt;Right now, it can detect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables referenced in code but missing from &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Variables defined in &lt;code&gt;.env&lt;/code&gt; but never used&lt;/li&gt;
&lt;li&gt;Drift between &lt;code&gt;.env&lt;/code&gt; and the example env file&lt;/li&gt;
&lt;li&gt;Duplicate keys in env files&lt;/li&gt;
&lt;li&gt;Whether &lt;code&gt;.env&lt;/code&gt; is ignored by &lt;code&gt;.gitignore&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It currently scans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I Made It
&lt;/h2&gt;

&lt;p&gt;I kept running into the same class of problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A teammate had a different local env setup&lt;/li&gt;
&lt;li&gt;A feature introduced a new variable but nobody added it to the example file&lt;/li&gt;
&lt;li&gt;An old variable stayed around forever because nothing enforced cleanup&lt;/li&gt;
&lt;li&gt;The app only failed once it actually tried to use the missing value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of these issues are simple, but they are annoying because they show up late.&lt;/p&gt;

&lt;p&gt;I wanted a small tool that could point at a repo and say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;These are the env-related problems you should fix before this becomes a runtime bug.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;envlint &lt;span class="nt"&gt;--path&lt;/span&gt; ./my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Missing vars
  - STRIPE_SECRET_KEY

Unused vars
  - LEGACY_FLAG

.env missing from .env.example
  - INTERNAL_API_TOKEN

Summary: 3 issues
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Repo
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/drawliin/envlint" rel="noopener noreferrer"&gt;github.com/drawliin/envlint&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking for Feedback
&lt;/h2&gt;

&lt;p&gt;The project is still early, and I would like feedback from people who manage config-heavy projects.&lt;/p&gt;

&lt;p&gt;In particular, I’d like to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where the current scan is too noisy&lt;/li&gt;
&lt;li&gt;Which env access patterns I should support next&lt;/li&gt;
&lt;li&gt;What would make this useful in CI or team workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it on a real repo and it reports something wrong, that is probably the most useful feedback I can get.&lt;/p&gt;

</description>
      <category>cli</category>
      <category>go</category>
      <category>security</category>
    </item>
  </channel>
</rss>
