evault-cli
Cross-platform CLI binary for evault — secure management of environment variables with secrets in the OS keyring and metadata in a local (optionally encrypted) SQLite database.
The binary is evault. Run it without arguments to launch the interactive TUI; pass a subcommand to operate non-interactively for scripts and CI.
Install
Or grab a pre-built binary from the GitHub Releases page.
On first run, evault generates a fresh 256-bit master key, stores it in your OS keyring under the service evault, and creates a metadata database at:
- Linux:
~/.local/share/evault/db.sqlite - macOS:
~/Library/Application Support/evault/db.sqlite - Windows:
%APPDATA%\evault\db.sqlite
Nothing is sent over the network. The master key never leaves your keyring.
Subcommands
Every subcommand except reset also accepts --demo (10 seeded vars, ephemeral) or --ephemeral (empty, no persistence) for testing without touching your real keyring.
Profiles
Manifests support named profiles for dev / staging / prod separation:
Security highlights
- Master key: 256-bit, generated with
OsRng, stored hex-encoded in the OS keyring — never on disk in plaintext. - Secret values: stored in the OS keyring under service
evault, keyed by the variable's UUID. Wrapped insecrecy::SecretStringso buffers are zeroized on drop. .envmaterialisation: atomic write-then-rename; sibling.gitignoreupdated automatically. CRLF and NUL byte injection in values is rejected.- Child process injection: every key is name-validated, NUL bytes in values are rejected, and the
EVAULT_*prefix is stripped from the parent environment so internal config never leaks into untrusted children.
Recovery
If you upgrade evault and the new binary cannot decrypt or migrate your existing DB:
Documentation
Full documentation, TUI keymap, and architecture overview are in the workspace README.