Documentation
Zero-knowledge encrypted .env management for teams.
Installation
Install boltenv globally. Requires Node.js 22+.
npm install -g @boltenv.dev/cliOr via the install script:
curl -fsSL https://boltenv.dev/install | shQuickstart
Get your team synced in 60 seconds.
# 1. Authenticate with GitHub (one time)boltenv login# 2. Push your .env (encrypted locally, key never leaves your machine)boltenv push# 3. Share the key with a teammate (via a secure channel)boltenv key export# 4. Teammates import the key and pullboltenv key import <base64-key>boltenv pullThat's it. Your teammate now has the same .env — decrypted on their machine, never visible to the server.
Zero-knowledge encryption
boltenv uses a zero-knowledge architecture. Your encryption key is generated locally and never transmitted to the server. The server only stores ciphertext and a key fingerprint.
Algorithm: AES-256-GCM (NIST standard)Key derivation: HKDF-SHA256 (separate subkeys for encryption and HMAC)IV: 12 bytes (random per encryption)Auth tag: 16 bytes (tamper detection)Key stored at: ~/.boltenv/keys/{owner}/{repo}.keyServer sees: ciphertext + fingerprint (NOT the key)A fresh random IV is generated for every push, so encrypting the same data twice produces different ciphertext. The GCM auth tag ensures integrity — any tampering is detected on pull.
Authentication
boltenv uses GitHub as its identity layer. No new accounts — your GitHub repo access determines who can push and pull secrets.
# Log in via GitHub Device Flow (opens browser)boltenv login# Check who you're logged in asboltenv whoami# Log out (removes stored token)boltenv logoutYour GitHub token is stored at ~/.boltenv/auth.json with 0600 permissions. You need write (push) access to the repository on GitHub to push or pull secrets.
Pushing secrets
Push encrypts your .env file locally and uploads only the ciphertext to the server.
# Push .env from the current directoryboltenv push# Push a specific fileboltenv push .env.production# Push to a specific environmentboltenv push -e production# Skip confirmation promptboltenv push -y# Push to a specific repo (no .git needed)boltenv push -r myorg/myappThe first push auto-generates an encryption key and saves it locally. Share it with teammates using boltenv key export.
Pulling secrets
Pull downloads and decrypts secrets using your local key. The server never sees the key.
# Pull .env (auto-detects environment from branch)boltenv pull# Pull from a specific environmentboltenv pull -e staging# Pull a specific version (rollback)boltenv pull --revision 3# Print to stdout instead of writing a fileboltenv pull --stdout# Output as JSON or shell exportsboltenv pull --format jsonboltenv pull --format shellKey management
Every repo has one encryption key. The first person to push auto-generates it. Everyone else imports it.
# Export your key as base64 (share via secure channel)boltenv key export# Import a key from a teammateboltenv key import dGhpcyBpcyBhIDMyIGJ5dGUga2V5...# Check if you have the key for this repoboltenv key statusEnvironments
boltenv auto-detects the environment from your git branch:
main, master → productionstaging → stagingdevelop → developmentanything else → development (default)Override with the -e flag on any command: boltenv push -e production
CI/CD
For CI pipelines, Docker, and headless servers — use environment variables instead of interactive login.
# Set these in your CI environment:export BOLTENV_TOKEN="ghp_xxxxxxxxxxxx" # GitHub PAT with repo scopeexport BOLTENV_KEY="dGhpcyBpcyBhIDMy..." # From: boltenv key exportexport BOLTENV_REPO="myorg/myapp" # Skip git detection# Pull secrets in CIboltenv pull -yAll three env vars are required for non-interactive usage. BOLTENV_TOKEN must be a GitHub personal access token with repo scope.
Security model
boltenv is designed so the server can never see your secrets.
YOUR MACHINE BOLTENV CLOUD┌─────────────────────────┐ ┌─────────────────────────┐│ AES-256-GCM encryption │ │ Stores ciphertext only ││ 256-bit random key │ │ Cannot decrypt ││ Fresh IV per push │ │ No keys stored ││ GCM auth tag (tamper) │ │ Validates GitHub auth ││ Plaintext stays here │ │ │└─────────────────────────┘ └─────────────────────────┘All filenames from the server are validated against a strict allowlist. Path traversal, absolute paths, and shell metacharacters are rejected. Files are written atomically with 0600 permissions.
Project setup
Initialize boltenv in your project. It detects your framework, package manager, and env files automatically.
# Interactive setupboltenv init# Use defaults (no prompts)boltenv init -yThis creates a .boltenv.yaml config and adds .env to your .gitignore. Commit the config so your teammates have the same setup.
Diagnostics
If something isn't working, doctor checks every dependency in order and tells you exactly what to fix.
$ boltenv doctor ✓ Git remote myorg/myapp ✓ GitHub token Loaded for alice ✓ GitHub API alice — scopes: repo ✓ Token scope repo scope present ✓ Repo access write access to myorg/myapp ✓ Encryption key 32-byte key (fp: 509f94d5b2d0e38b) ✓ boltenv API https://boltenv.dev (120ms) Summary: 7 ok Next: everything looks goodEach check tells you the exact next action if it fails — no guessing.