I’m Never Using .env Files Ever Again


Hey friends!

Are you tired of juggling countless environment variables across different projects? Do you find yourself constantly tweaking your .zshrc or .bashrc with tokens, api keys or other project-specific variables? Well, I’ve got a game-changer for you!

The Problem with Traditional .env Files

We’ve all been there. You start a new project, set up a few environment variables in a .env file, and everything’s peachy. But as your project grows, so does your list of variables. Before you know it, you’re drowning in a sea of API keys, database credentials, and configuration settings.

The worst part? These variables are always loaded, even when you don’t need them.

It’s like carrying around a huge keychain when you only need one key. Not only that, sometimes they start conflicting with one another; a PG_USER or a AWS_ACCESS_KEY_ID of another environment will run over or get over-written, creating one big mess.

Enter direnv: Your Environment’s Best Friend

Direnv is like a smart badge for your code. It automatically loads and unloads environment variables based on your current directory. Here’s why it’s awesome:

  1. Path-based loading: Variables are only loaded when you’re in the right directory. Step out, and they’re gone!
  2. Security boost: No more accidental use of production credentials in your dev environment.
  3. Git-friendly: Works beautifully with Git worktrees, or allowing different configs for different branches.
  4. Built-in standard library: Use functions like dotenv to load traditional .env files effortlessly.
  5. Programmable environments: Set up warnings for missing required variables, ensuring your team has everything they need.

How to Get Started

  1. Install direnv (I used nix-env).
  2. Add eval "$(direnv hook zsh)" to your .zshrc (or equivalent for your shell).
  3. Create a .envrc file in your project directory.
  4. Run direnv allow to approve the .envrc file.

Pro Tip: Handling Secrets

For sensitive data, check out Dotenvx.
I wrote about it before, but in a nutshell, it allows for encryption of your .env files, and manages keys for you. It has its own pros and cons, and you can read all about it here

Wrapping Up

Direnv isn’t just a tool; it’s a new way of thinking about environment management. It’s secure, efficient, and plays well with modern development practices like 12-factor apps.

I made a video covering all about, catch it here.

Give direnv a try, and you’ll wonder how you ever lived without it!

ESPRESSO FRIDAYS

Every once in a while I send hand picked things I've learned. Kind of like your filter to the tech internet. No spam, I promise!

Read more from ESPRESSO FRIDAYS

You’ve Never Seen a Shell Like Xonsh This issue is brought to you by: Redis Iris: Your agents should be getting smarter Unreliable agents fail in production. Redis Iris is a unified, real-time context engine that delivers fresh, relevant context so agents perform at scale. Try for FREE Tell me if this sounds familiar:You start with a quick shell script. Then one step gets annoying, so you call Python. Then Python needs to shell out again. Then you’re parsing strings, juggling quoting, and...

Stop Renting SaaS. Build Your Own Cloud. This issue is brought to you by: Security, Performance, Simplicity. Pick Three. Twingate delivers an identity-based access for users, services, and AI agents that deploys in minutes, scales to every resource, and finally lets you retire your VPN. Try Twingate - it's FREE! -> Why pay cloud companies when you can just… not? I’ve recently started running my own services at home, because.. honestly? I’m tired of paying cloud providers for things I can run...

This Tool Replaced 7 CLIs (and killed my opensource) This issue is brought to you by: Depot: Build faster. Waste less time. Accelerate your Docker image builds and GitHub Actions workflows. Easily integrate with your existing CI provider and dev workflows to save hours of build time. Get started for free -> I’ve been in the terminal for 12 years. I don’t get surprised often. Then I found Television, and I was wrong about it before I even opened it. The friction of endless pipes ||| There’s a...