A lightweight, locally hosted password manager built with Go (backend), PostgreSQL (database), and React (frontend).
The goal is to create a secure, simple, and private vault for managing passwords — entirely under your control.
- Secure account creation with master password
- Store, retrieve, update, and delete encrypted passwords
- Clean React + Tailwind frontend
- Simple Go REST API backend
- All password data encrypted using AES-256
- Master password never stored or transmitted in plaintext
- Optional local LLM assistant with RAG for quick password lookups
- Easy to deploy via Docker
Build a REST API with the following endpoints:
Auth Endpoints:
POST /register: Create an account with master passwordPOST /login: Verify master password using HMAC (zero-knowledge)PUT /account/password: Change master password (re-encrypt vault)DELETE /account: Delete account and vault
Vault Endpoints:
GET /vault: Retrieve all saved credentialsPOST /vault: Add a new encrypted passwordPUT /vault/:id: Update a stored passwordDELETE /vault/:id: Delete a stored password
Security:
- Use Argon2id to derive encryption keys from the master password
- Store only encrypted passwords (AES-256-GCM)
- Use an HMAC-based verifier to authenticate the master password (no plaintext password storage)
| Field | Type | Description |
|---|---|---|
| id | SERIAL | Primary key |
| TEXT | Unique user email | |
| salt | TEXT | Salt used for key derivation |
| verifier | TEXT | HMAC of derived key for login check |
| Field | Type | Description |
|---|---|---|
| id | SERIAL | Primary key |
| user_id | INTEGER | Foreign key to users |
| name | TEXT | Name of the account (e.g. GitHub) |
| username | TEXT | Optional username |
| encrypted_password | TEXT | AES-256 encrypted base64 string |
| created_at | TIMESTAMP | Auto timestamp |
| updated_at | TIMESTAMP | Auto timestamp |
- Clean and responsive UI for managing vault entries
- Secure forms for login, registration, and vault actions
- Use browser APIs (e.g.
crypto.subtle) to support client-side encryption (optional zero-knowledge mode)
- Integrate with a local LLM (e.g.
Ollama) - Use RAG to search vault entries using natural language
- Only enable this after vault is unlocked in memory
- Create Dockerfiles for backend and frontend
- Add
docker-compose.ymlto run the full stack locally - Include self-signed TLS certs for HTTPS in development
- Never store or transmit master passwords
- All passwords are encrypted using AES-256-GCM
- Key derivation with Argon2id + salt
- Optional client-side zero-knowledge vault access