A personal, self-built password manager for mobile — open source, built with Flutter.
This is not a published app you download from a store, and it is not a service you sign up for. It is a template you build for yourself: you point it at your own Firebase project, set your own encryption key, and compile your own private APK. Nobody else installs it, and nobody else's data ever touches it.
I wanted a password manager that I fully own — no vendor, no shared backend, no trust required. So this project is designed to be forked and personalized. All of your passwords are stored encrypted in your own Firebase Firestore database, under your own Google account.
Two steps to have your own build:
- Create a Firebase project and enable Cloud Firestore
- Build the app with Flutter
(Dark)
| MasterPass Verify UI | Home UI | Profile UI | Card UI | Password Gen UI |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
(Light)
| Login UI | Home Page UI | Profile UI | Credit Card UI | Password Gen UI |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
-
Install and configure Flutter on your computer
-
Create a Firebase account and a Firebase project
-
Enable Cloud Firestore for that project
-
Download
google-services.jsonfrom your Firebase project and put it in android/app/ -
Create your
.envfile at the project root by copying the template:cp .env.example .envThen set your own encryption key in it:
PASS=<your own 16-character secret>This value is your AES key. It is read at app startup and used to encrypt and decrypt every entry before it is written to Firestore, so your data is unreadable in the database itself. It must be exactly 16 characters — the
encryptpackage derives the AES key directly from these bytes.It is not a login password and not a hash of anything. You never type it into the app; it is compiled into your personal build. The master password you type on the verify screen is a separate thing, set up inside the app.
-
Build your Android APK:
flutter build apkInstall that APK on your own phone. That's your version of the app.
Only .env.example is tracked in this repository. Your real .env is git-ignored, so your key
stays on your machine and never reaches a fork. Treat the rest of your build as private too:
- Never commit your real
PASSvalue, and don't share it. - Don't distribute the APK you built — it carries your key inside it.
google-services.jsonis git-ignored as well; it belongs to your Firebase project only.- If you change
PASSafter you have saved entries, previously stored entries can no longer be decrypted. Pick it once, and keep a copy somewhere safe (offline).
Because each person builds their own copy with their own key and their own Firebase project, there is no shared build and no common key across users. That is the whole point of the design.
- AES (CTR / SIC mode) from the
encryptpackage, keyed by yourPASSvalue
| GetX | Font Awesome Flutter | Google fonts | Cloud Firestore |
|---|---|---|---|
| Injectable + GetX + GetIt | Flutter Svg | Get Storage | Firebase auth |
| Encrypt | Flutter Fimber | Flutter Slidable | Firebase auth |
| Flutter Dotenv | Flutter credit card | uuid | Google sign in |
Feel free to submit issues and enhancement requests.
Pull requests are welcome.
This project is licensed under the Apache 2.0 license









