rpass is a cross-platform pass-compatible CLI for managing GPG-encrypted secrets. It reads and writes password-store repositories on Linux, macOS, and Windows, and provides stable JSON output for launchers, plugins, and scripts.
rpass show example/login
rpass list --json
rpass otp example/login --json
rpass generate example/login
rpass git status
- Works everywhere — Linux, macOS, Windows (no Bash dependency)
- password-store compatible — reads and writes existing
.gpgentries and.gpg-idfiles - JSON output — structured responses for Raycast, Vicinae, and custom integrations
- Import — migrate from other password managers (docs)
- TOTP support — generate one-time codes from
otpauth://lines - Git integration — explicit
rpass git <args>commands; write commands auto-commit - Shell completions — Bash, Zsh, Fish, PowerShell
- Non-interactive —
--passphrase-stdinfor headless environments - External GPG — no embedded crypto; uses your existing GnuPG installation
Download from the GitHub Releases page. Archives, MSI (Windows), shell installers, and checksums are available for all platforms.
cargo install rpass-cliThe crates.io package is rpass-cli; the installed binary is rpass.
- GnuPG 2.x (
gpg) — install via Gpg4win (Windows), Homebrew (macOS), or your system package manager (Linux) - Git — optional, only needed for
rpass git ...
rpass init alice@example.com # initialize a store
rpass list # list entries
rpass show example/login # show an entry
rpass generate example/login # generate a 14-character password
rpass insert example/login # insert a password
rpass edit example/login # edit an entry
rpass rm example/login # remove an entry
rpass mv example/login archive/login # move/rename an entry
rpass import --bitwarden ~/export.json # import from Bitwarden
rpass otp example/login # generate a TOTP code
rpass git status # run git inside the store
rpass doctor # check your local setuprpass resolves the store in this order:
--store-dir <PATH>PASSWORD_STORE_DIR~/.password-store
Most read commands accept --json. On success, stdout contains the JSON value and stderr is empty. On error, the exit code is non-zero and stderr contains:
{
"error": {
"code": "gpg_decrypt_failed",
"message": "gpg failed to decrypt entry: ..."
}
}Non-interactive workflows:
printf 'gpg-passphrase\n' | rpass show example/login --json --passphrase-stdin
printf 'gpg-passphrase\n' | rpass otp example/login --json --passphrase-stdinrpass completions bash >> ~/.bashrc
rpass completions zsh > "${fpath[1]}/_rpass"
rpass completions fish > ~/.config/fish/completions/rpass.fish
rpass completions powershell >> $PROFILESupported:
- Entries addressed without the
.gpgsuffix - First decrypted line is the password
name: valuemetadata lines preserved in JSONotpauth://lines for TOTP- Unknown lines preserved as
extra_lines - Directory-level recipients with
.gpg-id
Known differences from pass:
generate,insert,edit,rm, andmvfor writes- Git is explicit (
rpass git <args>) rather than automatic - Changing recipients with
initdoes not re-encrypt existing entries - Clipboard and QR codes are not implemented
- Unsupported
passflags are rejected instead of ignored