Sunstone

# Sunstone A native Linux desktop [nostr](https://nostr.com) client — GTK4 + libadwaita, written in Rust on [rust-nostr](https://github.com/rust-nostr/nostr). Follows feed, long-form articles, live streams, video, DMs, groups, calendar, and zaps. Outbox (gossip) model on by default. > Status: Im still adding things as I see fit. Most things should be stable. There will be bugs and Ill try not to break shit with updates. > I want add music notes and expand on that side of things. ## Features **Login** - Local `nsec`, stored NIP-49 encrypted (`ncryptsec`) behind a passphrase - NIP-46 remote signer (bunker) support **Feed & posting** - Following feed + browse any relay; NIP-65 relay lists with gossip/outbox routing - Notes, replies and threads. - Quote reposts and reposts (NIP-18); reactions incl. NIP-30 custom emoji (NIP-25) - Polls (NIP-88) - Content warnings (NIP-36), deletions (NIP-09). - 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 **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. I plan on adding internal TOR and I2P support soon. ## Install Download a prebuilt package for your distro from the [Releases page](https://git.utn.lol/enki/sunstone/releases), then install the downloaded file — or build from source. ### Flatpak (any distro) Add Flathub once (for the shared GNOME runtime), then install the downloaded bundle: ```sh 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) ```sh sudo apt install ./sunstone_0.1.0-1_amd64.deb ``` ### Arch Linux ```sh sudo pacman -U sunstone-0.1.0-1-x86_64.pkg.tar.zst ``` Or build it yourself: ```sh 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+):** ```sh 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:** ```sh 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 ```sh 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/`](packaging/). ## License [MIT](LICENSE) © enki