A federated, p2p communication platform. Chat with your friends from anywhere in the world!
  • Rust 98.8%
  • PowerShell 0.7%
  • Shell 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
ramhaurg 8472d9e400
All checks were successful
release / detect (push) Successful in 7m29s
release / release (push) Has been skipped
roost: add roost_name_by_code to find locally hosted roosts
2026-08-15 10:35:07 -04:00
.forgejo/workflows fix: remove redundant cp, move install scripts to artifacts correctly 2026-07-29 17:31:19 -04:00
.github/workflows ci: add kache build cache to Forgejo and GitHub workflows 2026-07-29 16:55:39 -04:00
.grit feat: add pronouns field to GossipPayload::Profile 2026-07-29 13:17:49 -04:00
src roost: add roost_name_by_code to find locally hosted roosts 2026-08-15 10:35:07 -04:00
.gitignore Add .gitignore and Forgejo Actions mirror workflow 2026-07-22 12:58:11 -04:00
Cargo.lock roost: support rename via moderation protocol and persist names 2026-08-14 17:50:10 -04:00
Cargo.toml fix: error messages now direct to TUI, not CLI; v0.6.3 2026-08-08 09:17:36 -04:00
install.ps1 fix: try/catch checksum for all PS versions 2026-07-30 19:02:56 -04:00
install.sh fix: all audit bugs — atomic download, multi-arch, install-dir-aware detection, exec fallback, doctor cleanup 2026-07-29 22:03:33 -04:00
LICENSE feat: add pronouns field to GossipPayload::Profile 2026-07-29 13:17:49 -04:00
README.md docs: update README — roosts built-in, Server deprecated 2026-08-06 09:33:14 -04:00

Starling

A federated, peer-to-peer communications platform — birds talking across the murmuration, with no company in the middle.

Starling is Discord's shape (servers, channels, voice, video, DMs) without the company that owns every server. Direct messages and small calls go straight between friends, peer-to-peer. Communities live on a server that belongs to whoever runs it — not to a corporation. Every message is end-to-end encrypted.

⚠️ Early access — under active development. Starling is young and moving fast. Expect rough edges, breaking changes, and missing features. It's built in the open by Saltfault, a two-person team; bug reports and feedback are welcome.

This is the main repo — you install it, and it installs the rest.


Install

Install the starling launcher — then it installs everything else. No Rust or compiler needed.

Windows (PowerShell):

irm https://forgejo.hearthhome.lol/Saltfault/Starling/raw/branch/main/install.ps1 | iex

Linux / macOS:

curl -sSfL https://forgejo.hearthhome.lol/Saltfault/Starling/raw/branch/main/install.sh | bash

Then use it to install the components you want:

starling install tui        # terminal client (chat, voice, video)

Roosts are built into the launcher — no separate install needed. Create one with starling roost create <name> and it runs in the background. See Roosts below.

The launcher downloads prebuilt binaries — no compilation.

Run starling-tui to launch the client. Upgrade everything: starling update. Uninstall: starling tui uninstall.

Building from source? You need Rust and a C compiler. See the per-platform setup in Starling-TUI.

Where do I go?

I want to… Go here
Use Starling right now (chat, voice, video) Install above, then see Starling-TUI for usage
Run my own community server starling roost create <name> — roosts are built-in, no separate server needed
Build a client on the protocol Starling (this repo) is the shared library
Follow the future GUI / mobile / web apps Desktop · Android · Web (all planned)

The repositories

Repo What it is Status
Starling (this) Project hub + shared library — protocol, crypto, networking, roost server 🚧 Active
Starling-TUI Terminal client 🚧 Active — text, voice, video
Starling-Server ⚠️ Deprecated — roost server moved to core (v0.6.0+). This crate is backward-compat only. 📦 Deprecated
Starling-Desktop Native GUI client 📋 Planned
Starling-Android Android client 📋 Planned
Starling-Web Browser (WASM) client 📋 Planned

The vocabulary

Starling uses a handful of bird terms, and only where they carry weight. Everything else keeps its ordinary networking name.

Word Meaning
Starling The whole platform
The murmuration The peer-to-peer network itself — thousands of leaderless birds, each reacting only to its neighbors, exactly like the gossip mesh underneath
Bird A single node / user
Flock A room — one gossip topic, one shared encryption key. Hatched by one bird, joined by its invite code
Roost A bird that stays online to keep a community's history and channels
Chirp A private message sealed to a single bird

How it works, briefly

  • Hatching a flock — a bird runs the client; its persistent node ID becomes the room code (e.g. BIRD-00CCFF-…). The gossip topic and the E2E key both derive from that code, so sharing the code is sharing membership.
  • Joining — another bird enters the same code, subscribes to the same topic, derives the same key. iroh's relay + hole-punching connects them across the internet with no addresses exchanged.
  • Text rides gossip; voice rides QUIC datagrams (drop-if-late); video rides QUIC uni-streams (JPEG frames). History for latecomers rides QUIC bi-streams.
  • Encryption — gossip text is end-to-end encrypted with ChaCha20-Poly1305; voice and video are E2E via QUIC TLS 1.3. Relays forward ciphertext they can't read.
  • Flocks vs roosts — a flock is joinable by anyone holding its code; a roost is a persistent, self-hosted community whose access becomes identity-gated (invited birds only) as roles land.

Protocol at a glance

Layer Protocol Purpose
Transport QUIC (via iroh) Peer connections, NAT traversal, relay fallback
Chat Gossip (iroh-gossip) Broadcast text to the flock
Voice QUIC datagrams Low-latency Opus audio
Video QUIC uni-streams JPEG frames from the webcam
Sync QUIC bi-streams History backfill for late joiners
Encryption ChaCha20-Poly1305 E2E for gossip text
Identity Ed25519 (iroh) Persistent node identity
Serialization postcard Compact binary encoding

Audio: 48 kHz stereo Opus, 20 ms frames, with a 2-second jitter buffer. Video: webcam via nokhwa (Media Foundation / AVFoundation / V4L2), JPEG frames rendered as terminal half-blocks.


Roadmap

Phase Feature Status
0 Foundations — module layout, channels, logging Shipped
1 Text chat in a flock Shipped
2 Voice calls (Opus + QUIC datagrams) Shipped
3 E2E encryption & profiles Shipped
4 Video in the terminal Shipped
5 Presence & history sync 🚧 In progress
6 Many flocks at once 🚧 In progress
7 Roosts: persistent servers & channels 🚧 In progress
8 Roles & permissions (invite-only roosts) 📋 Planned
9 Cryptographic identity — signing, chirps 🚧 In progress
10 Own the murmuration — self-hosted relays 📋 Planned

License

Apache 2.0