SV
← Back to code
— Software Development

Keystone

A local-first, fully offline desktop vault for the small secrets developers scatter across text files - API keys, snippets, commands, notes. Per-record ChaCha20-Poly1305 encryption with Argon2id key derivation; the master password never leaves the machine, and on Windows, Win+V clipboard-history exclusion keeps copied secrets contained.

Rust Tauri ChaCha20-Poly1305 Argon2id SQLite React TypeScript Tailwind CSS
~ logo
~ when Apr 2026 → Ongoing
~ status Active
~ kind Personal Project

Keystone is a local-first desktop vault for the small secrets developers scatter across loose text files - API keys, snippets, commands, and reference notes. Built for people who outgrew scattered files but don't want a shared cloud vault for personal stuff.

Security

  • Per-record encryption - every item's title, value, notes, and tags are sealed together as one encrypted record with ChaCha20-Poly1305; only metadata stays plaintext - timestamps, favorite/sensitive flags, item kind, collection assignment, and usage counts
  • Argon2id key derivation - the master password is never stored and never leaves the machine; keys are zeroized from memory on lock
  • Sleep-aware auto-lock - configurable inactivity timeout that also locks if the timeout elapsed while the machine slept

Privacy

  • Fully offline - no telemetry, no auto-update server, zero network dependencies in the Rust crate; the Tauri capability file enumerates every native API the app may touch
  • Win+V exclusion (Windows) - on Windows, copied secrets are tagged so they never enter Win+V clipboard history (macOS/Linux use the standard clipboard); auto-clear wipes anything marked sensitive after a configurable delay, while leaving non-sensitive items (snippets, commands) available to paste

Built with

  • Frontend: React 19 + TypeScript, Tailwind CSS v4, Radix UI primitives
  • Desktop: Tauri v2 (Rust)
  • Storage: SQLite via rusqlite (bundled)
  • Crypto: Argon2id KDF + ChaCha20-Poly1305 AEAD, with zeroize for in-memory key wiping
CoreInfraDataMLAgentsFrontend
About this chart
Each axis is a functional pillar; the orange area shows where my effort went on this build - the further an axis reaches, the more of the work concentrated there.