A password manager built with PySide6, featuring strong encryption and a focus on security and usability.
- Supports multiple users
- Option for changing a user's master password
- Delete user accounts
- Automatic logout after a period of inactivity
- Fully local, great for offline use and backups
- Master password secured with Argon2
- Add, edit, and delete entries
- Search functionality
- All vault data is encrypted with Fernet before being stored in a SQLite database
- Built‑in password generator with customizable options
- Import and export vault data in CSV format
All sensitive data is stored in such a way to ensure that nothing can be compromised even if the database file is accessed directly.
- The master password is never stored in plain text.
- The master password is hashed using Argon2 (implemented via argon2-cffi).
- Only the resulting hash is stored in the database, and hash comparison is used during login.
- During program operation, the master password is used only long enough to verify the Argon2 hash and derive the encryption key. It is not retained in memory beyond the login process.
- A minimum length requirement is enforced for the master password, since it is the foundation of all vault security.
- All sensitive entry fields (usernames, passwords and optional notes) are encrypted using Fernet, part of the
cryptographylibrary. - A secure encryption key is derived from the master password and used to create a Fernet instance for all encryption and decryption tasks.
- Encryption and decryption occur only in memory; only encrypted ciphertext is ever written to the database.
- A hash of usernames is stored and used to detect existing website/username combinations.
- The application uses SQLite as a lightweight and reliable local database engine.
- Only encrypted ciphertext is stored in the database; no plaintext usernames, passwords, or notes are ever written to disk.
- All operations are performed locally on the user's device.
- The application automatically creates a
data/folder on first launch. - In development mode, this folder is created next to
main.py. - In packaged builds, the folder is created inside the application’s internal runtime directory (the
_internalfolder generated by PyInstaller). - All encrypted vault data is stored inside this folder.
The application supports importing and exporting vault data in CSV format.
- Users can export all vault entries to a CSV file.
- Exported data is written in unencrypted form, with a clear warning reminding the user to keep the file secure.
- Exporting requires the user to be logged in and includes an additional master password verification step.
- Vault data can be imported from a CSV file that follows the expected format.
- Imported entries are automatically encrypted before being stored in the database.
- Duplicate detection is performed using hashed usernames. When duplicates are found, the user chooses a single action (skip, update, or add anyway) that is applied to all detected duplicates.
- Entries missing required fields (website, username, or password) are skipped during import.
- The importer supports CSV files exported by this application as well as other password managers.
- Tested compatible formats include:
- Google Chrome
- Mozilla Firefox
- Bitwarden
- Other password managers may also work, provided their CSV includes standard fields such as website, username, and password. The importer checks for common variations of these fields, but because CSV formats differ, full compatibility cannot be guaranteed.
- Unsupported CSV formats may still work if column names are adjusted to match the expected fields (website, username, password, notes).
A simple login screen where users can create a new account or log in to an existing one.
The default mode, where entering a website and its details creates a new vault entry.
Enabling “Search Mode” switches the input bar into a search field for filtering existing entries.
Displays all saved entries with quick access to actions.
A focused popup for updating an existing entry.
- Requires Python 3.10 or later.
- Clone the repository.
- Navigate into the project folder.
- Install the required dependencies using
pip install -r requirements.txt. - Run the application using
python main.py.
The application can be packaged into an executable using PyInstaller. Run the following command from the project folder:
Windows(Tested):
pyinstaller --name=PasswordManager --noconsole --icon="resources/icons/safe-icon.ico" --add-data "resources/icons/*.ico;resources/icons" --add-data "resources/icons/*.png;resources/icons" --add-data "resources/images/*;resources/images" main.py
Linux(Tested)/Mac(Not tested)
pyinstaller --name=PasswordManager --noconsole --icon="resources/icons/safe-icon.png" --add-data "resources/icons/*.ico:resources/icons" --add-data "resources/icons/*.png:resources/icons" --add-data "resources/images/*:resources/images" main.py
- Icon sourced from UXWing.




