- Bring streams in
- Accept SRT publishers, start managed pulls, or pull from another node when a viewer asks. Every path enters the same normalized stream model.
- Repair when needed
- Measure the stream first. Start a bounded CPU or GPU worker only when keyframes or audio need repair; compliant inputs stay on the passthrough path.
- Deliver live
- Serve HLS, LL-HLS and WHEP WebRTC from the same node. Keep storage-backed delivery and real-time playback as independent bounded outputs.
- Route media onward
- Push an active stream to one or more SRT destinations on demand or by standing rule. Each target has its own bounded lifecycle and cannot stall the source.
- Record and publish
- Keep a recording playable while it grows, finalize it at the same path, and publish committed artifacts safely to S3-compatible storage for archive or CDN delivery.
- Operate the system
- Use separate media and operational surfaces, stream and job status APIs, Prometheus metrics, structured logs, health probes, and bounded webhooks.
The media path. Under control.
Bring streams in over SRT. Repair only what needs encoding. Deliver HLS, LL-HLS and WHEP WebRTC, retain durable recordings with or without live playback, publish them to object storage, or route media onward. One Go binary composed from explicit input and output modules, with a data path that is bounded, measured, and written down.
What it does
Shape the system
Start with one node. Add cascade input and output when viewers move farther away. Add a registry when stream placement becomes a control-plane concern. Push SRT to another server, partner, or processing destination when the media path needs another level.
The topology grows from the same binary and the same contracts. No mandatory control plane, hosted dependency, or proprietary transport is inserted between levels.
Why dispergo
Transcode only when needed
Optional outputs build only when enabled. A compliant stream stays on the direct path without starting a transcode worker.
Bound every failure
Queues, retries, workers, viewers, uploads, and fan-out subscribers have explicit limits and isolated failure scopes.
Keep the data plane plain
One Go binary, one strict configuration document, and standards-based links between components.
Make claims observable
Status, metrics, structured events, compatibility tests, fault injection, and soak coverage make feature behavior inspectable. Capacity limits are explicit instead of guessed.
Status
dispergo is private alpha software. SRT push, managed pull and cascade input, conditional repair, HLS, LL-HLS, WHEP WebRTC, recording, S3 publishing, webhooks and SRT outputs are implemented. Interfaces may still change.
The name
dispergo is Latin, first person singular: dis + spargere, I scatter apart, I distribute. The English word broadcast is the same construction: broad + cast, to scatter seed widely, a farmer's word long before it became an engineer's.
It is also valid Italian: io dispergo, I disperse. That makes the domain dispergo.io a complete sentence, written back to front. And yes, the name ends in go.