Your encrypted, local-first secrets vault. AES-256-GCM encrypted. Electron desktop app.
- Node.js v18 or higher (just download and install)
# 1. Unzip / navigate to this folder
cd vault-app
# 2. Install dependencies (one time)
npm install
# 3. Launch the desktop app
npm run devThat's it. A desktop window will open.
npm run buildThis outputs to the dist-electron/ folder:
- Windows:
Vault Setup 1.0.0.exe - macOS:
Vault-1.0.0.dmg - Linux:
Vault-1.0.0.AppImage
To use a custom icon, replace these files in src/assets/:
icon.png— 512×512 PNG (used for Linux + dev)icon.ico— Windows icon (you can convert from PNG at https://icoconvert.com)icon.icns— macOS icon (useiconutilon Mac or an online converter)
- Open the app and unlock your vault
- Click Settings in the sidebar
- Choose a folder — point it at your Dropbox, iCloud Drive, or Google Drive folder
- Every time you save an entry, a timestamped
.vaultbackup is written there automatically
The backup file is fully encrypted. Even if someone gets the file, they can't read it without your master password.
| Feature | Implementation |
|---|---|
| Encryption | AES-256-GCM |
| Key derivation | PBKDF2, SHA-256, 310,000 iterations |
| Master password | Never stored — only used in memory to derive key |
| Local storage | IndexedDB (encrypted blob) |
| Backup format | Base64-encoded encrypted binary |
| Node access | Sandboxed via contextBridge — renderer has no direct Node access |
vault-app/
├── main.js ← Electron main process (window, file I/O, dialogs, tray)
├── preload.js ← Secure bridge (exposes only safe APIs to React)
├── src/
│ ├── main.jsx ← React entry point
│ └── App.jsx ← Full vault UI + crypto logic
├── index.html ← HTML shell
├── vite.config.js ← Vite bundler config
└── package.json ← Dependencies + build config