A Haskell reimplementation of the Unix password manager
Implement the find command
Begin decrypting passwords via the show command
Add argument parsing and implement the ls command


browse log



You can also use your local clone with git send-email.


A Haskell reimplementation of pass.

Project Goals

Build the Unix password manager pass, but with type safety, unit tests, and other niceties.


This is mostly written as an excuse for learning Haskell, although hopefully it will end up being useful. Bash is a perfectly fine language, but with the complexity of pass (700 lines at the time of this writing), it's nice to have the safety offered by implementing it in a compiled language.

Much like hledger and ledger, the eventual goal is to have two compatible implementations while still allowing for differences in taste and non-core features.


Here's a list of all of the commands listed in pass help, along with the current status in hpass.

  • pass init: Not implemented.
  • pass ls
    • As in pass, this is the default behavior when no commands are passed.
    • Calling ls with a subfolder lists the files in that directory if it exists, or prints an error message if it does not.
    • Unlike pass, ls must (currently) be explicitly called if passing a subfolder. That is, pass Passwords will list the contents of the directory Passwords, while hpass Passwords will complain about an unrecognized command.
  • pass find: Implemented as in pass.
  • pass [show]
    • Explicitly calling pass show with a password name shows the decrypted password.
    • Calling pass [password-name] complains about an unrecognized argument instead of showing the decrypted password.
    • The -c/--clip argument is not yet implemented.
  • pass grep: Not implemented.
  • pass insert: Not implemented.
  • pass edit: Not implemented.
  • pass generate: Not implemented.
  • pass rm: Not implemented.
  • pass mv: Not implemented.
  • pass cp: Not implemented.
  • pass git: Not implemented.
  • pass help: Not implemented.
  • pass version: Not implemented.

Also, the --qrcode flag is not implemented yet.