Your .env files, on every machine.
envden keeps your env files in sync across your computers. Encrypted on your machine, stored on a server you run. Free and open source.
$curl -fsSL https://envden.theclau.de/install.sh | sh$brew install notsuhas/tap/envdenMIT · self-hosted · end-to-end encrypted
Sound familiar?
Every laptop has a slightly different .env.
You fix a key on one machine and forget the other. A new worktree starts with no env at all. You end up sending yourself secrets over chat. Secrets managers help, but they store keys, not files, so your comments and layout don't make it.
3 machines / 1 fileEncrypted before it leaves your machine.
Push from one computer, pull on another. Your server stores the file but can't read it.
plaintext → ciphertext → plaintextEverything a .env needs to follow you around.
~/.envden/storegithub.com/you/shop/.env
One file, every worktree.
Each repo's env lives in one place, and every checkout links to it.
laptop
- API_KEY
- DB_URL
- ~ PORT
desktop
- API_KEY
- DB_URL
- PORT
- + REDIS_URL
base
- API_KEY
- DB_URL
- PORT
merged
- API_KEY
- DB_URL
- ~ PORT
- + REDIS_URL
Merges by key.
Edit on two machines and envden merges the keys that changed. Real conflicts wait for you.
$ cd ~/code/shop
envden: github.com/you/shop out of sync
A nudge in your shell.
cd into a repo that's behind and your prompt tells you.
pairing codeK7QF2MXP
pairing code
Add a laptop with a code.
Type an 8-character pairing code on the new machine and it's in.
- laptopmember
- desktopmember
- old-laptopremoved
keysepoch 1epoch 2
Lost a laptop? Remove it.
envden rotates the keys, so that device can't fetch anything new.
envden agent install. envden status --json. envden doctor --json
Built for coding agents.
Agents can check status and run setup. You still type the password.
Keep a recovery kit.
Store your recovery kit like a passport.
Your server. Your keys. Your network.
Run the server in Docker on a home box, or on the laptop you already have. Devices reach it over Tailscale. There's no account to sign up for and nothing to pay.
0accounts
self-hosted
1binary
your hardware
$0to pay
free and MIT
The server can't read your files.
id: 0dTtVqNJjgYOE4cTkd
6JVYFGIqn9EMBH5dlwm9rdiINxaBP60tSJPB9JMaGq18JPyp5mozhTAypiGz5IQU
id: zpvsrHruWdks49MakK
5VxXbjmPa6Qq1LqkldIk0sR3YUCe/sDSUXIjOc3w0mk0FcwUQSYIGoJf5srgxHgv
id: y1LsBkJTJZxKtB9hk3
4hOWx/E0M2dJqQbrlKqM97Ani4r7ueS3VmCGeviGhiTrBpu+o/Ids8SMK3QNpFwK
- [x]Files are encrypted on your device. The server only sees ciphertext and random IDs.
- [x]Your master password never leaves your machine (OPAQUE).
- [x]Each device has its own keys. Remove one and the keys rotate.
- [x]Every checkout needs your approval before it gets secrets.
- [x]Updates are signed, and envden checks the signature before installing.
- [x]Built on audited crypto libraries. Nothing hand-rolled.
Up and running in a few minutes.
macOS / Linux / WindowsInstall
$curl -fsSL https://envden.theclau.de/install.sh | sh$brew install notsuhas/tap/envdenOne binary for macOS, Linux and Windows. The server is the same binary, or a Docker image.
Setup
envden setup. Host the server on this machine? An always-on host is recommended.. yes. Server setup token. ••••••••••••••••. Device name. laptop. Master password. ••••••••••••. Confirm master password. ••••••••••••. Store this recovery kit like a passport.. Approve checkouts to track. ~/code/shop ~/code/api
Add a device
envden device add. Master password. ••••••••••••. 3-K7QF-2MXP. . . Add desktop?. yes
. . . envden join <server>. Pairing code. •••••••••••. Waiting for the approving device.
Day to day
envden status. envden: server reachable. envden: github.com/you/shop out of sync. envden pull. Merge changes to PORT, REDIS_URL?. yes. envden push
Stop copying .env files around.
envden setup. Device name. laptop. Master password. ••••••••••••. ✓ vault created. Store this recovery kit like a passport.