Jure a8627b7305 Add multi-account / profile switcher (roadmap #2)
- SavedAccount list persisted in localStorage (wrystr_accounts)
- loginWithNsec / loginWithPubkey now upsert into the accounts list
- fetchOwnProfile caches name + picture into the account entry
- switchAccount: loads nsec from OS keychain, falls back to read-only
- removeAccount: deletes keychain entry + removes from list; logs out
  if it was the active account
- logout: clears active session only — keychain entries kept for instant
  switch-back
- AccountSwitcher component in sidebar footer: shows current account,
  expand (▼/▲) to list all saved accounts, click to switch instantly,
  × to remove, "+ add account" opens LoginModal, sign-out / remove
  account actions inline

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 17:28:39 +01:00
2026-03-08 14:05:56 +01:00
2026-03-10 08:14:15 +01:00

Wrystr

A cross-platform desktop Nostr client built with Tauri 2.0 + React + TypeScript. Aimed at being the best Nostr desktop experience — polished UI, deep Lightning integration, and first-class support for long-form writing.

Named as a nod to Nostr with a wry twist.

Status

Early development. Core features working. Not yet ready for general release.

Features

  • Onboarding — key generation built-in, plain-language explanation, nsec backup flow; no browser extension required
  • Global & following feed — live notes from relays, tab-switched to your network
  • Compose & post — write and publish notes (kind 1), Ctrl+Enter to send
  • Replies — inline reply composer on every note, full thread view
  • Reactions — like notes (NIP-25) with live network counts
  • Follow / Unfollow — follow and unfollow from any profile (NIP-02), updates contact list on-chain
  • Thread view — click any note to see it with all its replies
  • Profile view — click any name or avatar; edit your own profile (kind 0)
  • Long-form article editor — write and publish markdown articles (NIP-23) with title, summary, tags, cover image, live preview, and auto-save drafts
  • Zaps — send Lightning payments via NWC (NIP-47 + NIP-57); amount presets, custom amounts, optional comment
  • Search — NIP-50 full-text search, #hashtag topic search, people search with inline follow
  • Settings — relay add/remove (live, persisted), NWC wallet connection, npub copy
  • Login — nsec (full access) or npub (read-only)

Stack

Layer Technology
Desktop shell Tauri 2.0 (Rust)
Frontend React 19 + TypeScript + Vite
Nostr protocol NDK 3.x (Nostr Dev Kit)
Styling Tailwind CSS 4
State Zustand

Development

# Prerequisites: Node.js 20+, Rust stable, @tauri-apps/cli
npm install
npm run tauri dev       # full app with hot reload
npm run dev             # browser only (no Tauri window)
npm run tauri build     # production binary

Roadmap

See ROADMAP.md for the full prioritised next steps.

Near-term:

  • OS keychain for secure key storage (Rust backend)
  • SQLite local note cache
  • Direct messages (NIP-17/44)
  • Read long-form articles in-app
  • GitHub Releases + Tauri auto-updater

License

MIT

Languages
TypeScript 91%
Rust 6.5%
Shell 1.4%
CSS 0.7%
JavaScript 0.3%