A local-only, themeable desktop notepad for Windows that does what Notepad can't: take a screenshot and it loads instantly as a tab, on-device OCR reads the text, and you click any value — an API key, URL, token — to copy it in one click. Everything stays on your machine.
- 🔒 Local-only / offline — zero network egress (the only exception is an opt-in update check). On-device OCR; your notes and credentials never leave the device.
- 🆓 Free & open-source — MIT licensed.
- 🎨 Themeable — black by default, fully customizable.
Status: early development. Story 1.1 (application shell) is the current foundation; see
_bmad-output/planning-artifacts/epics.mdfor the roadmap.
Tauri 2 (Rust core + WebView2) · React 19 + TypeScript + Vite · SQLite (SQLCipher + FTS5) · on-device OCR via the Windows OCR API. See _bmad-output/planning-artifacts/architecture.md.
Prerequisites: Node 22.12+ (or 24) and the Rust toolchain (rustup; the repo pins 1.95.0 via rust-toolchain.toml), plus the Tauri prerequisites (WebView2 ships with Windows 11; MSVC build tools).
npm install
npm run tauri dev # or: double-click play.cmd (locked dev port 1420, hot reload)Other scripts: npm run build (type-check + Vite build) · npm test (Vitest) · npm run tauri build (installer).
src/— React frontend (features, stores,api/IPC layer, styles).src-tauri/— Rust core (commands/thin handlers,storage/,ocr/,capture/,crypto/services).site/— static Project Site (added in Epic 5)._bmad-output/planning-artifacts/— PRD, architecture, epics, readiness.
- All TS↔Rust IPC goes through
src/api/— components never callinvoke/listendirectly. - Business logic lives in Rust services;
commands/*handlers stay thin. - IDs are UUID v7; timestamps are RFC 3339 UTC. camelCase across the IPC boundary; snake_case in Rust/SQL.
- Never log or persist secret plaintext. Forward-only DB migrations.
- IPC DTO sync: the Rust DTOs and
src/api/types.tsmust not drift. When the first IPC DTO is introduced (Story 1.2/1.3), adoptts-rsto generatetypes.tsfrom the Rust structs or add a CI check that fails on drift. Decide and wire it then.
MIT © 2026 Brady J Bania