███╗ ██╗██╗ ██╗ ██████╗ ██╗ ████████╗
████╗ ██║██║ ██║██╔═══██╗██║ ╚══██╔══╝
██╔██╗ ██║██║ ██║██║ ██║██║ ██║
██║╚██╗██║╚██╗ ██╔╝██║ ██║██║ ██║
██║ ╚████║ ╚████╔╝ ╚██████╔╝███████╗██║
╚═╝ ╚═══╝ ╚═══╝ ╚═════╝ ╚══════╝╚═╝
GitHub-native, Zero-Trust CLI for managing encrypted environment variables
nvolt is a cryptographically enforced secret manager built entirely around Git and local files. No server, no login, no organization model - just Git, encryption, and per-machine keypairs.
- Zero-Trust Architecture: All encryption/decryption happens locally
- No Backend: All data lives in Git repositories
- No Authentication: Uses Git for access control
- Cryptographically Enforced: Access control through wrapped keys
- Git-Native:
.nvolt/directories act as encrypted, committed.envreplacements - $0/month: Free forever, no usage limits
| Feature | nvolt | HashiCorp Vault | Doppler | git-crypt | SOPS |
|---|---|---|---|---|---|
| Monthly Cost | free | $$$ | $$ | free | free |
| Zero-Knowledge | ✅ | ❌ | ✅ | ✅ | |
| No Backend | ✅ | ❌ | ❌ | ✅ | ✅ |
| No Login/Auth | ✅ | ❌ | ❌ | ✅ | ✅ |
| Per-Machine Access | ✅ | ✅ | ✅ | ||
| Environment-Based | ✅ | ✅ | ✅ | ❌ | ❌ |
| Multi-Project | ✅ | ✅ | ✅ |
# macOS and Linux (also works in Git Bash on Windows)
curl -fsSL https://install.nvolt.io/latest/install.sh | bashgo install github.com/iluxav/nvolt/cmd/nvolt@latestgit clone https://github.com/iluxav/nvolt.git
cd nvolt
make build# Initialize vault in current directory
$ nvolt init
✓ Machine keypair generated
✓ Vault initialized at .nvolt/
# Push secrets from .env file
$ nvolt push -f .env
✓ Encrypted 12 secrets
✓ Secrets pushed to vault
# Pull and view secrets
$ nvolt pull
API_KEY=abc123
DB_PASSWORD=secret
# Run a command with secrets loaded
$ nvolt run npm start
✓ Loaded 12 secrets
🚀 Server running on port 3000# Initialize with a GitHub repository
nvolt init --repo org/secrets-repo
# Push secrets to production environment
nvolt push -f .env.production -e production
# Pull secrets from production
nvolt pull -e production- 🚀 Startups & Solo Developers: No monthly costs, enterprise-grade security without the enterprise price tag
- 👥 Small Teams: Securely share secrets across laptops and CI/CD using tools you already know
- 🔒 Security-Conscious Organizations: Zero-Trust architecture with no single point of failure
- 🤖 CI/CD Pipelines: Grant servers access to specific environments, secrets loaded at runtime
Initialize a new vault and generate machine keypair.
# Local mode (current directory)
nvolt init
# Global mode (dedicated GitHub repo)
nvolt init --repo org/secrets-repoFlags:
--repo- GitHub repository URL for global vault
Join an existing vault and register this machine.
# Local mode (vault in current directory)
nvolt join
# Global mode (vault in GitHub repo)
nvolt join org/secrets-repo
# or
nvolt join --repo org/secrets-repoFlags:
--repo- GitHub repository URL for global vault
Note: After joining, you'll need someone with push access to grant your machine access to specific environments using nvolt machine grant <your-machine-id>.
Encrypt and push secrets to the vault.
# From .env file
nvolt push -f .env.production -e production
# Set individual secrets with -k flag
nvolt push -k API_KEY=abc123 -k DB_PASSWORD=secret
# Multiple secrets with custom project name
nvolt push -k API_KEY=abc123 -k DB_SECRET=xyz789 -p my-backend -e stagingFlags:
-f, --file- Path to .env file-k, --key- Key=value pairs (can be specified multiple times)-e, --env- Environment name (default: "default")-p, --project- Project name (auto-detected if not specified)
Decrypt and retrieve secrets from the vault.
# View secrets for default environment
nvolt pull
# View secrets for specific environment
nvolt pull -e production
# Write to .env file
nvolt pull -e production > .env.localFlags:
-e, --env- Environment name (default: "default")-p, --project- Project name (auto-detected if not specified)
Run a command with decrypted secrets loaded as environment variables.
# Run development server
nvolt run npm start
# Run with specific environment
nvolt run -e production npm start
# Run arbitrary commands
nvolt run python app.pyFlags:
-e, --env- Environment name (default: "default")-c, --command- Command to run
Generate a new keypair for CI or another device.
nvolt machine add ci-server
nvolt machine add alice-laptopGrant a machine access to decrypt secrets in an environment.
# Grant access to default environment
nvolt machine grant ci-server
# Grant access to specific environment
nvolt machine grant ci-server -e production
# Grant access with project and environment
nvolt machine grant alice-laptop -p myproject -e stagingFlags:
-e, --env- Environment name (default: "default")-p, --project- Project name (auto-detected if not specified)
Revoke machine access and re-wrap master keys.
nvolt machine rm old-laptopDisplay vault information and machine access.
nvolt vault showVerify integrity of encrypted files and keys.
nvolt vault verifyRe-wrap or rotate master keys.
# Re-wrap keys for all machines
nvolt sync
# Rotate master key
nvolt sync --rotateFlags:
--rotate- Rotate the master encryption key
nvolt uses industry-standard cryptography to protect your secrets:
- Encryption: AES-256-GCM for secret encryption
- Key Wrapping: RSA-4096 for wrapping master keys
- Local-Only: All cryptographic operations happen on your machine
- Audit Trail: Every change is tracked in Git history
- Zero-Knowledge: nvolt never sees your plaintext secrets
If you discover a security vulnerability, please email security@nvolt.io. We take security seriously and will respond promptly.
# Install dependencies
make deps
# Format code
make fmt
# Run linter
make lint
# Run tests
make test
# Build binary
make build
# Run all checks
make checknvolt/
├── cmd/nvolt/ # Main entry point
├── internal/
│ ├── cli/ # CLI commands
│ ├── crypto/ # Cryptographic operations
│ ├── vault/ # Vault management
│ ├── git/ # Git operations
│ └── config/ # Configuration management
└── pkg/
└── types/ # Shared types
- 📖 Full Documentation - Complete guide with examples
- 📋 TASKS.md - Development progress tracking
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run
make checkto ensure tests pass - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please ensure your code follows the existing style and includes tests for new functionality.
- 🌐 Website
- 📖 Documentation
- 💬 Discussions
- 🐛 Issue Tracker
- 📦 Releases
nvolt is in active development. Current stable version: v1.0.21
MIT - see LICENSE file for details.
Built with ❤️ for developers who value security and simplicity
Star ⭐ this repo if you find nvolt useful!