Files
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 7bfdf3e19d fix(desktop): switch macOS keychain to Data Protection Keychain
The keyring crate uses SecKeychainAddGenericPassword with a null ACL,
which creates items requiring user confirmation on every access — even
by the same app. This causes ~20 prompts on migration launch and 7 on
every subsequent launch.

Switch the macOS backend to the modern SecItem API with
kSecUseDataProtectionKeychain=true via security-framework's
PasswordOptions::use_protected_keychain(). Items stored this way use
kSecAttrAccessible instead of ACLs and never prompt after the first
device unlock.

Migration path: load() tries DPK first; on a miss it falls back to the
old keychain, writes the value to DPK, and deletes the old entry. First
launch after this fix prompts once per key (7 total), then zero forever.
Unsigned dev builds (tauri dev / cargo run) lack the hardened-runtime
entitlement required by DPK and fall back to the legacy keyring path
automatically (errSecMissingEntitlement, -34018). Windows and Linux
paths are unchanged.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-24 22:37:56 -04:00
..
2026-06-11 15:06:24 +00:00
2026-06-11 15:06:24 +00:00

Buzz

Desktop chat shell with:

  • Tauri + React + TypeScript + Vite
  • Tailwind CSS
  • shadcn/ui-ready shared components
  • Biome (lint/format/check)
  • Feature-driven frontend structure

Scripts

  • pnpm dev - run the web frontend
  • pnpm tauri dev - run the desktop app
  • pnpm build - typecheck and build frontend
  • pnpm typecheck - TypeScript checks
  • pnpm lint - Biome lint
  • pnpm format - Biome format (write)
  • pnpm check - Biome check

Structure

  • src/shared - reusable app-wide code (ui, lib, styles)
  • src/features - feature modules (vertical slices)
  • src/app - top-level app composition