Offline-first password manager with an explorer-style interface, browser-side encryption, and installable PWA behavior.
Noir Guard is designed to feel closer to a polished desktop file explorer than a traditional web form. It runs entirely in the browser, keeps vault data local, supports encrypted backup and restore flows, and aims to stay transparent about how data is protected.
The project is also now scaffolded for native-style packaging:
- Desktop shell via Tauri
- Android shell via Capacitor
- PWA install flow for browser-native standalone usage
| Main explorer | Password generator |
|---|---|
![]() |
![]() |
| Credential kinds | SSH-focused workflow |
|---|---|
![]() |
![]() |
| Additional platform view |
|---|
![]() |
- Runs as an installable PWA with offline-first local storage
- Uses browser-side cryptography for encrypted vault storage
- Supports asymmetric vault payloads with restore and migration paths
- Organizes credentials in nested folders with explorer-style navigation
- Provides grid-based credential browsing, favorites, quick access, and multi-select actions
- Generates strong passwords locally and evaluates password strength
- Tracks history, stale passwords, and rotation planning
- Exports and restores encrypted vault backups
- Supports encrypted credential sharing payloads
- Includes an extension install surface for autofill-related workflows
- Supports theme switching, English/Spanish localization, and responsive layouts for desktop, tablets, and phones
Noir Guard is being built toward a single browser-based product that works well across:
- Desktop browsers as a full explorer-like vault
- Android phones and tablets as a responsive installed PWA
- Offline usage where the vault remains available without a network connection
- Browser extension assisted flows for autofill and credential handoff
Noir Guard aims to keep security understandable, not hidden.
- Vault data is encrypted locally in the browser
- The app does not require a backend service to function
- The UI includes manual lock and blur-triggered auto-lock behavior
- Failed unlock attempts use persisted exponential backoff protection
- The app ships with strict CSP guidance and an aggressive developer-console phishing warning
- Clipboard flows are explicit and time-limited where possible
Important note: This project is transparent and security-focused, but that is not the same as a formal third-party security audit. Treat it accordingly until it has undergone independent review.
Noir Guard supports encrypted vault backup files and login-time restore flows.
- Single or multiple backup files can be uploaded during restore
- Each backup can be unlocked with its own passphrase
- Restores can merge into the current vault or replace it
- Collision handling can be manual or bulk-driven
- Restores can preserve the restored vault protection, or rebuild the vault with a new algorithm, key size, and passphrase
- Backup exports can optionally omit key parameters, in which case the app tells the user exactly which parameters must be saved separately
- Node.js 18+
- A modern browser with Web Crypto support
Preferred commands:
pnpm install
pnpm devBuild:
pnpm buildRun tests:
pnpm test:runCoverage:
pnpm test:coverageSecurity script:
pnpm security-testIf you prefer npm, the package scripts are standard Vite scripts and will also work with npm run ....
For the closest native-feeling wrappers without rebuilding the app from scratch:
- Desktop uses Tauri instead of Electron
- Android uses Capacitor
Why:
- Tauri is generally lighter and closer to the host platform than Electron for desktop
- Capacitor gives the project a practical Android application wrapper while preserving the existing React app
Native build notes and commands are documented in NATIVE.md.
The app is also runtime-aware now:
- Browser install prompts are only shown in real browser/PWA contexts
- Tauri and Capacitor builds are treated as already-installed shells
- Native-capable environments can use system file pickers and save dialogs for vault snapshots and encrypted payload exchange
When the browser supports installation, Noir Guard can be installed as a standalone app. Once installed, it behaves more like a local application shell than a normal website.
- The install button only appears when installation is actually available
- The app registers a service worker for offline-capable usage
- Manifest and icon metadata are included for installed usage
src/
App.tsx Main application flow and explorer logic
components/ UI surfaces, dialogs, explorer panels
crypto/ Split crypto helpers and vault lifecycle code
lib/ Shared utilities
models.ts Core vault and credential types
password.ts Password generation and evaluation
public/
manifest.webmanifest PWA manifest
icons/ PWA icons
extra/
screenshot-*.png README preview images
TODO.md Forward roadmap
src/crypto/now contains the vault lifecycle, asymmetric helpers, symmetric helpers, and payload types in smaller filessrc/App.tsxorchestrates login, restore, explorer state, backup flows, and sync/conflict handlingsrc/components/holds the install, restore, snapshot, history, and explorer dialogssrc/password.tscontains local password generation and strength logic
The remaining roadmap is tracked in TODO.md. It now focuses on the next PWA and offline multi-platform milestones instead of completed historical work.
MIT
Created by Esteban Chacon Martin (etherbeing)




