Sunstone

A native Linux desktop nostr client — GTK4 + libadwaita, written in Rust on rust-nostr.

Social feed, long-form articles, live streams, video, DMs, groups, calendar, and zaps. Outbox (gossip) model on by default. Feeds are chronological.

Status: usable daily-driver, pre-1.0. Things move fast and may break.

Features

Identity & keys

  • Local nsec, stored NIP-49 encrypted (ncryptsec) behind a passphrase
  • NIP-46 remote signer (bunker) support
  • NIP-05 verification

Feed & posting

  • Following feed + browse any relay; NIP-65 relay lists with gossip/outbox routing
  • Notes, replies and threads (NIP-01/10) with inline @-mention typeahead
  • Quote reposts and reposts (NIP-18); reactions incl. NIP-30 custom emoji (NIP-25)
  • Polls (NIP-88), highlights (NIP-84)
  • Content warnings (NIP-36), deletions (NIP-09), comments (NIP-22)
  • Live note preview, broadcast to relays, seen-on-relays, and copy raw JSON

Articles — long-form (NIP-23): discovery (Following / second-degree Network / Tags), in-app reader + distraction-free full page, a markdown split-pane editor with system spellcheck, and your published + draft library.

Media & live

  • Live streams with HLS playback + NIP-53 chat; adaptive quality, audio-only mode
  • Video (NIP-71); inline feed video; picture-in-picture
  • Media upload via NIP-96 / Blossom, NIP-92 imeta

Zaps — NIP-57 lightning zaps over a NIP-47 (NWC) wallet.

Messaging & groups — NIP-17 DMs and NIP-29 relay groups.

Calendar — NIP-52 events with RSVP.

Organize — NIP-51 bookmarks, NIP-37 encrypted drafts, time-sectioned and grouped notifications (replies / mentions / reactions / reposts / zaps / poll votes).

Proxy — relay and media traffic can be routed through a SOCKS5/Tor proxy.

Install

There are no distro repositories yet. Prebuilt packages are built by hand and attached to the Releases page — download one, or build from source.

Flatpak (any distro)

Add Flathub once (for the shared GNOME runtime), then install the downloaded bundle:

flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user sunstone.flatpak
flatpak run dev.sunstone.Sunstone

Debian / Ubuntu (.deb)

sudo apt install ./sunstone_0.1.0-1_amd64.deb

Arch Linux

No AUR package yet — build it from the bundled recipe:

cd packaging/arch
makepkg -si

From source

Install the toolchain + dev libraries, then cargo build --release. The binary lands at target/release/sunstone.

Debian/Ubuntu (trixie+):

sudo apt install build-essential pkg-config libssl-dev \
  libgtk-4-dev libadwaita-1-dev libspelling-1-dev \
  libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
  gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-libav \
  gstreamer1.0-gtk4
cargo build --release

Arch:

sudo pacman -S --needed base-devel rust pkgconf openssl \
  gtk4 libadwaita libspelling gstreamer gst-plugins-base \
  gst-plugins-good gst-plugins-bad gst-plugin-gtk4 gst-libav
cargo build --release

Configuration

What Path
Settings, encrypted identity, bunker ~/.config/sunstone/
Event cache (LMDB), media cache, dead-relay list ~/.local/share/sunstone/

(Under Flatpak these live in ~/.var/app/dev.sunstone.Sunstone/.)

Useful environment variables:

  • RUST_LOG — e.g. RUST_LOG=sunstone_gtk=info,sunstone_core=info
  • SUNSTONE_HW_DECODE=1 — opt into hardware video decode (VA-API/NVDEC) where stable
  • SUNSTONE_SW_DECODE=1 — force software video decode

Building & hacking

cargo build           # workspace
cargo test            # core unit tests
cargo run             # launch (debug)

Two crates: sunstone-core (nostr/relay/data layer) and sunstone-gtk (GTK4/relm4 UI, binary sunstone).

Packaging recipes (Flatpak manifest, Arch PKGBUILD, local build helper) live in packaging/.

License

MIT © enki

S
Description
A Linux native desktop client for nostr.
Readme MIT 21 MiB
First go. Latest
2026-06-16 19:12:34 -07:00
Languages
Rust 99.7%
Shell 0.3%