Architecture
Security Model
Local-first storage, Keychain usage, audit boundaries, clipboard safety, and Content Security Policy.
Local-first boundary
- Raw secret values should live in macOS Keychain, not SQLite.
- SQLite stores project paths, env file records, key names, status, warnings, value previews, value hashes, notes, and Keychain references.
- Ignored security warnings are stored as local project metadata and do not contain raw secret values.
- Audit logs store action names, timestamps, project IDs, and file/key targets, but not raw secret values.
- External provider metadata stores provider names and references only. EnvVault does not store third-party provider credentials or sync with provider APIs.
App Lock boundary
- Optional App Lock hides the EnvVault UI and project metadata until the local unlock succeeds.
- App Lock uses an Argon2id passphrase verifier stored through named Keychain storage.
- macOS unlock uses Apple's LocalAuthentication prompt when enabled.
- App Lock is not a replacement for FileVault or a fully encrypted SQLite metadata database.
Secret detection
- Key-based detection includes names such as SECRET, TOKEN, PASSWORD, PRIVATE, KEY, API_KEY, DATABASE_URL, JWT, AUTH, CREDENTIAL, ACCESS, REFRESH, CLIENT_SECRET, STRIPE_SECRET, WEBHOOK_SECRET, SESSION_SECRET, and ENCRYPTION_KEY.
- Public prefixes are treated specially: NEXT_PUBLIC_, VITE_, PUBLIC_, NUXT_PUBLIC_, and REACT_APP_.
- Value-based detection catches credential-bearing URLs, Stripe keys, Slack tokens, private key blocks, and long token-like values.
Clipboard safety
Secret copy actions use the Tauri clipboard manager and schedule clipboard clearing after 60 seconds.
Content Security Policy
The Tauri app uses a restrictive CSP that limits sources for default content, scripts, styles, images, fonts, objects, base URI, and frame ancestors.