- Website was never linked from the README. Add a header link line (Website / Download / AUR) directly under the tagline and a second pointer in the Download section. - Verify example used vega_0.12.1_amd64.AppImage.tar.gz — AppImage was dropped in v0.1.6. Swap in a current .deb example. - Sig note was stale: .deb and .rpm actually ship with minisign signatures now (tauri-action unified installer and updater artifacts). Only .dmg is unsigned.
18 KiB
Vega
Wrystr is now Vega. Same project, same developer, new name. If you were using Wrystr, your data migrates automatically on first launch — no action needed. Read more about the rename.
A cross-platform desktop Nostr client built with Tauri 2.0 + React + TypeScript. Polished UI, deep Lightning integration, and first-class support for long-form writing.
Website: veganostr.com · Download: Releases · AUR: vega-nostr-git
Named after Jurij Vega (1754–1802), a Slovenian mathematician who made knowledge accessible through his pioneering logarithm tables — just as Vega makes writing accessible on Nostr.
Download
Grab the latest release from the Releases page, or visit veganostr.com for screenshots and an introduction.
| Platform | File | Command |
|---|---|---|
| Ubuntu / Debian / Mint | .deb |
sudo dpkg -i vega_*.deb |
| Fedora | .rpm |
sudo rpm -i vega-*.rpm |
| openSUSE | .rpm |
sudo zypper install vega-*.rpm |
| Arch / Manjaro | AUR | yay -S vega-nostr-git |
| Windows | .exe installer |
run the installer |
| macOS (Apple Silicon) | aarch64.dmg |
open and drag to Applications |
Windows note: The installer is not yet code-signed. Windows SmartScreen will show an "Unknown publisher" warning — click "More info → Run anyway" to install.
Linux note: Video and audio playback requires GStreamer codec packages. The AUR package installs these automatically. For .deb/.rpm installs, you may need:
# Arch / Manjaro
sudo pacman -S gst-plugins-base gst-plugins-good gst-libav
# Ubuntu / Debian
sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-libav
# Fedora
sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-libav
Verifying signatures
Release updater artifacts (.tar.gz, .nsis.zip, .app.tar.gz) include .sig files signed with minisign. To verify:
# Save the public key
echo "untrusted comment: minisign public key: F9D2C39297592652
RWRSJlmXksPS+cSpOrnmUpmJSebrbT1gxNeS33X/S7fxBAb/SdvWewNm" > vega.pub
# Verify an artifact
minisign -Vm Vega_0.12.9_amd64.deb -p vega.pub
Note: The macOS .dmg is not yet signed. Linux .deb/.rpm and Windows .exe/.msi ship with minisign .sig files — the same signatures used by the auto-updater.
Features
Identity & accounts
- In-app key generation with plain-language nsec backup — no browser extension required
- Create new account from the account switcher — no need to restart or go through onboarding again
- Login with nsec (full access) or npub (read-only)
- NIP-46 remote signer — connect via
bunker://URI (nsecBunker, Amber, etc.) with session persistence across restarts - Multi-account switcher — save multiple identities, switch instantly from the sidebar
- OS keychain integration — nsec stored in macOS Keychain / Windows Credential Manager / Linux Secret Service; sessions survive restarts
Feed & content
- Live streaming feed — persistent relay subscriptions deliver new notes in real-time; no manual refresh needed
- Global and following feeds with live relay connection
- Language/script feed filter — filter by writing system (Latin, CJK, Cyrillic, Arabic, Korean, etc.) via dropdown in feed header; uses Unicode detection + NIP-32 language tags
- Compose notes, inline replies, nested thread trees with reply-to-any-note and multi-level back navigation
- Image upload with NIP-98 auth — paste from clipboard, drag-drop, or use the file picker; uploads authenticated via NIP-98 HTTP Auth with fallback services
- Image lightbox — click any image to view full-screen; Escape to close, arrow keys to navigate multi-image posts
- Feed reply context — replies show "↩ replying to @name"; click to jump to the parent thread or scroll to it in the current thread
- Reactions (NIP-25) with live network counts
- Follow / unfollow (NIP-02) with contact list publishing
- Quote & Repost (NIP-18) — one-click repost or quote with compose modal
- Bookmarks (NIP-51 kind 10003) — save/unsave notes and articles; Notes/Articles tabs in bookmark view; article bookmarks use
atags for parameterized replaceable events; synced to relays - Mute users (NIP-51) — muted list synced to relays, filtered from feed
- Long-form article experience (NIP-23) — markdown toolbar (bold, italic, heading, link, image, quote, code, list) with keyboard shortcuts (Ctrl+B/I/K); multi-draft management with draft list, resume, delete; cover image file picker; dedicated article feed with Latest/Following tabs; article search by keyword or hashtag; article reader with reading time, bookmark, like, and zap; profile Articles tab
- Quoted note inline preview —
nostr:note1…/nostr:nevent1…renders as an inline card - naddr clickable links —
nostr:naddr1…references resolve to clickable named links (article titles, etc.) - Syntax highlighting — code blocks in notes and articles render with syntax highlighting
- Note rendering: images, video, mentions, hashtags, njump.me link interception
- External links — all http(s) links open in your system browser via Tauri opener
- Emoji reactions — reaction picker with common emojis on note cards; emoji insertion in compose and reply boxes via categorized emoji picker
- Keyword muting — word/phrase mute list with client-side filtering across all views
- Web of Trust filter — hide notes, reactions, and zaps from people outside your social graph (people you follow + follows-of-follows), powered by Vertex DVM trust scoring; toggleable in Settings
- Direct Messages (NIP-04 + NIP-17 gift wrap) — conversation list, thread view, per-message decryption; unread badge in sidebar
- Notifications — background poller (60s) for mentions, zaps, new followers; each type independently toggleable; OS push notifications; 🔔 in sidebar with unread badge
- New follower badges — recently gained followers marked with a "new" badge and sorted to the top of your follows list
Relay & network
- Relay status badge — compact "8/12 relays" indicator in feed header with color coding (green/yellow/red by connection ratio); hover shows per-relay connection status
- Toast notifications — transient status messages for relay events: "Connection lost — reconnecting", "Back online", "Relays reconnected"
- Relay health checker — NIP-11 info fetch, WebSocket latency probing, online/slow/offline classification; expandable cards show all supported NIPs, software, description; per-relay remove button; "Remove dead" strips offline relays; "Publish list" publishes NIP-65 relay list; auto-checks on mount
- Relay recommendations — discover relays based on your follows' NIP-65 relay lists; shows follow count, one-click "Add"
- Embedded Nostr relay — built-in strfry relay with catch-up sync on startup; your notes are always available locally even when remote relays are slow or offline
- Vega public relay —
wss://relay2.veganostr.comincluded by default; custom Go relay with NIP-45/50/77, ensuring data availability when other relays are flaky or down - Relay management: add/remove relays, all in one consolidated Relays view
- NIP-65 outbox model — reads user relay lists (kind 10002) so you see notes from people who publish to their own relays; publish your own relay list to Nostr
Podcasts & Value 4 Value
- Built-in podcast player — search and play podcasts via Fountain.fm integration with Podcast Index enrichment
- V4V streaming — stream sats per minute to podcast creators while listening via Lightning (keysend + LNURL-pay)
- Auto-streaming — enable once, and V4V starts automatically on every supported episode at your chosen rate
- Per-episode caps & weekly budgets — set spending limits; streaming stops automatically when caps are reached
- V4V sidebar section — dedicated dashboard with live streaming status, budget bars, stats, settings, and full history
- Recipient breakdown — see exactly who gets paid and their split percentages
- V4V nudge — brief non-intrusive tooltip when a V4V-enabled episode starts playing (once per episode per session)
- V4V badges on episodes — ⚡ V4V pill on episode cards so you know which shows support it
Lightning & zaps
- Per-account NWC wallet — each account remembers its own Lightning wallet; switching accounts loads the correct one automatically
- NWC guided wizard — wallet picker (Alby Hub, Alby Extension, Mutiny, Phoenix) with per-wallet setup steps and inline URI validation
- Send zaps via NWC (NIP-47 + NIP-57) with amount presets, custom amounts, comment
- Zap counts on notes (⚡ N sats inline)
- Zap history — Received and Sent tabs with amounts, counterparts, comments, and clickable note previews
- Support / About page — zap the developer, Lightning + Bitcoin QR codes, Ko-fi and GitHub links
Discovery
- Trending feed — trending notes and articles from the last 24h, ranked by engagement with time decay scoring
- Media feed — dedicated "Media" view in sidebar with All/Videos/Images/Audio tab filtering
- Dedicated hashtag pages — clicking any #tag opens a live feed for that hashtag
- Trending hashtags — popular hashtags shown as clickable pills on the search idle screen
- Discover people — "follows of follows" suggestions on the Search page with mutual follow counts and one-click follow; persistent "don't suggest again" per person
- Advanced search —
by:author,mentions:npub,kind:number,is:article,has:image,since:2026-01-01,until:2026-12-31,#hashtag,"exact phrase", booleanOR; NIP-05 resolution for author lookups; client-side content filters for media types; search help panel with modifier reference - Search: NIP-50 full-text,
#hashtag, people search with inline follow, article search (kind 30023) - NIP-05 verification badges — cached verification with green checkmark on note cards
Personalization
- Color themes — 7 built-in themes: Midnight (default dark), Light, Catppuccin Mocha, Sepia, Gruvbox, Nord Frost, Hackerman; instant switching from Settings
- Font size — Small / Normal / Large / Extra Large presets; scales the entire UI uniformly
Performance & UX
- Resilient relay connectivity — all relay queries have timeouts (no more infinite loading); automatic reconnection with NDK instance reset as last resort; toast notifications for connection events; feed diagnostics for debugging
- Per-tab "last updated" timestamp — relative time indicator in feed header shows how fresh each tab's data is
- Subscription debug panel —
Ctrl+Shift+Dtoggles a hidden panel showing NDK uptime, live subscription status, per-relay state, feed timestamps, and recent diagnostics - Auto-updater — "Update & restart" banner when a new version is available
- SQLite note cache — feed loads instantly from local cache on startup; profiles cached for immediate avatar display
- Data export — export bookmarks, follows, and relay list as JSON via native save dialog
- Profile media gallery — "Media" tab on profiles shows a grid of the user's images, videos, and audio; images open in lightbox
- Reading list tracking — read/unread state on bookmarked articles with unread dot indicators and sidebar badge
- Profile banner polish — hero-height banner with click-to-lightbox, avatar overlaps banner edge with ring
- System tray — close button hides to tray; "Quit" in tray menu to fully exit
- Collapsible sidebar (icon-only mode)
- Keyboard shortcuts —
ncompose,/search,j/knavigate feed,Escback,?help overlay - Skeleton loading placeholders, view fade transitions
- Media pause on navigation — video and audio in feed automatically pause when you navigate to another view
- Accessibility — WCAG AA contrast compliance, ARIA labels, reduced motion support
- Podcast player stability — 15s loading timeout with user-friendly error messages; automatic V4V stop on audio failure
- Read-only mode banner — persistent top-of-app warning when not signed in, so you always know you're in read-only mode
Supported NIPs
| NIP | Description | Status |
|---|---|---|
| NIP-01 | Basic protocol flow | Full |
| NIP-02 | Follow list | Full |
| NIP-04 | Encrypted direct messages (legacy) | Full |
| NIP-05 | DNS-based verification | Full (display + live verify in editor) |
| NIP-10 | Reply threading | Full (nested trees, root+reply markers) |
| NIP-11 | Relay information | Full (health checker) |
| NIP-17 | Private direct messages (gift wrap) | Full |
| NIP-18 | Reposts | Full |
| NIP-19 | bech32-encoded entities | Full (npub, nsec, note, nevent, nprofile, naddr) |
| NIP-21 | nostr: URI scheme |
Full |
| NIP-23 | Long-form content (articles) | Full (editor, reader, feed, search) |
| NIP-25 | Reactions | Full (emoji reactions) |
| NIP-27 | Text note references | Full |
| NIP-32 | Labeling | Partial (language filter via script tags) |
| NIP-46 | Nostr Connect (remote signer) | Full (bunker:// login) |
| NIP-47 | Wallet Connect (NWC) | Full |
| NIP-50 | Search | Full (notes, articles, people) |
| NIP-51 | Lists | Partial (bookmarks, mute list) |
| NIP-57 | Zaps | Full |
| NIP-65 | Relay list metadata | Full (outbox model) |
| NIP-98 | HTTP Auth | Full (image uploads) |
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 |
| Local storage | SQLite (rusqlite, bundled) |
| Keychain | keyring crate (OS-native) |
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.
Up next:
- Custom feeds / lists
- NIP-96 file storage
- NIP-58 badges, NIP-72 communities
- WoT-powered feed ranking
Support
Vega is free and open-source. If it's useful to you:
| Method | Details |
|---|---|
| ⚡ Zap (in-app) | Open the support view in Vega's sidebar and zap directly |
| ⚡ Lightning | jure@getalby.com |
| ₿ Bitcoin | bc1qcgaupf80j28ca537xjlcs9dm9s03khezjs7crp |
| ☕ Ko-fi | ko-fi.com/jure |
| ♥ GitHub Sponsors | github.com/sponsors/hoornet |
| ★ GitHub star | Helps with visibility and grant applications |
Wrystr is now Vega
In March 2026, Wrystr was renamed to Vega — named after Jurij Vega (1754–1802), a Slovenian mathematician and artillery officer from the same region as the developer. Vega made knowledge accessible through his pioneering logarithm tables; this project aims to do the same for writing on Nostr.
Why rename? Wrystr was a working title that never rolled off the tongue. With real users arriving, it was time for a name that's easy to say, easy to remember, and carries meaning.
What changed:
- GitHub repo:
hoornet/wrystr→hoornet/vega(old URLs redirect) - AUR package:
wrystr-git→vega-nostr-git - Binary name:
wrystr→vega - Database: auto-migrates
wrystr.db→vega.dbon first launch - Settings, keychain, localStorage: preserved automatically, no action needed
What didn't change: The code, the features, the developer, the license. It's the same project.
Acknowledgements
Vega is built on the shoulders of excellent open-source projects:
- Tauri — the desktop shell that makes cross-platform Rust+Web apps possible
- NDK (Nostr Dev Kit) by Pablo Fernandez — the Nostr protocol library that powers all relay communication
- Nostr protocol by fiatjaf — the protocol itself
- React, Vite, Tailwind CSS, Zustand — the frontend stack
- ants by Gigi — inspiration and Nostr ecosystem advocacy
- The Nostr community — for building an open, censorship-resistant communication layer
License
MIT License — Copyright (c) 2026 Jure Sršen — hoornet