# Owncast

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

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.

Alternative to: Twitch, YouTube Live

- Capabilities: operable
- Vertical: video-streaming
- Shape: product
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/owncast/owncast (MIT), 11491 stars, last commit 2026-09-03
- Last activity: 2026-09-03
- Page: apps/owncast--owncast.html
- JSON: apps/owncast--owncast.json

## 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

## Editions

- Free: Free, open source
  - binary: https://owncast.online/docs/quickstart/
  - container: https://hub.docker.com/r/owncast/owncast
  - source: https://github.com/owncast/owncast

## Operable: what an agent can drive

Operability: official. Interface: api at https://owncast.online/api/ (published by the builder, local).

### Reach (partial coverage)

- Set stream title, name, summary, tags, and page content: reachable. openapi.yaml: /admin/config/streamtitle, /admin/config/name, /admin/config/serversummary, /admin/config/tags, /admin/config/pagecontent
- Manage stream keys and RTMP/web ports: reachable. openapi.yaml: /admin/config/streamkeys, /admin/config/rtmpserverport, /admin/config/webserverport
- Configure video output variants, codec, and latency: reachable. openapi.yaml: /admin/config/video/streamoutputvariants, /admin/config/video/codec, /admin/config/video/streamlatencylevel
- Moderate chat: hide messages, ban IPs, set moderators: reachable. openapi.yaml: /admin/chat/messagevisibility, /admin/chat/users/ipbans/create, /admin/chat/users/setmoderator
- Read live status, viewer counts, and hardware stats: reachable. openapi.yaml: /admin/status, /admin/viewers, /admin/viewersOverTime, /admin/hardwarestats
- Manage Fediverse followers: reachable. openapi.yaml: /admin/followers, /admin/followers/approve, /admin/followers/remove, /admin/followers/blocked
- Disconnect the inbound broadcast: reachable. openapi.yaml: /admin/disconnect
- Start broadcasting: not reachable. Owncast only ingests RTMP; starting a stream is the encoder's job (OBS, ffmpeg), not an API call
- Send chat messages as an integration: reachable. docs Integrations section: Access Tokens and External Actions; public /chat endpoints in openapi.yaml
- Configure S3 storage and external CDN: reachable. openapi.yaml: /admin/config/s3, /admin/config/videoservingendpoint

## Code stack

- Languages: Go, TypeScript
- Frameworks: React
- Package manager: npm
- Database: SQLite
- Hosting target: Linux server, Docker

## Evidence and confidence

- formFactor: README: Go backend plus React web frontend served on :8080 (confidence 0.95)
- executionModel: no model at runtime; ffmpeg transcoding only (confidence 0.99)
- operability: openapi.yaml at repo root and owncast.online/api published by the Owncast project (confidence 0.95)
- effort: no env var, config file, or prompt file documented; runtime flags only (owncast.online/docs/configuration/runtime-flags) (confidence 0)
- editions: MIT LICENSE; free downloads and Docker image (confidence 0.95)
- active: GitHub pushedAt 2026-09-03; release v0.2.5 2026-04-11
- reach:  (confidence 0.85)

## 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

- https://owncast.online (sourcing:video-streaming:community)
- https://github.com/owncast/owncast (sourcing:video-streaming:community)
- https://owncast.online/docs/configuration/runtime-flags/ (analysis)
