mothermachine

Browse / Video and streaming

Owncast

Self-hosted single-streamer live video and chat server with an admin REST API.

Operable ProductWeb app Deterministic GoTypeScript API License: MIT

A Go server that accepts RTMP from OBS or any encoder, serves an HLS player with chat, and federates to the Fediverse. Everything the admin panel does is an HTTP endpoint documented in the repo's openapi.yaml, so an agent can retitle the stream, moderate chat, rotate stream keys, and read viewer stats.

Use it when
  • I want to stream to my own domain instead of Twitch and have my agent retitle the stream and moderate chat
  • I run community events and need a private RTMP endpoint with chat I control
Gotchas
  • Admin API uses HTTP basic auth with the admin password; issue Access Tokens for integrations instead of sharing it
  • No Windows server support; use WSL2
  • Configuration lives in the SQLite database and admin panel, not in a config file, so infrastructure-as-code means scripting the API

Last activity Sep 3, 2026. Fit: adaptable 0, operable 3.

Editions

Free · Free open source

For agents: JSON · Markdown

Operable: what an agent can drive

Interface

OfficialAPIpublished by the builderlocal

How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.

Docs
owncast.online/api/

Reach

Partial coverage. 9 of 10 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Set stream title, name, summary, tags, and page contentReachableopenapi.yaml: /admin/config/streamtitle, /admin/config/name, /admin/config/serversummary, /admin/config/tags, /admin/config/pagecontent
Manage stream keys and RTMP/web portsReachableopenapi.yaml: /admin/config/streamkeys, /admin/config/rtmpserverport, /admin/config/webserverport
Configure video output variants, codec, and latencyReachableopenapi.yaml: /admin/config/video/streamoutputvariants, /admin/config/video/codec, /admin/config/video/streamlatencylevel
Moderate chat: hide messages, ban IPs, set moderatorsReachableopenapi.yaml: /admin/chat/messagevisibility, /admin/chat/users/ipbans/create, /admin/chat/users/setmoderator
Read live status, viewer counts, and hardware statsReachableopenapi.yaml: /admin/status, /admin/viewers, /admin/viewersOverTime, /admin/hardwarestats
Manage Fediverse followersReachableopenapi.yaml: /admin/followers, /admin/followers/approve, /admin/followers/remove, /admin/followers/blocked
Disconnect the inbound broadcastReachableopenapi.yaml: /admin/disconnect
Start broadcastingNot reachableOwncast only ingests RTMP; starting a stream is the encoder's job (OBS, ffmpeg), not an API call
Send chat messages as an integrationReachabledocs Integrations section: Access Tokens and External Actions; public /chat endpoints in openapi.yaml
Configure S3 storage and external CDNReachableopenapi.yaml: /admin/config/s3, /admin/config/videoservingendpoint

Code stack

Languages
GoTypeScript
Frameworks
React
Package manager
npm
Database
SQLite
Hosting target
Linux serverDocker
Built
Human-written (recorded, never ranked)

Evidence and confidence

FieldWhere it was seenConfidence
formFactorREADME: Go backend plus React web frontend served on :808095%
executionModelno model at runtime; ffmpeg transcoding only99%
operabilityopenapi.yaml at repo root and owncast.online/api published by the Owncast project95%
effortno env var, config file, or prompt file documented; runtime flags only (owncast.online/docs/configuration/runtime-flags)0%
editionsMIT LICENSE; free downloads and Docker image95%
activeGitHub pushedAt 2026-09-03; release v0.2.5 2026-04-11–
reach85%

Open questions

  • Owncast has no documented env var or config file; only runtime flags (--database, --webserverport, --rtmpport, --adminpassword). If the Curator accepts flags as a surface, add Adaptable at fork-and-modify with fit 1
  • Confirm webhook endpoints (/admin/webhooks/*) in the current openapi.yaml; the first 80 paths listed did not reach them

Sources