A minimalist, self-hosted personal password manager with client-side encryption support. Replace your insecure tools like WhatsApp or Telegram saved messages. Open-source and contributions welcome!
- 🔐 End-to-End Encryption: Passwords and card data are encrypted on your device before being stored
- 💳 Card Management: Securely store credit/debit card details (number, CVV, PIN, expiry, cardholder, bank, notes)
- 🔑 Password Generator: Generate strong, unique passwords with customizable options
- 📱 Responsive Design: Works seamlessly on desktop and mobile devices
- 🌙 Dark/Light Theme: Toggle between themes with system preference support
- 🏷️ Categories: Organize passwords with custom categories
- 🔍 Search & Filter: Quickly find passwords and cards with advanced search
- 🗂️ Password & Card Organization: Edit, delete, and manage your vault items easily
- Client-side AES-256 encryption with PBKDF2 key derivation
- Master password never stored or sent to the server
- Rate limiting and brute-force protection
- Secure session management with JWT (NextAuth.js)
- CSRF protection and secure headers
- Input validation and sanitization
Note: Two-factor authentication (2FA/TOTP) is not yet implemented, but the codebase is structured to support it in the future.
- Framework: Next.js 14 (App Router)
- Database: MongoDB with Mongoose
- Authentication: NextAuth.js
- Encryption: CryptoJS (AES-256)
- UI: shadcn/ui + Tailwind CSS
- Node.js 20+
- MongoDB (local or cloud)
- pnpm
-
Clone the repository
git clone https://github.com/atulkadian/password-manager cd password-manager -
Install dependencies
pnpm install
-
Set up environment variables
cp .env.example .env
Then open
.envand update the following:MONGODB_URI=mongodb://localhost:27017/password-manager NEXTAUTH_URL=http://localhost:3000 NEXTAUTH_SECRET=your-super-secret-key-here
-
Start MongoDB
If you're using local MongoDB, make sure it's running:
mongod
Or, if you're using MongoDB Atlas, update
MONGODB_URIin.envwith your connection string. -
Run the development server
pnpm run dev
-
Open your browser
Visit: http://localhost:3000
- Click "Get Started" on the homepage
- Fill in your details including:
- Account Password: For logging into the app
- Master Password: For encrypting your passwords and cards (12+ characters)
- Important: Keep your master password safe - it cannot be recovered!
TODO
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License