PassOwl is a secure and user-friendly password and note manager with end-to-end encryption. It allows you to safely store, organize, and share sensitive information.
- Secure Storage: Encrypted passwords and notes that never leave your client unencrypted.
- Client-Side Encryption: Your master password never leaves your device. All encryption happens in your browser.
- Category Management: Organize your credentials with custom categories.
- Secure Sharing: Share passwords with other PassOwl users using asymmetric encryption.
- Identity Verification: Secure login and registration with password hashing and salts.
- Personalization: Upload your own profile picture.
- Backend: FastAPI (Python), SQLAlchemy, PostgreSQL.
- Frontend: SvelteKit, Svelte, Tailwind CSS, Web Crypto API for client-side encryption, TypeScript.
Make sure you have: Python 3.9+, Node.js 18+, npm (or alternative), PostgreSQL.
-
Clone the repository:
git clone [https://github.com/fadrny/PassOwl.git](https://github.com/fadrny/PassOwl.git) cd PassOwl -
Set up environment variables:
backend/.env: Copy.env.exampleand fill inDATABASE_URL,SECRET_KEY,ALLOWED_ORIGINS.frontend/.env: Copy.env.exampleand fill inPUBLIC_API_URL,SECRET_CLOUDINARY_*(for avatar uploads).
-
Database Setup: Create a PostgreSQL database and execute the setup script
db/db.sql. -
Start the Backend:
cd backend python3 -m venv venv venv\Scripts\activate pip install -r requirements.txt python run.py
-
Start the Frontend:
cd frontend npm install npm run dev
Navigate to the frontend application (something like http://localhost:5173). Register and log in using your master password. This password is crucial for decrypting your data and private keys. All sensitive data is encrypted client-side.
You can find the API documentation at http://localhost:8000/docs.
- Master Password: Never sent to the server. It's used to derive your encryption key and decrypt your private key.
- In-Memory Keys: Encryption keys are stored in memory for a limited time only, requiring re-authentication afterward.
- Client-Side Encryption: Your data is encrypted in your browser before being sent to the server.