142 lines
4.2 KiB
Markdown
142 lines
4.2 KiB
Markdown
<p align="center">
|
|
<img src="crates/sunstone-gtk/assets/sunstone-mark.svg" alt="Sunstone" width="120">
|
|
</p>
|
|
|
|
# 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
|