name: Release on: push: tags: - 'v*' jobs: release: permissions: contents: write strategy: fail-fast: false matrix: include: - platform: ubuntu-22.04 args: '' - platform: windows-latest args: '' - platform: macos-latest args: '--target aarch64-apple-darwin' runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 'lts/*' - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin' || matrix.platform == 'macos-12' && 'x86_64-apple-darwin' || '' }} - name: Install Linux dependencies if: matrix.platform == 'ubuntu-22.04' run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev \ build-essential \ libssl-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ patchelf - name: Install frontend dependencies run: npm install - name: Build and release uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} with: tagName: ${{ github.ref_name }} releaseName: Wrystr ${{ github.ref_name }} releaseBody: | ## Wrystr ${{ github.ref_name }} Cross-platform Nostr desktop client — polished UI, deep Lightning integration, first-class long-form writing. > **Windows note:** The installer is not yet code-signed. Windows SmartScreen will show an "Unknown publisher" warning — click "More info → Run anyway" to install. ### New in v0.5.0 — Sharing & Thread Indicators - **Note sharing** — share button on every note copies a `nostr:nevent1…` URI to clipboard; works when logged out too - **Reply count** — notes now show reply count next to the reply button; updates optimistically when you reply ### Previous: v0.4.1 — Media & Feed Fixes - **Video player** — direct video URLs (.mp4, .webm, .mov, etc.) now render as inline players with native controls - **Audio player** — direct audio URLs (.mp3, .wav, .flac, etc.) render as inline audio players with filename display - **YouTube/Vimeo rich cards** — YouTube links show thumbnail previews, Vimeo/Spotify/Tidal show branded cards; all open in external browser - **Media detection** — parser now recognizes YouTube, Vimeo, Spotify, and Tidal URLs as distinct media types - **Fix: video clicks opening thread** — media elements rendered outside the clickable area so interactions don't navigate away - **Fix: post not visible on Following tab** — publishing a note while on Following now correctly shows it in the feed ### New in v0.4.0 — Phase 3: Discovery & Polish - **Image lightbox** — click any image to view full-screen; Escape to close, arrow keys to navigate multi-image posts - **Bookmarks (NIP-51)** — save/unsave notes with one click; dedicated Bookmarks view in sidebar; synced to relays (kind 10003) - **Discover people** — "follows of follows" suggestions on the Search page with mutual follow counts and one-click follow - **Language/script feed filter** — dropdown in feed header filters by writing system (Latin, CJK, Cyrillic, Arabic, Korean, etc.); uses Unicode detection + NIP-32 language tags - **UI polish** — skeleton loading placeholders, improved empty states with helpful prompts, subtle view fade transitions ### New in v0.3.1 - **Feed tab persists across navigation** — back button now returns to the correct tab (Global/Following) instead of always resetting to Global - **Available on AUR** — Arch/Manjaro users can install with `yay -S wrystr-git` ### New in v0.3.0 - **Instant feedback** — posted notes appear in feed immediately; thread replies show up without waiting for relay - **Image paste fix** — uploads now use Tauri HTTP plugin, fixing "Failed to fetch" on Windows - **Sent zaps visible** — zap history now correctly shows sent zaps (queries kind 9735 receipts instead of ephemeral kind 9734) - **Reply-to @name clickable** — clicking the @name in "↩ replying to @name" now opens that person's profile - **Feed refresh on login** — switching or adding an account immediately loads the new account's feed ### New in v0.2.8 - **Fix: OS keychain was a no-op** — `keyring` crate had no platform backends enabled; nsec keys now actually persist to Windows Credential Manager, macOS Keychain, and Linux keyutils - **Fix: multi-account persistence** — all nsec accounts restored from keychain on startup; account switching no longer gets stuck after restart - **Fix: account switcher** — shows re-login prompt when keychain entry is missing ### New in v0.2.6 - **Fix: auto-updater** — added `createUpdaterArtifacts: true` + regenerated signing key; `.sig` files and `latest.json` are now correctly produced by CI ### New in v0.2.3 - **Fix: auto-updater** — `latest.json` now correctly generated via `includeUpdaterJson: true`; users on older versions will receive the update banner ### New in v0.2.0 — Phase 2: Engagement & Reach - **Feed reply context** — replies show "↩ replying to @name" above the note; click to open the parent thread - **NIP-65 outbox model** — reads kind 10002 relay lists so you see notes from people who publish to their own relays; "Publish relay list to Nostr" button in Settings - **Notifications view** — 🔔 sidebar nav item; lists recent mentions with unread badge; badge clears on open - **DM unread badge** — messages nav item shows count of conversations with new messages; clears when conversation is opened - **Keyboard shortcuts** — `n` focus compose, `/` focus search, `j`/`k` navigate feed with highlight, `Esc` go back, `?` help overlay ### New in 0.1.7 - **Per-account Lightning wallet** — NWC connection is now stored per account; switching accounts loads the correct wallet automatically - **New account creation in-app** — "Add account" now has a "New account" tab that generates a fresh keypair (no need to go through onboarding again) - **Zap button on thread root note** — like and zap the main note in a thread view - **Conditional zap button** — zap only shown for profiles that have a Lightning address (lud16/lud06) - **Image paste in compose** — paste an image from clipboard → auto-uploads to nostr.build and inserts the URL - **Account switcher redesign** — cleaner dropdown, sign-out/remove moved into menu - **GitHub Sponsors link** in Support page - Fix: posts no longer sign under the wrong account during rapid account switches ### New in 0.1.6 - **Linux packaging** — ships `.deb` (Ubuntu/Debian/Mint) and `.rpm` (Fedora/openSUSE) instead of AppImage; Arch users see PKGBUILD in the repo ### New in 0.1.5 - **Article reader** — click any `nostr:naddr1…` link to open it in a clean reader with cover image, author, tags, and full markdown; zap the author inline - **Zap counts on notes** — ⚡ N sats shown on each note - **Quoted note preview** — `nostr:note1…` / `nostr:nevent1…` references render as inline bordered cards; click to open thread - **Auto-updater** — "Update & restart" banner appears when a new version is available ### New in 0.1.4 - **Sidebar** — explicit ‹/› collapse toggle, state persisted across restarts - **Profile image upload** — uploads to nostr.build, auto-fills URL field - **NIP-05 live verification** — real-time domain check with ✓/✗ status - **Search improvements** — NIP-50 relay detection, hashtag fallback suggestion ### New in 0.1.3 - **OS keychain** — sessions survive restarts (macOS Keychain, Windows Credential Manager, Linux Secret Service) - **Multi-account switcher** — instant switch from sidebar footer - **SQLite note + profile cache** — feed loads instantly on startup - **Quote & Repost** (NIP-18), **Mute users** (NIP-51), **NWC setup wizard** - **System tray**, **Zap history**, **About / Support page** ### Install **Linux (Ubuntu / Debian / Mint):** Download the `.deb` and run: ``` sudo dpkg -i wrystr_*.deb ``` **Linux (Fedora / openSUSE):** Download the `.rpm` and run: ``` sudo rpm -i wrystr-*.rpm # Fedora sudo zypper install wrystr-*.rpm # openSUSE ``` **Linux (Arch / Manjaro):** See [`PKGBUILD`](https://github.com/hoornet/wrystr/blob/main/PKGBUILD) in the repo, or build from source with `npm run tauri build`. **Windows:** Download the `.exe` installer and run it. **macOS (Apple Silicon):** Download the `aarch64.dmg` and open it. --- ⚡ Find Wrystr useful? [Zap the developer](https://github.com/hoornet/wrystr#support) or star the repo. releaseDraft: false prerelease: false includeUpdaterJson: true args: ${{ matrix.args }}