Stop sharing .env over Slack

"Hey can someone send me the .env?" Every team has this conversation. It ends with secrets in DMs, email attachments, and screenshots. There's a better way.

the old way
[Slack DM]
New hire: "Can someone send me the .env?"
Sarah: "One sec..."
[uploads .env file]
[file contains 47 production secrets]
[searchable forever in Slack history]

The .env Sharing Problem

Every team does it. Nobody talks about how bad it is.

Onboarding

"Who has the latest .env?" You copy from whoever responds first. Half the keys are outdated. The other half you don't need. You spend the morning debugging config.

Offboarding

Someone leaves. They have the .env on their laptop. Did they copy it anywhere? You don't know. You should rotate everything. You rotate the obvious ones and hope.

The Slack Archive

Every .env file ever shared. Every API key pasted in a DM. Searchable by anyone who joins the workspace. Forever. That's how Slack works.

Encrypt once. Pull anywhere.

Push encrypted secrets to the team. Everyone pulls what they need.

The Team Workflow

One person pushes. Everyone pulls. No Slack required.

Lead pushes secrets

# Sarah (the lead) has the canonical .env
# She encrypts and pushes to the backend

$ envv push .env --env development
Encrypting secrets...
Uploading to envv backend...
✓ Pushed 12 secrets to development

# Secrets encrypted locally with SOPS
# Only ciphertext transmitted
# Original .env never leaves her machine

Team pulls secrets

# Jordan (new hire) pulls on day one
# No Slack. No "who has the .env?"

$ envv pull --env development
Pulling secrets...
✓ Saved to .envv/.env.development.encrypted

$ envv run npm start
🔓 Running with development secrets (12 vars)
Server running on :3000

# Decrypted in memory, never on disk

New Hire: Day One

From zero to running code. No waiting for Sarah.

jordan's laptop
# Install envv
curl -fsSL https://getenvv.com/envv | sh
# Create account (generates your encryption key)
envv auth register
✓ Registered as jordan@startup.io
# Pull the team's secrets
envv pull --env development
✓ Pulled 12 secrets
# Run the app
envv run npm start
Server running on :3000

Sarah was never interrupted. Jordan didn't wait. The secrets never touched Slack.

Monday Morning

New hire starts. How long until they're productive?

Without envv

9:00  "Who has the .env file?"
9:15  Waiting for Sarah to get online
10:30 Sarah sends partial .env via Slack
10:45 "Missing DATABASE_URL"
11:00 Sarah is in a meeting
12:00 Lunch
13:00 Finally has all secrets
13:15 App runs

Total: half a day
(Sarah interrupted 3 times)

With envv

9:00  envv auth register
9:01  envv pull --env development
9:02  envv run npm start
9:03  App runs

Total: 3 minutes
(Sarah never interrupted)




Setting Up Your Team

Create an org. Invite members. Push secrets.

one-time setup
# Create your organization
envv org create --name "My Startup"
✓ Created organization: My Startup
# Invite your team
envv org invite --email sarah@startup.io --role admin
envv org invite --email jordan@startup.io --role member
✓ Invites sent
# Push your secrets
envv push .env --env development
✓ Pushed 12 secrets to development

That's it. Your team can now envv pull and start working.

Works Offline

Pull once, run anywhere. No network required after first sync.

on a plane
envv run npm start
Authenticating...
Connection failed
⚠️ Offline mode: using cached secrets
🔓 Running with development secrets (12 vars)
Server running on :3000

Airplane mode. Flaky hotel wifi. CI runner without network access.
envv run automatically falls back to cached secrets. You keep working.

Two Ways to Run

Cloud sync or local encryption. Your choice.

envv run (with backend sync)

# Syncs latest, falls back to cache offline
envv run npm start

# Great for:
# - Teams sharing secrets
# - Always getting latest values
# - Works offline after first pull

envv run (local only)

# Decrypts local file, no network ever
envv run -- npm start

# Great for:
# - Solo projects
# - CI/CD pipelines
# - Air-gapped environments

What Teams Get Wrong

"Just commit .env.example"

# .env.example
DATABASE_URL=postgres://localhost/myapp
STRIPE_KEY=sk_test_xxxxx

# Problems:
# - .env.example often has real values
# - git history keeps everything forever
# - You still share real secrets via Slack

Encrypted file in repo

# .env.encrypted (ciphertext)
DATABASE_URL=ENC[AES256_GCM,data:xxx...]
STRIPE_KEY=ENC[AES256_GCM,data:xxx...]

# Benefits:
# - Safe to commit
# - Real values, encrypted
# - Team pulls and decrypts locally

Secrets in 1Password/shared vault

# Copy from 1Password, paste into .env
# Every. Single. Time.

# Problems:
# - Manual copy-paste is error-prone
# - Secrets still end up in plaintext .env
# - No integration with your dev workflow

Pull and run

# One command to rule them all
$ envv run npm start

# Benefits:
# - Secrets decrypted in memory
# - Never written to disk
# - Always in sync with team

The Alternative

What happens if you keep sharing .env files?

Incident response

"We think credentials were leaked." Who has the .env? Everyone. What do we rotate? Everything. How long does that take? Days.

Compliance audit

"Show us who has access to production credentials." You search Slack history. You check email. You ask around. You don't actually know.

The 2am incident

Production is down. The intern is online. They have production database credentials because everyone has the same .env. What could go wrong?

Get Started

5 minutes to better secrets
# Install
curl -fsSL https://getenvv.com/envv | sh
# Register
envv auth register
# Create org and push secrets
envv org create --name "My Team"
envv push .env --env development
# Tell your team to pull
"Run: envv auth register && envv pull --env development"
# Everyone runs
envv run npm start
Server running on :3000

Your team deserves better than Slack DMs.

Encrypt once. Pull anywhere. Run everywhere.

curl -fsSL https://getenvv.com/envv | sh