A secure, end-to-end encrypted password manager built on the Nostr protocol. Your secrets are encrypted locally and synced across devices using Nostr relays as encrypted self-addressed DMs.
Nostr Secrets Vault is a zero-knowledge password manager that leverages the Nostr protocol for secure, decentralized secret synchronization. Unlike traditional password managers, there's no central server - your encrypted secrets are stored as messages to yourself on Nostr relays.
- Generate new Nostr key pairs (nsec/npub)
- Import existing keys via nsec, hex, or NIP-19 format
- Multiple key support with easy switching
- Secure key storage with optional PIN encryption
- AES-256-GCM vault encryption with PBKDF2 key derivation (100k iterations)
- NIP-44 encryption for secrets (ChaCha20 + HMAC-SHA256)
- Salt embedded in payload - no exposed cryptographic material
- SHA-256 integrity verification with automatic self-healing
- Optional PIN protection with biometric unlock (Android)
- Sync secrets across devices via Nostr relays
- Self-addressed encrypted DMs (only you can decrypt)
- Configurable relay list with connection status
- Offline-first architecture with automatic sync
- Cyberpunk/neon dark theme
- Mobile-first responsive design
- Tag-based organization with color coding
- Real-time search and filtering
- Swipe navigation between screens
- PWA support for app-like experience
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User Device β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ ββββββββββββββββββββββββββββββββ β
β β PIN/Bio βββββΆβ PBKDF2 Key Derivation β β
β βββββββββββββββ β (100k iterations + salt) β β
β ββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β AES-256-GCM Encrypted Vault β β
β β ββββββββββββββ ββββββββββββββ βββββββββββββ β β
β β β Nostr Keys β β Sign Logs β β Settings β β β
β β ββββββββββββββ ββββββββββββββ βββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β NIP-44 Encrypted Secrets β β
β β (ChaCha20 + HMAC-SHA256 per secret) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Nostr Relays β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β relay.damus β β nos.lol β β nostr.band β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β Encrypted DMs (Kind 4) - Self-Addressed β
β Only the owner can decrypt the content β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Protection | Details |
|---|---|---|
| Vault | AES-256-GCM | Keys & settings encrypted at rest |
| Salt | Embedded | PBKDF2 salt hidden in encrypted payload |
| Secrets | NIP-44 | Each secret individually encrypted |
| Transport | TLS + NIP-44 | End-to-end encrypted relay communication |
| Integrity | SHA-256 | Checksum verification with self-healing |
- Node.js 18+ or Bun
- Git
# Clone the repository
git clone https://github.com/AcierP/nostr-secrets.git
cd nostr-secrets
# Install dependencies
npm install
# or
bun install
# Start development server
npm run dev
# or
bun devnpm run build
npm run preview# Build web assets
npm run build
# Sync with Android
npx cap sync android
# Open in Android Studio
npx cap open android- Create or Import Key - Generate a new Nostr identity or import your existing nsec
- Optional PIN Setup - Enable PIN protection for vault encryption
- Add Your First Secret - Tap the + button to create a secret
- Add: Tap + button, enter title and content, select tags
- View: Tap the eye icon to decrypt and reveal content
- Edit: Tap the pencil icon on any secret
- Delete: Swipe left or use the delete button
- Search: Use the search bar to filter by title
- Filter: Tap tags to filter secrets by category
- Go to Settings β Manage Relays
- Add or remove relays as needed
- Secrets automatically sync when connected
- Green indicator = synced to all relays
wss://relay.damus.io
wss://relay.nostr.band
wss://nos.lol
wss://relay.primal.net
| Tag | Color | Use Case |
|---|---|---|
| Login | Blue | Website credentials |
| Crypto | Orange | Wallet seeds, keys |
| Finance | Green | Banking, cards |
| Personal | Pink | Personal info |
| Work | Purple | Work-related |
| API | Cyan | API keys, tokens |
| Category | Technology |
|---|---|
| Framework | React 18 + TypeScript |
| Styling | Tailwind CSS + shadcn/ui |
| Build Tool | Vite |
| Mobile | Capacitor |
| Crypto | @noble/secp256k1, nostr-tools |
| State | React Context + Custom Hooks |
src/
βββ components/
β βββ SecretsScreen.tsx # Main secrets list & management
β βββ AddSecretSheet.tsx # Create/edit secret form
β βββ KeysScreen.tsx # Nostr key management
β βββ SettingsScreen.tsx # App settings
β βββ SecuritySheet.tsx # PIN & biometrics settings
β βββ RelayManager.tsx # Relay configuration
β βββ ui/ # shadcn/ui components
βββ context/
β βββ VaultContext.tsx # Global encrypted state
βββ hooks/
β βββ useRelaySync.ts # Relay synchronization
β βββ useNostrDMs.ts # DM fetching
β βββ useBiometrics.ts # Native biometric auth
βββ lib/
β βββ vault.ts # AES-256-GCM encryption
β βββ nip44.ts # NIP-44 implementation
β βββ keyStore.ts # Key generation & storage
β βββ nostrRelay.ts # Relay connections
β βββ vaultIntegrity.ts # SHA-256 checksums
βββ pages/
βββ Index.tsx # Main app layout
Contributions are welcome! Please follow these steps:
- 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
- TypeScript strict mode
- Functional components with hooks
- Tailwind CSS for styling
- No inline styles
You can download the latest version of the application ready to install:
Note: After downloading, you will need to allow installation from "Unknown Sources" in your Android phone's settings to be able to install the APK file.
This project is licensed under the MIT License - see the LICENSE file for details.
- Backup your nsec - Lost keys cannot be recovered
- Use strong PINs - Short PINs are vulnerable to brute force
- Verify relays - Only use trusted relay servers
- Regular updates - Keep the app updated for security patches
- Nostr Protocol - Decentralized social protocol
- NIP-44 - Versioned encryption
- noble-secp256k1 - Audited crypto library
- shadcn/ui - Beautiful UI components
- Capacitor - Native mobile runtime
Built with π for the Nostr community
Your keys, your secrets, your privacy.