Each secret is its own file
Not hidden inside an app. Every secret is a real file on your disk — organize it in folders, back it up like any other file, move it to a new machine. The structure is transparent and yours.
Secret Manager · macOS · CLI · Open Source
key is a CLI secret manager — each secret stored as its own encrypted file on your disk, named, organized, and backed up however you want. The vault key lives in your Keychain, released through macOS user presence authentication — Apple Watch, Touch ID, or your system password.
Not hidden inside an app. Every secret is a real file on your disk — organize it in folders, back it up like any other file, move it to a new machine. The structure is transparent and yours.
The encrypted files are on your disk. The vault key is in your Keychain. Both are yours. key uses standard AES-256-GCM — meaning you can decrypt any secret yourself, without the app, using any standard crypto tool.
key has no built-in password generator — no default recipe for length, symbols, or entropy.
Adding and editing are stdin-first: pipe in openssl, pwgen,
diceware, or any tool you trust. You decide what strong looks like.
Pipe in, pipe out, compose with whatever you already use.
openssl rand -base64 32 | key add aws/prod/token
pwgen -sy 24 1 | key add github/personal
diceware -n 6 | key add backup/passphrase
uuidgen | key add app/deploy-token
key get "$(key list | fzf)"
key copy "$(key list | fzf)"
key edit "$(key list | fzf)"
key remove "$(key list | fzf)"
# .env.schema
DATABASE_URL=exec(`key get db/prod/url`)
API_TOKEN=exec(`key get services/stripe/key`)
varlock run -- npm start
Usage
key <command> [arguments]
Commands
get <name>copy <name>add <name>edit <name>duplicate <src> <dst> [--force]rename <src> <dst> [--force]remove <name> [--force]listunlocklockversion [--json]helpOptions
--force--jsonEarly development — follow the repo for releases.
brew tap tvanreenen/tap
brew install --cask key
Open Key.app once so the Key Agent can register with macOS.