Who goes live, in one open list
Channels from sources that allow it: the Owncast and Icecast directories, PeerTube instances, and streams and Telegram channels added by pull request. It checks every few minutes who is live and answers searches. Whether a Telegram channel is live, the app asks Telegram itself.
Endpoints
Read-only JSON over HTTPS, with no key and no cookies. Answers carry an ETag and may be kept for a minute, and any web page may read them. The directory relays no video and knows nothing of who asks.
GET/searchChannels and their live sessions, searched, filtered and sorted, a page at a timeGET/suggestWords, channels and filters while someone typesGET/channels/{id}One channel, its session if it is live, and how it playsGET/channels/{id}/sessionsIts recent sessionsGET/channels/{id}/scheduleIts announced sessionsGET/channels/lookupThe channel of a pasted link, matched by its host or handle aloneGET/sourcesEach source's capabilities and the state of its last sync
Sources
Only sources whose owners asked to be listed, or whose terms allow it. Twitch, YouTube, Kick and Bilibili wait until each one's terms are settled.
- OwncastServers whose owners chose to be listed in the Owncast directoryChecked every few minutes · plays in FinchGram
- PeerTubePublic lives on PeerTube instances whose robots.txt allows it, found through SepiaSearchChecked every few minutes · plays in FinchGram
- IcecastStations their servers mark as public in Xiph's Icecast directoryChecked every few minutes · plays in FinchGram, sound only
- HLSStreams their broadcasters added by pull requestChecked every few minutes · plays in FinchGram
- TelegramPublic channels added by pull requestWhether one is live, the app asks Telegram itself
- TwitchNot yetNot integrated yet: its links open in the browser
- YouTubeNot yetNot integrated yet: its links open in the browser
- KickNot yetNot integrated yet: its links open in the browser
- BilibiliNot yetNot integrated yet: its links open in the browser
Add a channel
A Telegram channel or a stream over HLS is one file, data/live/channels/<id>.json, added by a pull request. A check validates it, and once it is merged the directory lists it from the next deploy.
What every channel must be
- A place its owner made public: a Telegram channel, or a stream its broadcaster offers
- A stream over HLS only from its broadcaster, or with their permission
- Nothing that needs a key, a login or another app's headers to play
- Mature content marked as such, and no adult streams
Run your own directory
Fork the repository and deploy it to Cloudflare Workers under a domain of your own, or serve the same JSON from any server you like. A directory is a list anyone can keep: an app that reads one reads them all.
Source code