A secure command-line utility for sharing .env files across development teams using GitHub Gists with client-side AES-256 encryption.
- π Client-side Encryption: AES-256 encryption with PBKDF2 key derivation
- π Free Storage: Uses GitHub Gists (no additional service costs)
- π₯ Team-friendly: Simple sharing via gist IDs
- π‘οΈ Zero-knowledge: GitHub never sees your plaintext secrets
- π Project-aware: Remembers vault configuration per project
- π Secure by Default: Restricted file permissions (600)
βββββββββββββββββββ AES-256 ββββββββββββββββββββ HTTPS βββββββββββββββ
β Local .env β βββββββββββββββΆβ Encrypted Blob β ββββββββββββΆβ GitHub Gist β
β (plaintext) β Client-side β (ciphertext) β β (private) β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββ
- Your secrets never leave your machine in plaintext
- Password-based encryption with 100,000 PBKDF2 iterations
- Salt-based security prevents rainbow table attacks
- Private GitHub Gists for encrypted storage
pip install creds-vaultgit clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make installgit clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make install-devCreate a GitHub personal access token with gist scope:
- Go to GitHub Settings β Tokens
- Click "Generate new token (classic)"
- Select only the
gistscope - Copy the token
# Set environment variable
export GITHUB_TOKEN="ghp_your_token_here"
# Make it permanent
echo 'export GITHUB_TOKEN="ghp_your_token_here"' >> ~/.bashrc
source ~/.bashrcsecrets --version
secrets --help# Navigate to your project
cd my-awesome-project
# Create or edit your .env file
cat > .env << EOF
DATABASE_URL=postgresql://localhost:5432/myapp
API_KEY=sk-1234567890abcdef
STRIPE_SECRET=sk_test_xyz123
JWT_SECRET=super-secret-jwt-key
EOF
# Initialize encrypted vault
secrets init
# Output:
# β
Successfully initialized encrypted secrets vault
# π Content encrypted with AES-256
# π Gist ID: xxxxxx
#
# π€ Share this command with your team:
# secrets pull --gist-id xxxxxx
#
# β οΈ Important: Share the vault password securely!# Navigate to project directory
cd my-awesome-project
# Pull secrets (replace with actual gist ID)
secrets pull --gist-id xxxxxx
# Enter vault password: β’β’β’β’β’β’β’β’β’β’
# β
Successfully pulled and decrypted .env
# π Saved project configuration# Check project status
secrets status
# Pull latest changes
secrets pull
# Make local changes to .env
echo "NEW_FEATURE_FLAG=true" >> .env
# Push changes to vault
secrets push
# Check what's configured
secrets statusInitialize encrypted vault with current .env file.
secrets init [--filename .env.local]Options:
--filename: Specify custom env file name (default:.env)
Push local env file to vault.
secrets push [--filename .env.local]Options:
--filename: Specify custom env file name (default:.env)
Pull env file from vault.
secrets pull [--gist-id ID] [--filename .env] [--force]Options:
--gist-id: Gist ID (required for first-time setup)--filename: Custom filename (default: auto-detect)--force: Overwrite without confirmation
Show project status and configuration.
secrets statusAfter installation, your project will have:
your-project/
βββ .env # Your secrets file
βββ .gitignore # Should include .env
βββ (other project files)
~/.creds-vault/
βββ config.json # Project β gist mappings
- Use strong passwords: Minimum 12 characters with mixed case, numbers, symbols
- Unique passwords: Don't reuse passwords from other services
- Secure sharing: Use password managers or secure channels to share vault passwords
- Regular rotation: Consider rotating vault passwords periodically
- Minimal permissions: Only grant
gistscope - Regular rotation: Rotate tokens every 3-6 months
- Secure storage: Never commit tokens to code repositories
- Team vs individual: Consider using team-specific tokens for organizations
- Gitignore: Always add
.env*to your.gitignore - Permissions: Tool automatically sets secure permissions (600)
- Cleanup: Remove
.envfiles when no longer needed
- Plaintext secrets: Never transmitted or stored in the cloud
- Man-in-the-middle: HTTPS protects data in transit
- GitHub breaches: Encrypted data remains secure
- Token compromise: Attackers only see encrypted blobs
- Password security: Vault security depends on password strength
- Local compromise: If your machine is compromised, local files are at risk
- Social engineering: Sharing passwords insecurely can compromise vaults
- GitHub availability: Service depends on GitHub being accessible
- Development environments: Suitable for dev/staging secrets
- Production secrets: Consider dedicated secret management for production
- Audit requirements: Tool doesn't provide audit logs (GitHub does)
- Regulatory compliance: Evaluate against your specific requirements
git clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make install-devmake testmake lint # Run linting
make format # Format code
make check # Lint + testmake build # Build distribution
make publish # Publish to PyPI# Initialize with custom filename
secrets init --filename .env.production
# Push/pull custom files
secrets push --filename .env.local
secrets pull --filename .env.stagingThe tool automatically manages different vaults per project:
cd project-a
secrets init # Creates vault A
cd ../project-b
secrets init # Creates vault B
secrets status # Shows project B config
cd ../project-a
secrets status # Shows project A config# In CI/CD pipeline
export GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}"
secrets pull --gist-id $VAULT_ID --force"Invalid GitHub token"
# Check token is set
echo $GITHUB_TOKEN
# Verify token has gist scope
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user"Project not initialized"
# Initialize new vault
secrets init
# Or link to existing vault
secrets pull --gist-id your-gist-id"Decryption failed"
# Wrong password - try again
secrets pull
# Vault corrupted - contact vault creator"File permission denied"
# Fix file permissions
chmod 600 .env# Enable verbose logging
export DEBUG=1
secrets statusWe welcome contributions! Please see our Contributing Guide for details.
git clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make install-dev
make testThis project is licensed under the MIT License - see the LICENSE file for details.
- cryptography: For robust encryption primitives
- requests: For HTTP client functionality
- GitHub: For providing free Gist storage
- Python community: For excellent tooling and libraries
β Star us on GitHub | π Read the Docs | π Report Issues
Made with β€οΈ for developers who care about security