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

THIS Is The Terminal For People Who Just Want Things To Work Picture this: You're watching a skilled developer, one that you value their skills, repeatedly hitting the up arrow key, hunting for that command they used yesterday. Then, another senior, pops up three different default terminal windows just to show you their process running, while sending requests from the other, instead of simply splitting their terminal screen. Sound familiar? That's the reality for the vast majority of terminal...

I Just Unlocked MacOS GOD MODE With Hammerspoon Ever felt like your Mac is an overprotective parent, constantly limiting what you can do? Can't open any downloaded app, can't control your own notifications, can't do anything that isn't strictly within the boundaries dictated by Apple... I just discovered a power tool that hands you the keys to the kingdom – Hammerspoon, a decade-old but criminally underrated Mac automation tool that lets you bend macOS to your will with simple Lua scripting....

Why I'm Ditching Nix Home ManagerAnd What I'm Using Instead This issue is brought to you by: Ready to Take Your Testing to the Next Level? Don’t let complex testing slow you down! With Squish, you can automate your entire UI testing process across multiple platforms, ensuring both speed and accuracy. Take a tour to see Squish for yourself! For the longest time, my dotfiles felt like a junk drawer: essential, but keeping them in order is a constant battle. Like many developers, I've been...