<?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>Forem: Adeyemi</title>
    <description>The latest articles on Forem by Adeyemi (@deyemie).</description>
    <link>https://forem.com/deyemie</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%2F239557%2Fd725435a-f08c-4714-a933-7658a40a43d7.jpeg</url>
      <title>Forem: Adeyemi</title>
      <link>https://forem.com/deyemie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/deyemie"/>
    <language>en</language>
    <item>
      <title>Introducing EnvGuard: Catch .env Mistakes Before They Break Your App</title>
      <dc:creator>Adeyemi</dc:creator>
      <pubDate>Mon, 23 Feb 2026 21:50:53 +0000</pubDate>
      <link>https://forem.com/deyemie/introducing-envguard-catch-env-mistakes-before-they-break-your-app-32mg</link>
      <guid>https://forem.com/deyemie/introducing-envguard-catch-env-mistakes-before-they-break-your-app-32mg</guid>
      <description>&lt;p&gt;EnvGuard is an open-source &lt;code&gt;.env&lt;/code&gt; validator that catches missing keys, type mismatches, stale variables, and potential secret leaks before they break your app or CI pipeline.&lt;/p&gt;

&lt;p&gt;If you work with &lt;code&gt;.env&lt;/code&gt; files, this is the guardrail that prevents avoidable config bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Validate &lt;code&gt;.env&lt;/code&gt; against &lt;code&gt;.env.example&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Validate values with &lt;code&gt;.env.schema&lt;/code&gt; types&lt;/li&gt;
&lt;li&gt;Detect likely hardcoded secrets&lt;/li&gt;
&lt;li&gt;Find likely unused env variables&lt;/li&gt;
&lt;li&gt;Run in watch mode for instant feedback while coding&lt;/li&gt;
&lt;li&gt;Enforce stricter checks in CI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Teams Need a &lt;code&gt;.env&lt;/code&gt; Validator
&lt;/h2&gt;

&lt;p&gt;Most configuration failures are not hard problems. They are visibility problems.&lt;/p&gt;

&lt;p&gt;You pull a branch and the app fails because one variable is missing.&lt;br&gt;
You fix that and hit a runtime bug because a boolean is &lt;code&gt;"yes"&lt;/code&gt; instead of &lt;code&gt;true&lt;/code&gt;.&lt;br&gt;
You deploy and discover stale env keys nobody remembers adding.&lt;/p&gt;

&lt;p&gt;These issues are easy to fix once identified, but expensive when discovered late.&lt;/p&gt;

&lt;p&gt;EnvGuard shifts that feedback earlier.&lt;/p&gt;
&lt;h2&gt;
  
  
  What EnvGuard Checks
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Missing required keys
&lt;/h3&gt;

&lt;p&gt;Compares &lt;code&gt;.env&lt;/code&gt; against &lt;code&gt;.env.example&lt;/code&gt; and reports missing keys.&lt;/p&gt;
&lt;h3&gt;
  
  
  Extra/stale keys
&lt;/h3&gt;

&lt;p&gt;Warns on env keys that exist in &lt;code&gt;.env&lt;/code&gt; but not in &lt;code&gt;.env.example&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Type validation
&lt;/h3&gt;

&lt;p&gt;With &lt;code&gt;.env.schema&lt;/code&gt;, validates types like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;float&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;url&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;email&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Secret detection
&lt;/h3&gt;

&lt;p&gt;Flags suspicious high-entropy values and known token patterns.&lt;/p&gt;
&lt;h3&gt;
  
  
  Unused variable detection
&lt;/h3&gt;

&lt;p&gt;Scans for env keys that appear unused in the codebase.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;code&gt;.env.example&lt;/code&gt; vs &lt;code&gt;.env.schema&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Use both, but for different contracts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.env.example&lt;/code&gt; defines which keys should exist (key contract)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.env.schema&lt;/code&gt; defines what each key should look like (type contract)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only pick one, start with &lt;code&gt;.env.example&lt;/code&gt;.&lt;br&gt;
Best coverage comes from using both.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Most Practical Feature: &lt;code&gt;watch&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;One-time validation is good.&lt;br&gt;
Continuous validation while coding is better.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;envguard watch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Watch mode automatically re-runs validation when env files change.&lt;/p&gt;

&lt;p&gt;By default, it watches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.env.example&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Optionally, include schema watching:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;envguard watch &lt;span class="nt"&gt;--schema&lt;/span&gt; .env.schema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives immediate feedback after every save and helps prevent late discovery of config breakage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1) Basic key validation&lt;/span&gt;
envguard validate

&lt;span class="c"&gt;# 2) Add type validation&lt;/span&gt;
envguard validate &lt;span class="nt"&gt;--schema&lt;/span&gt; .env.schema

&lt;span class="c"&gt;# 3) CI-friendly strict mode&lt;/span&gt;
envguard validate &lt;span class="nt"&gt;--strict&lt;/span&gt;

&lt;span class="c"&gt;# 4) JSON output for tooling&lt;/span&gt;
envguard validate &lt;span class="nt"&gt;--json&lt;/span&gt;

&lt;span class="c"&gt;# 5) Continuous checks while coding&lt;/span&gt;
envguard watch &lt;span class="nt"&gt;--schema&lt;/span&gt; .env.schema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Suggested Team Workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Maintain required keys in &lt;code&gt;.env.example&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;.env.schema&lt;/code&gt; for type validation.&lt;/li&gt;
&lt;li&gt;Keep &lt;code&gt;envguard watch&lt;/code&gt; running during development.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;envguard validate --strict&lt;/code&gt; in CI.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What EnvGuard Is Not
&lt;/h2&gt;

&lt;p&gt;EnvGuard is not a secret manager.&lt;br&gt;
It does not replace Vault or cloud secret stores.&lt;/p&gt;

&lt;p&gt;It is a focused validation layer for env correctness.&lt;/p&gt;
&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;Configuration bugs are boring and expensive.&lt;/p&gt;

&lt;p&gt;EnvGuard helps you catch them early, keep local setups stable, and reduce avoidable CI/deploy failures.&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/atoyegbe/envguard@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repo: &lt;a href="https://github.com/atoyegbe/envguard" rel="noopener noreferrer"&gt;envguard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you already use another &lt;code&gt;.env&lt;/code&gt; checker, what does it catch well and where does it fall short?&lt;/p&gt;

</description>
      <category>cli</category>
      <category>go</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>django app using postgresql database</title>
      <dc:creator>Adeyemi</dc:creator>
      <pubDate>Sun, 24 Jan 2021 12:53:22 +0000</pubDate>
      <link>https://forem.com/deyemie/django-app-using-postgresql-database-757</link>
      <guid>https://forem.com/deyemie/django-app-using-postgresql-database-757</guid>
      <description>&lt;p&gt;&lt;a href="https://www.section.io/engineering-education/django-app-using-postgresql-database/"&gt;https://www.section.io/engineering-education/django-app-using-postgresql-database/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>First time here, be nice.</title>
      <dc:creator>Adeyemi</dc:creator>
      <pubDate>Mon, 21 Sep 2020 00:02:08 +0000</pubDate>
      <link>https://forem.com/deyemie/first-time-here-be-nice-3iid</link>
      <guid>https://forem.com/deyemie/first-time-here-be-nice-3iid</guid>
      <description>&lt;p&gt;Okay, after a lot of self-doubts and thinking about what to write and how I should go about it. I will be writing a lot about my learning process, things I learn and things I find interesting mainly on Backend development with Python (Django\Flask). &lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
