Why I spent a year building Vega — a Tauri-based Nostr client with an embedded relay, Lightning zaps, and first-class long-form writing.
Most Nostr clients live in the browser or on your phone. That's fine for scrolling, but I kept hitting the same walls: I wanted a fast native app on my desktop, I wanted my notes to survive even if every relay I used disappeared, and I wanted to write — actual long-form articles, not just 280-character hot takes.
So I built Vega, a free and open-source (MIT) desktop Nostr client for Mac, Windows, and Linux. It's now at version 0.14, with 70+ features and 20 NIPs implemented. This post is about why it exists and the technical decisions that shaped it.
Wait, what's Nostr?
Quick primer if you haven't crossed paths with it yet: Nostr is a simple, open protocol for censorship-resistant social networking. Your identity is a keypair, not an account on someone's server. Your posts ("notes") are signed events published to relays — dumb, interchangeable servers anyone can run. No company owns the network, and clients are interchangeable too: log into any of them with the same key, and your identity, follows, and posts come with you.
That last part matters for what follows. When there's no platform lock-in, clients compete purely on quality. I thought the desktop deserved a serious contender.
Why a desktop app in 2026?
Fair question. The honest answer: because it's where I live. I write, I code, I listen to podcasts — all on a desktop with a real keyboard. And desktop apps can do things browser tabs can't:
- Run background services. Vega embeds an actual Nostr relay (strfry) inside the app. More on this below, because it's my favorite design decision.
- Store keys properly. Your Nostr private key goes into the OS-native keychain (macOS Keychain, Windows Credential Manager, Secret Service on Linux) — not localStorage.
- Be fast. Feeds load instantly from a local SQLite cache before a single relay connection opens.
The stack: Tauri 2.0, not Electron
Vega is built on Tauri 2.0 with a React 19 + TypeScript frontend. The Rust backend handles the native side: keychain access, SQLite, the embedded relay process, system tray, auto-updates.
I picked Tauri over Electron for the classic reasons, and they held up in practice. The installers are 6–11 MB depending on platform — not 150 MB. Memory usage is a fraction of an Electron equivalent because it uses the OS webview instead of bundling Chromium. And having Rust on the backend meant the security-sensitive parts (key storage, signing) live outside JavaScript entirely.
The frontend talks Nostr through NDK (Nostr Dev Kit), with Zustand for state and Tailwind 4 for styling. The split ended up being 91% TypeScript, 6% Rust — Tauri lets you keep the native layer thin.
My favorite feature: the embedded relay
Here's the problem with relying purely on public relays: they go down, they prune old events, they disappear. If your notes only exist on other people's servers, your data sovereignty is theoretical.
Vega's answer is to bundle strfry — a production-grade relay written in C++ — directly into the app. Every note you write is stored in your own local relay first, then broadcast to the network. On startup, Vega syncs your local relay with the network relays.
The result: your entire history lives on your machine, offline-ready, and you can back it up like any other data. If a public relay vanishes tomorrow, you rebroadcast and move on. This is what "own your data" should actually mean.
I also run a public relay for the network — relay2.veganostr.com, written in Go, supporting 19 NIPs including full-text search and NIP-42 auth. Running your own relay teaches you a lot about the protocol's edge cases. That's probably a post of its own.
Lightning everywhere
Nostr has native payments via Bitcoin's Lightning Network — "zaps" — and this is where it stops feeling like a Twitter clone and starts feeling like something new.
Vega integrates Lightning at several levels:
- Zaps with configurable presets, via Nostr Wallet Connect (NIP-47), with a guided setup wizard for Alby Hub, Mutiny, and Phoenix.
- A built-in V4V podcast player that streams sats to podcast creators in real time while you listen, with budgets and per-episode caps. Value-for-value podcasting is criminally underrated, and I wanted it as a first-class citizen, not a plugin.
- Zap history so you can actually see where your sats went.
Long-form writing as a first-class citizen
Most clients treat long-form content (NIP-23 articles) as an afterthought. Vega ships a full Markdown article editor with syntax highlighting, multi-draft management, and dedicated article feeds for reading. If Nostr is going to be a home for writers — and I think it can be a serious blogging platform, since your articles are portable, signed, and censorship-resistant — the tooling has to be there.
The small things that add up
A grab bag of details I'm proud of: eight themes (including Catppuccin Mocha and Gruvbox, because of course), the Atkinson Hyperlegible font option and WCAG AA contrast for accessibility, advanced search with modifiers like by:author and since:2026-01-01, script-based feed filtering (Latin/CJK/Cyrillic/Arabic), NIP-46 remote signer support so your key never has to touch the app at all, and encrypted DMs using NIP-17 gift wrap.
None of these is a headline feature. Together they're the difference between a demo and a daily driver.
About the name
Vega is named after Jurij Vega (1754–1802), a Slovenian mathematician famous for his logarithm tables — which put powerful calculation into everyone's hands. Making powerful tools accessible to everyone felt like the right patron for a client whose whole point is that no one can take your voice away. (Also, I'm Slovenian and his first name is the same as mine. It was fate.)
Try it, break it, tell me
Vega is MIT-licensed and free. Installers for macOS (Apple Silicon), Windows, and Linux (DEB/RPM/AUR) are on the site, and the code is on GitHub:
- 🌐 Site & downloads: veganostr.com
- 💻 Source: github.com/hoornet/vega
If you try it, I'd love to hear what breaks or what's missing — issues and PRs are very welcome. And if you're already on Nostr, come say hi over there.
This is the first post about the things I've been building — there's more coming (an AI-readable docs platform, a Home Assistant memory layer, a distraction-free Markdown editor…). Follow along if indie cross-platform apps are your thing.
Thanks for reading! Questions about Tauri, embedding a relay, or Nostr development in general — fire away in the comments.
Top comments (0)