zap.stream: live streaming on Nostr
End-to-end Nostr live streaming: Rust backend core, React frontend, native app. Lightning zaps, NIP-96 media, real-time FFmpeg ingestion.
zap.stream is a live streaming platform where every stream is a Nostr event (NIP-53) and viewers tip with Lightning zaps. A streamer's identity, followers and chat live on Nostr rather than in a platform account.
The server, zap-stream-core, is written in Rust. It takes RTMP and SRT ingest, transcodes with FFmpeg into several renditions, segments to HLS and publishes the stream events to Nostr. Streamers pay for transcoding from a balance topped up over Lightning.
It ships as a Docker Compose stack so anyone can run their own server, behind a public IP or a Cloudflare tunnel, and a server can advertise itself so zap.stream picks it up as an ingest option. The web client is TypeScript and React, and there is a native app written in Rust.
Ingest
RTMP and SRT in, decoded and re-encoded with FFmpeg in real time.
Delivery
HLS segmenting with multiple renditions, served straight from the core server.
Nostr
Streams published as NIP-53 live events, with live chat and zaps on the same protocol.
Payments
Streaming balances topped up over Lightning, with pay-per-minute transcoding.
Self-hosting
Docker Compose deploy with an admin UI, Cloudflare tunnel support and server discovery.
Clients
A React web app translated on Crowdin, and a native app in Rust.