Compare commits
2
Commits
9ff7c7b99c
...
1c8c37b248
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c8c37b248 | ||
|
|
08792809d6 |
@@ -0,0 +1,110 @@
|
|||||||
|
<h1>
|
||||||
|
<img src="assets/icons/peerspeak.svg" width="48" align="left" alt="PeerSpeak icon">
|
||||||
|
PeerSpeak
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
Decentralized, peer-to-peer voice chat — full-mesh, NAT-traversing, with **no central server**. Built in Rust on [iroh](https://github.com/n0-computer/iroh) (QUIC), PipeWire audio, the Opus codec, and an [iced](https://github.com/iced-rs/iced) GUI.
|
||||||
|
|
||||||
|
Create a room, share the join ticket, and talk. Everyone connects directly to everyone else; relays are only used to punch through NATs when a direct path isn't available.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
| Launch screen | In a room |
|
||||||
|
|---|---|
|
||||||
|
|  |  |
|
||||||
|
|
||||||
|
| Settings |
|
||||||
|
|---|
|
||||||
|
|  |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
**Rooms & sessions**
|
||||||
|
- Create a room → shareable join ticket; join by pasting a ticket.
|
||||||
|
- Full-mesh multi-peer rooms with live presence.
|
||||||
|
- Recent-rooms list to hop back into a room someone's still in.
|
||||||
|
- Remembered nickname and in-call duration timer.
|
||||||
|
|
||||||
|
**Audio**
|
||||||
|
- PipeWire capture/playback, selectable input and output devices, per-app gain.
|
||||||
|
- Opus codec (48 kHz mono, 20 ms frames) with an adaptive jitter buffer + packet-loss concealment.
|
||||||
|
- Noise gate with a draggable threshold on a live mic meter (test your mic off-call too).
|
||||||
|
- Mix-bus soft limiter and opt-in echo cancellation (PipeWire WebRTC AEC + noise suppression).
|
||||||
|
|
||||||
|
**Voice controls**
|
||||||
|
- Self-mute, deafen, and rebindable push-to-talk.
|
||||||
|
- Per-peer volume, local mute, and speaking indicators.
|
||||||
|
|
||||||
|
**Text chat**
|
||||||
|
- In-room text chat over the gossip plane, with clickable links and inline image/audio attachments.
|
||||||
|
- Drag-selectable, copyable messages; right-click context menu on all text fields.
|
||||||
|
|
||||||
|
**Shared music listening**
|
||||||
|
- Build a personal playlist of local audio files with a full transport (play/pause, seek, reorder).
|
||||||
|
- Let others tune in: peers stream your current track, timeline-synced and gapless, sitting under voice at their own volume.
|
||||||
|
|
||||||
|
**Screen share** (via [pixelpass](https://gitbutter.xyz/mollusk/pixelpass))
|
||||||
|
- Share your screen; peers click 👁 Watch to open the stream in mpv (vlc fallback).
|
||||||
|
- Live badges on sharing peers; per-app audio capture.
|
||||||
|
|
||||||
|
**Recording & notifications**
|
||||||
|
- Local call recording (mic + incoming mix → WAV in `~/peerspeak-recordings/`).
|
||||||
|
- Desktop notifications and event chimes with per-event custom sound overrides.
|
||||||
|
|
||||||
|
**UI & networking**
|
||||||
|
- Selectable room layouts (3-Column, Bottom Dock, Drawer) with draggable, persisted dividers.
|
||||||
|
- 10 built-in themes (Catppuccin, Dracula, Nord, Tokyo Night, Gruvbox, Solarized…), all WCAG-AA checked.
|
||||||
|
- Network mode picker (relay-no-discovery default, full n0, or direct-only); retained-address reconnect.
|
||||||
|
- Config, window size/position, and all preferences persisted to `~/.config/peerspeak/`.
|
||||||
|
|
||||||
|
See [`docs/FEATURES.md`](docs/FEATURES.md) for the full inventory and field-test status, and [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for internals.
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
- **Contacts & invites** — friends list with invite-notification one-click join (design in [`docs/contacts-plan.md`](docs/contacts-plan.md)).
|
||||||
|
- **Spatial audio & per-peer EQ.**
|
||||||
|
- **Soundboard** — play short clips into the call mix.
|
||||||
|
- **Room persistence / invite links** beyond the raw ticket.
|
||||||
|
- **Windows support** — cross-compiles and launches under Wine today; needs a real WASAPI audio pass (see [`docs/WINDOWS.md`](docs/WINDOWS.md)).
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
PeerSpeak builds with a stable Rust toolchain (edition 2024). Install the system dependencies below, then:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo build --release
|
||||||
|
./target/release/peerspeak
|
||||||
|
```
|
||||||
|
|
||||||
|
### System dependencies
|
||||||
|
|
||||||
|
**Arch Linux**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo pacman -S --needed rust pipewire opus pkgconf git
|
||||||
|
```
|
||||||
|
|
||||||
|
**Debian / Ubuntu**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install build-essential pkg-config clang libclang-dev \
|
||||||
|
libpipewire-0.3-dev libopus-dev libasound2-dev libxcb1-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Plus a Rust toolchain via [rustup](https://rustup.rs/). `clang`/`libclang` are needed for the PipeWire bindings (bindgen).
|
||||||
|
|
||||||
|
At runtime you need a running **PipeWire** server. Screen sharing additionally requires `pixelpass` on your `PATH`, and `mpv` (or `vlc`) to watch a peer's share.
|
||||||
|
|
||||||
|
### Packaging
|
||||||
|
|
||||||
|
- **Arch:** `cd packaging && makepkg -si` (uses [`packaging/PKGBUILD`](packaging/PKGBUILD)).
|
||||||
|
- **Debian/Ubuntu:** `.deb` is built with [`cargo-deb`](https://github.com/kornelski/cargo-deb) from the `[package.metadata.deb]` block in `Cargo.toml`. Build inside a Debian/Ubuntu environment so the binary links that distro's glibc.
|
||||||
|
- **Windows:** see [`docs/WINDOWS.md`](docs/WINDOWS.md).
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Private build — not for redistribution. See `Cargo.toml` for details.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 148 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 139 KiB |
Reference in New Issue
Block a user