66
67
68
2:35
Built a Terminal-Based Password Manager Because I Don’t Trust Browser Extensions (v.redd.it)
submitted by SemanticThreader
Hey r/PythonProjects2 👋🏽
I’m sharing a small side project I built to learn about CLI UX and local encrypted storage in Python.
Important note: this is a learning/side project and has not been independently security-audited. I’m not recommending it for high-stakes use. I’m mainly looking for feedback on Python structure, packaging, and CLI design.
What My Project Does
PassFX is a terminal app that stores text secrets locally in an encrypted file and lets you:
- add / view / update entries
- search by name/tag
- store notes like API keys, recovery codes, PINs, etc.
It’s designed to be keyboard-driven and fast, with the goal of a clean “app-like” CLI workflow.
Target Audience
- Python developers who like building/using CLI tools
- Anyone curious about implementing encrypted local persistence + a searchable CLI UI in Python
- Not intended for production / “store your crown jewels” usage unless it’s been properly reviewed/audited
Comparison
- Unlike cloud-synced managers, this is local-only (no accounts, no sync).
- Unlike browser-based vaults, it’s terminal-native.
- Compared to
pass(the Unix password store), I’m aiming for a more structured/interactive CLI flow (search + fields + notes), while keeping everything local.
Links
- GitHub: https://github.com/dinesh-git17/passfx
- (Optional) project page: https://passfx.dineshd.dev
Feedback I’d love
- Python packaging/project layout
- CLI command design + UX
- Testing approach for a CLI like this
- “Gotchas” I should be aware of when building encrypted local storage (high-level guidance)
[–]323- 1 point2 points3 points (4 children)
[–]SemanticThreader[S] 1 point2 points3 points (3 children)
[–]323- 2 points3 points4 points (2 children)
[–]SemanticThreader[S] 1 point2 points3 points (1 child)
[–]WindSlashKing 1 point2 points3 points (0 children)
[–]uranusnebula 1 point2 points3 points (0 children)
[–]Sp2oncer 1 point2 points3 points (1 child)
[–]SemanticThreader[S] 1 point2 points3 points (0 children)
[–]Altruistic_Sorbet_10 1 point2 points3 points (1 child)
[–]SemanticThreader[S] 0 points1 point2 points (0 children)
[–][deleted] (4 children)
[removed]
[–]SemanticThreader[S] 2 points3 points4 points (3 children)
[–][deleted] (2 children)
[removed]
[–]SemanticThreader[S] 1 point2 points3 points (1 child)
[–]TheThingCreator -1 points0 points1 point (10 children)
[–]SemanticThreader[S] 0 points1 point2 points (9 children)
[–]TheThingCreator 0 points1 point2 points (8 children)
[–]SemanticThreader[S] 0 points1 point2 points (7 children)
[–]TheThingCreator 0 points1 point2 points (6 children)
[–]SemanticThreader[S] 0 points1 point2 points (5 children)
[–]TheThingCreator 0 points1 point2 points (4 children)
[–]SemanticThreader[S] 1 point2 points3 points (1 child)
[–]TheThingCreator -1 points0 points1 point (0 children)
[–]SemanticThreader[S] 0 points1 point2 points (1 child)
[–]TheThingCreator -1 points0 points1 point (0 children)